Skip to content

Commit 906dc0a

Browse files
authored
Merge branch 'main' into docs-issue-cross-referencing-42376
2 parents 8bc278f + aa46593 commit 906dc0a

File tree

189 files changed

+6960
-570
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

189 files changed

+6960
-570
lines changed
Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
name: 'Weekly page benchmark'
2+
3+
# **What it does**: Benchmarks all pages via the article API, flags errors and slow pages
4+
# **Why we have it**: Catch perf regressions and broken pages before users hit them
5+
# **Who does it impact**: Docs engineering
6+
7+
on:
8+
workflow_dispatch:
9+
schedule:
10+
- cron: '20 16 * * 1' # Every Monday at 16:20 UTC / 8:20 PST
11+
12+
permissions:
13+
contents: read
14+
15+
jobs:
16+
benchmark:
17+
if: github.repository == 'github/docs-internal'
18+
runs-on: ubuntu-latest
19+
env:
20+
BENCHMARK_LABEL: benchmark-regression
21+
ISSUE_REPO: github/docs-engineering
22+
steps:
23+
- name: Checkout
24+
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
25+
with:
26+
persist-credentials: 'false'
27+
28+
- uses: ./.github/actions/node-npm-setup
29+
30+
- name: Build
31+
run: npm run build
32+
33+
- name: Start server
34+
env:
35+
NODE_ENV: production
36+
PORT: 4000
37+
run: |
38+
npm run start-for-ci &
39+
sleep 5
40+
curl --retry-connrefused --retry 6 -I http://localhost:4000/
41+
42+
- name: Run benchmark
43+
run: |
44+
npx tsx src/workflows/benchmark-pages.ts \
45+
--versions "free-pro-team@latest,enterprise-cloud@latest,enterprise-server@latest" \
46+
--modes article-body \
47+
--slow 500 \
48+
--json /tmp/benchmark-results.json | tee /tmp/benchmark-output.txt
49+
50+
- name: Check results and create issue if needed
51+
if: always()
52+
env:
53+
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
54+
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
55+
run: |
56+
echo "Reading benchmark results..."
57+
ERRORS=$(jq '.errors | length' /tmp/benchmark-results.json 2>/dev/null || echo "0")
58+
SLOW=$(jq '.slow | length' /tmp/benchmark-results.json 2>/dev/null || echo "0")
59+
TOTAL=$(jq '.totalRequests' /tmp/benchmark-results.json 2>/dev/null || echo "0")
60+
P50=$(jq '.p50' /tmp/benchmark-results.json 2>/dev/null || echo "0")
61+
P99=$(jq '.p99' /tmp/benchmark-results.json 2>/dev/null || echo "0")
62+
MAX=$(jq '.max' /tmp/benchmark-results.json 2>/dev/null || echo "0")
63+
echo "Done reading results: $TOTAL pages, $ERRORS errors, $SLOW slow"
64+
65+
VERSIONS="free-pro-team@latest, enterprise-cloud@latest, enterprise-server@latest"
66+
LANGS="en"
67+
68+
if [ "$ERRORS" = "0" ] && [ "$SLOW" = "0" ]; then
69+
echo "✅ All clear — $TOTAL pages, p50=${P50}ms, p99=${P99}ms, max=${MAX}ms"
70+
71+
echo "Checking for existing open issue..."
72+
existing=$(gh issue list \
73+
--repo "$ISSUE_REPO" \
74+
--label "$BENCHMARK_LABEL" \
75+
--state open \
76+
--json number \
77+
--jq '.[0].number // empty' 2>/dev/null || true)
78+
if [ -n "$existing" ]; then
79+
echo "Closing issue #$existing..."
80+
gh issue close "$existing" \
81+
--repo "$ISSUE_REPO" \
82+
--comment "All clear as of $RUN_URL — closing."
83+
echo "Done closing issue #$existing"
84+
else
85+
echo "No existing issue to close"
86+
fi
87+
exit 0
88+
fi
89+
90+
PROBLEM_COUNT=$((ERRORS + SLOW))
91+
echo "Found $ERRORS errors and $SLOW slow pages ($PROBLEM_COUNT total problems)"
92+
93+
echo "Ensuring label exists..."
94+
gh label create "$BENCHMARK_LABEL" \
95+
--repo "$ISSUE_REPO" \
96+
--description "Weekly page benchmark found slow or errored pages" \
97+
--color "e16f24" 2>/dev/null || true
98+
echo "Done ensuring label"
99+
100+
echo "Building issue body..."
101+
BODY_FILE=/tmp/benchmark-issue-body.md
102+
{
103+
echo "## Weekly page benchmark found issues"
104+
echo ""
105+
echo "**Run:** $RUN_URL"
106+
echo "**Languages:** $LANGS"
107+
echo "**Versions:** $VERSIONS"
108+
echo "**Total pages:** $TOTAL"
109+
echo "**Stats:** p50=${P50}ms · p99=${P99}ms · max=${MAX}ms"
110+
echo "**Errors:** $ERRORS"
111+
echo "**Slow (≥500ms):** $SLOW"
112+
} > "$BODY_FILE"
113+
114+
if [ "$ERRORS" -gt 0 ]; then
115+
{
116+
echo ""
117+
echo "### Errors"
118+
echo ""
119+
echo "| Status | Mode | Path |"
120+
echo "|--------|------|------|"
121+
jq -r '.errors[] | "| \(.status) | \(.mode) | \(.path) |"' /tmp/benchmark-results.json
122+
} >> "$BODY_FILE"
123+
fi
124+
125+
if [ "$SLOW" -gt 0 ]; then
126+
{
127+
echo ""
128+
echo "### Slow pages"
129+
echo ""
130+
echo "| Time | Mode | Path |"
131+
echo "|------|------|------|"
132+
jq -r '.slow[] | "| \(.timeMs)ms | \(.mode) | \(.path) |"' /tmp/benchmark-results.json
133+
} >> "$BODY_FILE"
134+
fi
135+
echo "Done building issue body"
136+
137+
echo "Checking for existing open issue..."
138+
existing=$(gh issue list \
139+
--repo "$ISSUE_REPO" \
140+
--label "$BENCHMARK_LABEL" \
141+
--state open \
142+
--json number \
143+
--jq '.[0].number // empty' 2>/dev/null || true)
144+
145+
if [ -n "$existing" ]; then
146+
echo "Commenting on existing issue #$existing..."
147+
gh issue comment "$existing" \
148+
--repo "$ISSUE_REPO" \
149+
--body-file "$BODY_FILE"
150+
echo "Done commenting on issue #$existing"
151+
else
152+
echo "Creating new issue..."
153+
gh issue create \
154+
--repo "$ISSUE_REPO" \
155+
--label "$BENCHMARK_LABEL" \
156+
--title "[Benchmark] ${PROBLEM_COUNT} slow or errored pages detected" \
157+
--body-file "$BODY_FILE"
158+
echo "Done creating issue"
159+
fi
160+
161+
- uses: ./.github/actions/slack-alert
162+
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
163+
with:
164+
slack_channel_id: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
165+
slack_token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
166+
167+
- uses: ./.github/actions/create-workflow-failure-issue
168+
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
169+
with:
170+
token: ${{ secrets.DOCS_BOT_PAT_BASE }}

