Skip to content

Commit 5a85a2a

Browse files
authored
Merge pull request #44471 from github/repo-sync
Repo sync
2 parents 8288f90 + 7e3558d commit 5a85a2a

36 files changed

Lines changed: 567 additions & 375 deletions

.github/workflows/benchmark-pages.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,9 +116,9 @@ jobs:
116116
echo ""
117117
echo "### Errors"
118118
echo ""
119-
echo "| Status | Mode | Path |"
120-
echo "|--------|------|------|"
121-
jq -r '.errors[] | "| \(.status) | \(.mode) | \(.path) |"' /tmp/benchmark-results.json
119+
echo "| Status | Mode | Path | Error |"
120+
echo "|--------|------|------|-------|"
121+
jq -r '.errors[] | "| \(.status) | \(.mode) | \(.path) | \(.errorBody // "" | gsub("\\|"; "\\|") | gsub("\r"; " ") | gsub("\n"; " ")) |"' /tmp/benchmark-results.json
122122
} >> "$BODY_FILE"
123123
fi
124124

.github/workflows/changelog-agent.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,10 +321,6 @@ jobs:
321321
with:
322322
node-version-file: 'package.json'
323323

324-
- name: Install Copilot CLI
325-
if: steps.check_parent.outputs.has_parent == 'true' && steps.check_existing.outputs.exists == 'false'
326-
run: npm install -g @github/copilot@prerelease
327-
328324
- name: Prepare prompts for LLM
329325
if: steps.check_parent.outputs.has_parent == 'true' && steps.check_existing.outputs.exists == 'false'
330326
id: prepare_prompts

