Skip to content

Commit 944a7f0

Browse files
authored
Merge branch 'main' into fix-wiki-edit-message-wording
2 parents 00edcc6 + aa46593 commit 944a7f0

File tree

355 files changed

+7181
-14203
lines changed

Some content is hidden

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

355 files changed

+7181
-14203
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:20260218-111945-g0ef8bb15f@sha256:03eb088f3581049afaf2984f917a3a9be7e5efc248049f4156cd83481579fb59 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
11.2 KB
Loading

content/actions/how-tos/manage-runners/larger-runners/use-custom-images.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ category:
1010
contentType: how-tos
1111
---
1212

13-
{% data reusables.actions.custom-images-public-preview-note %}
14-
1513
## Custom images
1614

1715
You can create a custom image to define the exact environment that your {% data variables.actions.github_hosted_larger_runners %} use. Custom images let you preinstall tools, dependencies, and configurations to speed up workflows and improve consistency across jobs.

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/billing/concepts/billing-cycles.md

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ redirect_from:
1111
- /billing/using-the-new-billing-platform/viewing-your-subscriptions-and-billing-date
1212
- /billing/using-the-new-billing-platform/about-the-billing-cycle
1313
- /billing/managing-your-billing/about-the-billing-cycle
14-
product: '{% data reusables.billing.enhanced-billing-platform-product %}'
1514
contentType: concepts
1615
category:
1716
- Get started with billing
@@ -44,27 +43,19 @@ You can switch between annual and monthly billing from the "Licensing" page unde
4443

4544
## How mid-cycle changes affect your billing
4645

47-
Mid-cycle changes to your account can affect your bill.
46+
Changes you make mid-cycle, such as adding or removing users, seats, or resources, can affect your bill. Some behaviors apply to both metered and volume-based billing; others are specific to one model.
4847

49-
### Changes to metered products
48+
### Adding users or resources
5049

51-
Metered products (such as {% data variables.product.prodname_actions %} minutes, {% data variables.product.prodname_registry %} storage, or {% data variables.product.prodname_codespaces %} compute) are billed based on your actual usage throughout the month. For more information on how usage is calculated for a specific product, see [Where to find usage details for specific products](#where-to-find-usage-details-for-specific-products).
52-
53-
### Changes to volume-based products
54-
55-
Volume-based products are billed per user, seat, or resource. Changes to these mid-cycle won’t always immediately change your bill—but they may affect your next invoice.
56-
57-
#### Adding users or resources
58-
59-
* **Add users or licenses**: For license-based products like {% data variables.product.prodname_copilot_short %}, {% data variables.product.prodname_enterprise %}, or {% data variables.product.prodname_GHAS %}, you'll be billed a **prorated amount** based on how many days remain in the current billing cycle.
50+
* **Add users or licenses**: For products like {% data variables.product.prodname_copilot_short %}, {% data variables.product.prodname_enterprise %}, or {% data variables.product.prodname_GHAS %}, you'll be billed a prorated amount for the added licenses based on how many days remain in the current billing cycle.
6051
* **Add organizations or repositories**: These will also result in **prorated charges**, which appear on your next invoice.
6152

62-
#### Removing users or resources
53+
### Removing users or resources
6354

64-
* **Remove users or seats**: The users access is revoked immediately, but you'll still be billed for the **full billing cycle**. Removing a user won't reduce your current bill.
55+
* **Remove users or seats**: The user's access is revoked immediately, but you'll still be billed for the **full billing cycle**. Removing a user won't reduce your current bill.
6556
* **Remove organizations or repositories**: Charges **stop immediately** when removed, but you'll still be billed for any usage **up to that point**.
6657

67-
#### Transferring users or resources
58+
### Transferring users or resources
6859

6960
* **Within the same billing account**: No double-billing. Moving users or resources between organizations under the same account is handled automatically.
7061
* **Between different billing accounts**: Each account is billed according to its own cycle. You may see charges in both accounts if the move overlaps billing periods.

content/billing/concepts/product-billing/git-lfs.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ redirect_from:
3939
- /billing/using-the-new-billing-platform/about-billing-for-git-large-file-storage
4040
- /billing/managing-billing-for-your-products/managing-billing-for-git-large-file-storage/about-billing-for-git-large-file-storage
4141
shortTitle: Git LFS
42-
product: '{% data reusables.billing.enhanced-billing-platform-product %}'
4342
contentType: concepts
4443
category:
4544
- Understand product costs

content/billing/how-tos/set-up-payment/india-one-time-payments.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ category:
1414
- Set up payment
1515
---
1616

17-
1817
## About the Reserve Bank of India's recurring payments regulation
1918

2019
A new payments regulation from the Reserve Bank of India (RBI) recently came into effect. This regulation places additional requirements on recurring online transactions and has prevented some {% data variables.product.company_short %} customers in India from making recurring payments. Customers using payment methods issued in India for any recurring transactions on {% data variables.product.github %} may find that their payments are declined by their banks or card issuers. For more information, see [the RBI's press release](https://www.rbi.org.in/Scripts/BS_PressReleaseDisplay.aspx?prid=51353).
2120

2221
The regulation applies to all recurring transactions, including:
22+
2323
* {% data variables.product.prodname_dotcom %} plan subscriptions (Pro, Team, Enterprise)
2424
* {% data variables.product.prodname_marketplace %} purchases
2525
* {% data variables.product.prodname_sponsors %} transactions
@@ -50,7 +50,7 @@ In the meantime, we are actively working with our payment partners to restore re
5050

5151
Existing sponsorships will remain in place during this period and maintainers will continue to be paid out as expected. Payments for the accrued sponsorship amounts from the funding account will be collected at the same time as other accrued charges.
5252

53-
## Making a one-time payment for a GitHub subscription
53+
## Making a one-time payment for a {% data variables.product.github %} subscription
5454

5555
> [!NOTE]
5656
> Affected customers will receive an email notification with a link to their billing settings when payment is due. Two further reminder emails will be sent 7 and 14 days later if payment has not been made. After 14 days, paid features and services will be locked until payment is made.
@@ -61,4 +61,8 @@ Existing sponsorships will remain in place during this period and maintainers wi
6161
1. Review your billing and payment information.
6262
1. Optionally, if you need to make an edit, click **Edit** next to the relevant section.
6363
1. Click **Submit payment**.
64+
65+
> [!NOTE]
66+
> PayPal is not supported as a payment method for one-time payments. If your saved payment method is a PayPal account, **Submit payment** will be disabled. To complete your payment, update your payment method to a credit or debit card. You can enter card details directly on the payment page.
67+
6468
1. Once payment for the current billing cycle has been successfully made, the **Pay now** button on your "Billing & plans" page will be disabled until your next payment is due.

0 commit comments

Comments
 (0)