.github/workflows/content-pipelines.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,12 @@ jobs:
7171
git config user.email "github-actions[bot]@users.noreply.github.com"
7272
7373
if git ls-remote --exit-code --heads origin "$UPDATE_BRANCH" > /dev/null 2>&1; then
74-
git fetch origin "$UPDATE_BRANCH" main
74+
git fetch --unshallow origin "$UPDATE_BRANCH" main 2>/dev/null || git fetch origin "$UPDATE_BRANCH" main
7575
git checkout "$UPDATE_BRANCH"
7676
git merge origin/main --no-edit || {
7777
echo "Merge conflict with main — resetting branch to main"
7878
git merge --abort 2>/dev/null || true
79-
git checkout main
79+
git checkout -f main
8080
git branch -D "$UPDATE_BRANCH"
8181
if [ -z "$PR_NUMBER" ]; then
8282
git push origin --delete "$UPDATE_BRANCH" || true

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Docs changelog
22

3+
**26 March 2026**
4+
5+
If you use both Copilot CLI and VS Code, when you start the CLI it will automatically connect to a currently open VS Code workspace that matches the directory in which you're using the CLI. You can also manually connect to VS Code by using the `/ide` slash command.
6+
7+
This new article documents this feature and outlines the benefits of sharing context, trust settings, and output between Copilot CLI and VS Code:
8+
9+
[Connecting GitHub Copilot CLI to VS Code](https://docs.github.com/en/copilot/how-tos/copilot-cli/connecting-vs-code)
10+
11+
<hr>
12+
313
**23 March 2026**
414

515
We've added an article with details of the various command-line options for allowing/denying tools that Copilot CLI can use.

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
# ---------------------------------------------------------------
1111
# To update the sha:
1212
# https://github.com/github/gh-base-image/pkgs/container/gh-base-image%2Fgh-base-noble
13-
FROM ghcr.io/github/gh-base-image/gh-base-noble:20260320-170214-g814cb7830@sha256:90350e63f9b56ec3f60f5ef9f51b489c4eef6462c7727e0d6729a1c8d95a4aa7 AS base
13+
FROM ghcr.io/github/gh-base-image/gh-base-noble:20260326-105710-g59112a0a7@sha256:ba809251141daf76a02c7c064ae2c3b27a904f2f62b16582f62fe4328267f38f AS base
1414

1515
# Install curl for Node install and determining the early access branch
1616
# Install git for cloning docs-early-access & translations repos

content/admin/monitoring-and-managing-your-instance/monitoring-your-instance/about-support-bundles.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ Support bundles are designed to help diagnose issues while protecting sensitive
7272
* **User data**: Support bundles don't include user profile information beyond what appears in system logs.
7373
* **License information**: The bundle includes your organization name and license reference so {% data variables.contact.github_support %} can identify your instance.
7474

75-
When you provide a support bundle to {% data variables.contact.github_support %}, {% data variables.product.company_short %} uses the data only to address your support request. {% data variables.product.company_short %} won't disclose your data to third parties without your explicit consent unless required by law.
75+
When you provide a support bundle to {% data variables.contact.github_support %}, {% data variables.product.company_short %} uses the data only to address your support request. For details on how {% data variables.product.company_short %} handles your data, see the [{% data variables.product.company_short %} Privacy Statement](https://github.com/site/privacy).
7676

7777
## Support bundle size and generation time
7878

content/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/customizing-dependabot-security-prs.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,11 @@ updates:
127127
assignees:
128128
- "user-name"
129129
- package-ecosystem: "gomod"
130+
directories:
131+
- "**/*"
132+
schedule:
133+
interval: "weekly"
134+
open-pull-requests-limit: 0
130135
groups:
131136
# Group security updates for golang dependencies
132137
# into a single pull request

content/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/configuring-dependabot-security-updates.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,11 @@ updates:
110110
registries:
111111
- example
112112
- package-ecosystem: "gomod"
113+
directories:
114+
- "**/*"
115+
schedule:
116+
interval: "weekly"
117+
open-pull-requests-limit: 0
113118
groups:
114119
golang:
115120
applies-to: security-updates
@@ -118,7 +123,7 @@ updates:
118123
```
119124
120125
> [!NOTE]
121-
> In order for {% data variables.product.prodname_dependabot %} to use this configuration for security updates, the `directory` must be the path to the manifest files, and you should not specify a `target-branch`.
126+
> In order for {% data variables.product.prodname_dependabot %} to use this configuration for security updates, the `directory` must be the path to the manifest files (or `directories` must contain paths or glob patterns matching the manifest file locations), and you should not specify a `target-branch`.
122127

123128
## Further reading
124129

content/copilot/concepts/agents/about-agent-skills.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ contentType: concepts
1212
---
1313

1414
> [!NOTE]
15-
> Agent Skills work with {% data variables.copilot.copilot_coding_agent %}, the {% data variables.copilot.copilot_cli %} and agent mode in {% data variables.product.prodname_vscode %} Insiders. Support in the stable version of {% data variables.product.prodname_vscode_shortname %} is coming soon.
15+
> Agent skills work with {% data variables.copilot.copilot_coding_agent %}, the {% data variables.copilot.copilot_cli %}, and agent mode in {% data variables.product.prodname_vscode %}.
1616
1717
## About agent skills
1818

@@ -22,8 +22,8 @@ You can create your own skills to teach {% data variables.product.prodname_copil
2222

2323
{% data variables.product.prodname_copilot_short %} supports:
2424

25-
* Project skills, stored in your repository (`.github/skills` or `.claude/skills`)
26-
* Personal skills, stored in your home directory and shared across projects (`~/.copilot/skills` or `~/.claude/skills`) ({% data variables.copilot.copilot_coding_agent %} and {% data variables.copilot.copilot_cli %} only)
25+
* Project skills, stored in your repository (`.github/skills`, `.claude/skills`, or `.agents/skills`)
26+
* Personal skills, stored in your home directory and shared across projects (`~/.copilot/skills`, `~/.claude/skills`, or `~/.agents/skills`)
2727

2828
Support for organization-level and enterprise-level skills is coming soon.
2929

0 commit comments

Comments
 (0)