.github/workflows/index-general-search.yml

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -294,33 +294,42 @@ jobs:
294294
echo 'EOF'
295295
} >> "$GITHUB_OUTPUT"
296296
297-
- name: Close previous scraping failure issues
297+
- name: Comment on or create scraping failure issue
298298
if: ${{ steps.check-artifacts.outputs.has_artifacts == 'true' && fromJSON(steps.aggregate.outputs.result || '{"hasFailures":false}').hasFailures }}
299299
env:
300300
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
301+
FAILURE_MESSAGE: ${{ fromJSON(steps.aggregate.outputs.result || '{"message":""}').message }}
301302
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
303+
FILE_URL: ${{ github.server_url }}/${{ github.repository }}/blob/main/.github/workflows/index-general-search.yml
304+
WORKFLOW_NAME: ${{ github.workflow }}
302305
run: |
303-
open_issues=$(gh issue list \
306+
# Reuse the oldest open scraping-failures issue if one exists,
307+
# to keep the noise down. Otherwise open a new one.
308+
existing_issue=$(gh issue list \
304309
--repo github/docs-engineering \
305310
--label "search-scraping-failures" \
306311
--state open \
307-
--json number \
308-
--jq '.[].number')
309-
for issue in $open_issues; do
310-
gh issue close "$issue" \
312+
--limit 200 \
313+
--json number,createdAt \
314+
--jq 'sort_by(.createdAt) | .[0].number // empty')
315+
316+
today=$(date -u +%Y-%m-%d)
317+
318+
if [ -n "$existing_issue" ]; then
319+
comment_body=$(cat <<EOF
320+
### Search index scraping failures ($today)
321+
322+
$FAILURE_MESSAGE
323+
324+
**Workflow run:** $RUN_URL
325+
EOF
326+
)
327+
gh issue comment "$existing_issue" \
311328
--repo github/docs-engineering \
312-
--comment "Closing in favor of a newer scraping failure report from $RUN_URL"
313-
done
329+
--body "$comment_body"
330+
exit 0
331+
fi
314332
315-
- name: Create scraping failure issue
316-
if: ${{ steps.check-artifacts.outputs.has_artifacts == 'true' && fromJSON(steps.aggregate.outputs.result || '{"hasFailures":false}').hasFailures }}
317-
env:
318-
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
319-
FAILURE_MESSAGE: ${{ fromJSON(steps.aggregate.outputs.result || '{"message":""}').message }}
320-
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
321-
FILE_URL: ${{ github.server_url }}/${{ github.repository }}/blob/main/.github/workflows/index-general-search.yml
322-
WORKFLOW_NAME: ${{ github.workflow }}
323-
run: |
324333
body=$(cat <<EOF
325334
### Search index scraping failures
326335
@@ -331,6 +340,8 @@ jobs:
331340
**Workflow file:** $FILE_URL
332341
333342
This issue was automatically created by the \`$WORKFLOW_NAME\` workflow.
343+
Subsequent failures from later workflow runs will be added as comments
344+
on this issue rather than opening a new issue each day.
334345
335346
---
336347
@@ -357,16 +368,17 @@ jobs:
357368
offending/illegal tag token when available.
358369
3. **Open a pull request that fixes the corruptions** rather than
359370
just commenting the findings on this issue. The issue body above
360-
already lists the affected pages; the value the agent adds is
361-
the fix. Where possible, fix the underlying pattern in
371+
(and any subsequent comments) already lists the affected pages;
372+
the value the agent adds is the fix. Where possible, fix the
373+
underlying pattern in
362374
\`src/languages/lib/correct-translation-content.ts\` so the same
363375
corruption is corrected on future syncs.
364376
EOF
365377
)
366378
gh issue create \
367379
--repo github/docs-engineering \
368380
--label "search-scraping-failures" \
369-
--title "[Search Scraping Failures] $(date -u +%Y-%m-%d)" \
381+
--title "[Search Scraping Failures] $today" \
370382
--body "$body"
371383
372384
- name: Send consolidated Slack notification

.github/workflows/test-changed-content.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,16 @@ jobs:
4949
uses: tj-actions/changed-files@22103cc46bda19c2b464ffe86db46df6922fd323 # v47.0.5
5050
with:
5151
files: 'content/**'
52+
# Needed to expose `all_old_new_renamed_files` (old,new pairs for renames).
53+
# Without this, files git classifies as renames (status R) are invisible to
54+
# the deleted-file redirect check below and old URLs can silently 404.
55+
include_all_old_new_renamed_files: true
5256

5357
- name: Run tests
5458
env:
5559
CHANGED_FILES: ${{ steps.changed_files.outputs.all_modified_files }}
5660
DELETED_FILES: ${{ steps.changed_files.outputs.deleted_files }}
61+
# Space-separated `oldPath,newPath` pairs. The test treats the old paths
62+
# like deleted files so missing redirects on renames are caught.
63+
RENAMED_FILES: ${{ steps.changed_files.outputs.all_old_new_renamed_files }}
5764
run: npm test -- src/content-render/tests/render-changed-and-deleted-files.ts

Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,11 @@ RUN npm run warmup-remotejson
114114
# --------------------------------------
115115
FROM build AS precompute_stage
116116

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

120123
# -------------------------------------------------
121124
# PRODUCTION STAGE: What will run on the containers

content/copilot/tutorials/copilot-cli-hooks.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ REDACTED_TOOL_ARGS="$(echo "$TOOL_ARGS_RAW" | \
374374
sed -E 's/ghp_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
375375
sed -E 's/gho_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
376376
sed -E 's/ghu_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
377-
sed -E 's/ghs_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
377+
sed -E 's/ghs_[A-Za-z0-9\._\-]{20,}/[REDACTED_TOKEN]/g' | \
378378
sed -E 's/Bearer [A-Za-z0-9_\-\.]+/Bearer [REDACTED]/g' | \
379379
sed -E 's/--password[= ][^ ]+/--password=[REDACTED]/g' | \
380380
sed -E 's/--token[= ][^ ]+/--token=[REDACTED]/g')"
@@ -416,7 +416,7 @@ deny() {
416416
sed -E 's/ghp_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
417417
sed -E 's/gho_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
418418
sed -E 's/ghu_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
419-
sed -E 's/ghs_[A-Za-z0-9]{20,}/[REDACTED_TOKEN]/g' | \
419+
sed -E 's/ghs_[A-Za-z0-9\.\-_]{20,}/[REDACTED_TOKEN]/g' | \
420420
sed -E 's/Bearer [A-Za-z0-9_\-\.]+/Bearer [REDACTED]/g' | \
421421
sed -E 's/--password[= ][^ ]+/--password=[REDACTED]/g' | \
422422
sed -E 's/--token[= ][^ ]+/--token=[REDACTED]/g')"
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
---
2+
title: Export or migrate GitHub Classroom data
3+
intro: 'Export your GitHub Classroom data to local files or migrate your data to a partner platform.'
4+
versions:
5+
fpt: '*'
6+
---
7+
8+
Use the GitHub command line interface to export your Classroom data or migrate to a partner platform.
9+
10+
## Export your Classroom data to local files
11+
12+
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).
13+
14+
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).
15+
16+
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.
17+
18+
1. Verify that all your classroom data has been exported to JSON or CSV files on your local machine.
19+
20+
## Migrate existing GitHub Classroom data to a partner
21+
22+
### Migrating to Codio
23+
24+
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.
25+
26+
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).
27+
28+
Watch the [on-demand webinar about using GitHub with Codio](https://www.codio.com/on-demand-github-codio-webinar).
29+
30+
### Migrating to Classroom 50
31+
32+
> [!NOTE]
33+
> Classroom 50 will become generally available on July 1, 2026.
34+
35+
Classroom 50 uses GitHub repositories and actions for autograding, so it's very similar to the current GitHub Classroom setup.
36+
37+
The [Teacher Guide](https://github.com/foundation50/classroom50/wiki/Teacher-Guide) provides instructions for setting up Classroom 50.
38+
39+
Participate in the [Classroom 50 community discussions](https://github.com/foundation50/classroom50/discussions) if you have questions or suggestions.

content/education/manage-coursework-with-github-classroom/get-started-with-github-classroom/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ redirect_from:
1010
children:
1111
- /about-github-classroom
1212
- /glossary
13+
- /export-or-migrate-github-classroom-data
1314
---

content/education/manage-coursework-with-github-classroom/index.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,6 @@ children:
1111
- /learn-with-github-classroom
1212
---
1313

14+
> [!NOTE]
15+
> 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).
16+

content/graphql/overview/rate-limits-and-query-limits-for-the-graphql-api.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,9 +287,11 @@ These two examples show how to calculate the total nodes in a call.
287287

288288
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".
289289

290+
When this happens, you may receive either a `502` or `504` status code. Both status codes indicate that your request timed out.
291+
290292
{% data variables.product.github %} reserves the right to change the timeout window to protect the speed and reliability of the API.
291293

292-
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.
294+
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).
293295

294296
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.
295297

0 commit comments

Comments
 (0)