Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/benchmark-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -116,9 +116,9 @@ jobs:
echo ""
echo "### Errors"
echo ""
echo "| Status | Mode | Path |"
echo "|--------|------|------|"
jq -r '.errors[] | "| \(.status) | \(.mode) | \(.path) |"' /tmp/benchmark-results.json
echo "| Status | Mode | Path | Error |"
echo "|--------|------|------|-------|"
jq -r '.errors[] | "| \(.status) | \(.mode) | \(.path) | \(.errorBody // "" | gsub("\\|"; "\\|") | gsub("\r"; " ") | gsub("\n"; " ")) |"' /tmp/benchmark-results.json
} >> "$BODY_FILE"
fi
Expand Down
4 changes: 0 additions & 4 deletions .github/workflows/changelog-agent.yml
Original file line number Diff line number Diff line change
Expand Up @@ -321,10 +321,6 @@ jobs:
with:
node-version-file: 'package.json'

- name: Install Copilot CLI
if: steps.check_parent.outputs.has_parent == 'true' && steps.check_existing.outputs.exists == 'false'
run: npm install -g @github/copilot@prerelease

- name: Prepare prompts for LLM
if: steps.check_parent.outputs.has_parent == 'true' && steps.check_existing.outputs.exists == 'false'
id: prepare_prompts
Expand Down
52 changes: 32 additions & 20 deletions .github/workflows/index-general-search.yml
Original file line number Diff line number Diff line change
Expand Up @@ -294,33 +294,42 @@ jobs:
echo 'EOF'
} >> "$GITHUB_OUTPUT"
- name: Close previous scraping failure issues
- name: Comment on or create scraping failure issue
if: ${{ steps.check-artifacts.outputs.has_artifacts == 'true' && fromJSON(steps.aggregate.outputs.result || '{"hasFailures":false}').hasFailures }}
env:
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
FAILURE_MESSAGE: ${{ fromJSON(steps.aggregate.outputs.result || '{"message":""}').message }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
FILE_URL: ${{ github.server_url }}/${{ github.repository }}/blob/main/.github/workflows/index-general-search.yml
WORKFLOW_NAME: ${{ github.workflow }}
run: |
open_issues=$(gh issue list \
# Reuse the oldest open scraping-failures issue if one exists,
# to keep the noise down. Otherwise open a new one.
existing_issue=$(gh issue list \
--repo github/docs-engineering \
--label "search-scraping-failures" \
--state open \
--json number \
--jq '.[].number')
for issue in $open_issues; do
gh issue close "$issue" \
--limit 200 \
--json number,createdAt \
--jq 'sort_by(.createdAt) | .[0].number // empty')
today=$(date -u +%Y-%m-%d)
if [ -n "$existing_issue" ]; then
comment_body=$(cat <<EOF
### Search index scraping failures ($today)
$FAILURE_MESSAGE
**Workflow run:** $RUN_URL
EOF
)
gh issue comment "$existing_issue" \
--repo github/docs-engineering \
--comment "Closing in favor of a newer scraping failure report from $RUN_URL"
done
--body "$comment_body"
exit 0
fi
- name: Create scraping failure issue
if: ${{ steps.check-artifacts.outputs.has_artifacts == 'true' && fromJSON(steps.aggregate.outputs.result || '{"hasFailures":false}').hasFailures }}
env:
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
FAILURE_MESSAGE: ${{ fromJSON(steps.aggregate.outputs.result || '{"message":""}').message }}
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
FILE_URL: ${{ github.server_url }}/${{ github.repository }}/blob/main/.github/workflows/index-general-search.yml
WORKFLOW_NAME: ${{ github.workflow }}
run: |
body=$(cat <<EOF
### Search index scraping failures
Expand All @@ -331,6 +340,8 @@ jobs:
**Workflow file:** $FILE_URL
This issue was automatically created by the \`$WORKFLOW_NAME\` workflow.
Subsequent failures from later workflow runs will be added as comments
on this issue rather than opening a new issue each day.
---
Expand All @@ -357,16 +368,17 @@ jobs:
offending/illegal tag token when available.
3. **Open a pull request that fixes the corruptions** rather than
just commenting the findings on this issue. The issue body above
already lists the affected pages; the value the agent adds is
the fix. Where possible, fix the underlying pattern in
(and any subsequent comments) already lists the affected pages;
the value the agent adds is the fix. Where possible, fix the
underlying pattern in
\`src/languages/lib/correct-translation-content.ts\` so the same
corruption is corrected on future syncs.
EOF
)
gh issue create \
--repo github/docs-engineering \
--label "search-scraping-failures" \
--title "[Search Scraping Failures] $(date -u +%Y-%m-%d)" \
--title "[Search Scraping Failures] $today" \
--body "$body"
- name: Send consolidated Slack notification
Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/test-changed-content.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,16 @@ jobs:
uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5
with:
files: 'content/**'
# Needed to expose `all_old_new_renamed_files` (old,new pairs for renames).
# Without this, files git classifies as renames (status R) are invisible to
# the deleted-file redirect check below and old URLs can silently 404.
include_all_old_new_renamed_files: true

- name: Run tests
env:
CHANGED_FILES: ${{ steps.changed_files.outputs.all_modified_files }}
DELETED_FILES: ${{ steps.changed_files.outputs.deleted_files }}
# Space-separated `oldPath,newPath` pairs. The test treats the old paths
# like deleted files so missing redirects on renames are caught.
RENAMED_FILES: ${{ steps.changed_files.outputs.all_old_new_renamed_files }}
run: npm test -- src/content-render/tests/render-changed-and-deleted-files.ts
7 changes: 5 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,11 @@ RUN npm run warmup-remotejson
# --------------------------------------
FROM build AS precompute_stage

# Generate precomputed page info
RUN npm run precompute-pageinfo -- --max-versions 2
# Generate precomputed page info. Only English + free-pro-team@latest
# permalinks are cached; cache misses for older versions and translated
# pages fall through to runtime compute (which is cheap and Fastly-cached
# per pathname after the first hit).
RUN npm run precompute-pageinfo -- --max-versions 1

# -------------------------------------------------
# PRODUCTION STAGE: What will run on the containers
Expand Down
4 changes: 2 additions & 2 deletions content/copilot/tutorials/copilot-cli-hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ REDACTED_TOOL_ARGS="$(echo "$TOOL_ARGS_RAW" | \
sed -E 's/ghp_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/gho_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghu_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghs_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghs_[A-Za-z0-9\._\-]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/Bearer [A-Za-z0-9_\-\.]+/Bearer [REDACTED]/g' | \
sed -E 's/--password[= ][^ ]+/--password=[REDACTED]/g' | \
sed -E 's/--token[= ][^ ]+/--token=[REDACTED]/g')"
Expand Down Expand Up @@ -416,7 +416,7 @@ deny() {
sed -E 's/ghp_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/gho_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghu_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghs_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/ghs_[A-Za-z0-9\.\-_]{20,}/[REDACTED_TOKEN]/g' | \
sed -E 's/Bearer [A-Za-z0-9_\-\.]+/Bearer [REDACTED]/g' | \
sed -E 's/--password[= ][^ ]+/--password=[REDACTED]/g' | \
sed -E 's/--token[= ][^ ]+/--token=[REDACTED]/g')"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
title: Export or migrate GitHub Classroom data
intro: 'Export your GitHub Classroom data to local files or migrate your data to a partner platform.'
versions:
fpt: '*'
---

Use the GitHub command line interface to export your Classroom data or migrate to a partner platform.

## Export your Classroom data to local files

1. Set up the GitHub command line interface (CLI) tool and install the GitHub Classroom extension. For more information, see [AUTOTITLE](/education/manage-coursework-with-github-classroom/teach-with-github-classroom/using-github-classroom-with-github-cli).

1. Download the Classroom Export Utility script to your computer. See the [classroom-export-utility repository](https://github.com/github-education-resources/classroom-export-utility/blob/main/export-classrooms.sh).

1. Follow the instructions in the [Classroom Export Utility README](https://github.com/github-education-resources/classroom-export-utility/blob/main/README.md) to download your Classroom data.

1. Verify that all your classroom data has been exported to JSON or CSV files on your local machine.

## Migrate existing GitHub Classroom data to a partner

### Migrating to Codio

Follow the [instructions on the Codio documentation site](https://docs.codio.com/instructors/setupcourses/import-from-github-classroom.html) and watch the video walkthrough to import your GitHub classrooms to the Codio platform.

You can also book a free consultation to get personalized advice and tips on your classroom setup and migration options at [https://www.codio.com/consultation](https://www.codio.com/consultation).

Watch the [on-demand webinar about using GitHub with Codio](https://www.codio.com/on-demand-github-codio-webinar).

### Migrating to Classroom 50

> [!NOTE]
> Classroom 50 will become generally available on July 1, 2026.

Classroom 50 uses GitHub repositories and actions for autograding, so it's very similar to the current GitHub Classroom setup.

The [Teacher Guide](https://github.com/foundation50/classroom50/wiki/Teacher-Guide) provides instructions for setting up Classroom 50.

Participate in the [Classroom 50 community discussions](https://github.com/foundation50/classroom50/discussions) if you have questions or suggestions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ redirect_from:
children:
- /about-github-classroom
- /glossary
- /export-or-migrate-github-classroom-data
---
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,6 @@ children:
- /learn-with-github-classroom
---

> [!NOTE]
> As of May 2026, new {% data variables.product.prodname_classroom %} sign-ups are no longer available as we transition to partner solutions. For more information on this transition, please see [the {% data variables.product.prodname_classroom %} transition announcement](https://gh.io/classroom-sunset).
Original file line number Diff line number Diff line change
Expand Up @@ -287,9 +287,11 @@ These two examples show how to calculate the total nodes in a call.

If {% data variables.product.github %} takes more than 10 seconds to process an API request, {% data variables.product.github %} will terminate the request and you will receive a timeout response and a message reporting that "We couldn't respond to your request in time".

When this happens, you may receive either a `502` or `504` status code. Both status codes indicate that your request timed out.

{% data variables.product.github %} reserves the right to change the timeout window to protect the speed and reliability of the API.

You can check the status of the GraphQL API at [githubstatus.com](https://www.githubstatus.com/) to determine whether the timeout is due to a problem with the API. You can also try to simplify your request or try your request later. For example, if you are requesting a large number of objects in a single request, you can try requesting fewer objects split over multiple queries.
You can check the status of the GraphQL API at [githubstatus.com](https://www.githubstatus.com/) to determine whether the timeout is due to a problem with the API. You can also try to simplify your request or try your request later. For tips on improving query performance, see [Query optimization strategies](#query-optimization-strategies).

If a timeout occurs for any of your API requests, additional points will be deducted from your primary rate limit for the next hour to protect the speed and reliability of the API.

Expand Down
5 changes: 3 additions & 2 deletions data/reusables/enterprise-accounts/dormant-user-activity.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ A user is considered active if the user has performed any of the following activ
* Pushing to an internal repository via SSH{% endif %}
* Being added to a repository
* Changing the visibility of a repository
* Creating an issue or pull request
* Commenting on an issue or pull request
* Creating a pull request
* Commenting on a pull request
* Closing or reopening an issue or pull request
* Applying a label to an issue or pull request, or removing a label
* Assigning or unassigning an issue or pull request
Expand All @@ -27,6 +27,7 @@ A user is considered active if the user has performed any of the following activ

* Accessing resources by using a {% data variables.product.pat_generic %}, SSH key, or {% data variables.product.prodname_github_app %}.
* Git operations (such as pushes, pulls, repository cloning) on private repositories.
* Creating or commenting on an issue.

{% ifversion ghes %}
A user will also be considered active if their account has been updated by LDAP.
Expand Down
5 changes: 0 additions & 5 deletions eslint.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -244,7 +244,6 @@ export default [
'src/content-render/unified/annotate.ts',
'src/content-render/unified/index.ts',
'src/data-directory/lib/get-data.ts',
'src/fixtures/tests/guides.ts',
'src/frame/components/context/MainContext.tsx',
'src/frame/lib/page-data.ts',
'src/frame/tests/page.ts',
Expand All @@ -258,7 +257,6 @@ export default [
'src/languages/lib/correct-translation-content.ts',
'src/languages/lib/render-with-fallback.ts',
'src/links/lib/update-internal-links.ts',
'src/links/scripts/check-github-github-links.ts',
'src/rest/components/get-rest-code-samples.ts',
'src/rest/pages/category.tsx',
'src/rest/pages/subcategory.tsx',
Expand All @@ -280,9 +278,6 @@ export default [
'src/search/lib/search-request-params/get-search-from-request-params.ts',
'src/search/scripts/index/index-cli.ts',
'src/search/scripts/index/utils/indexing-elasticsearch-utils.ts',
'src/tests/helpers/check-url.ts',
'src/tests/scripts/copy-fixture-data.ts',
'src/tests/vitest.setup.ts',
'src/types/github__markdownlint-github.d.ts',
'src/types/markdownlint-lib-rules.d.ts',
'src/types/markdownlint-rule-helpers.d.ts',
Expand Down
90 changes: 0 additions & 90 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading