Skip to content

Commit 454315f

Browse files
Merge branch 'main' into docs/clarify-config-file-creation
2 parents d2d6c5d + 3542e3e commit 454315f

672 files changed

Lines changed: 489372 additions & 247344 deletions

File tree

Some content is hidden

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

.github/agents/driver-writer.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
---
2+
3+
name: "Driver-writer"
4+
description: "Use when writing, editing, or reviewing content for the Driver persona: enterprise administrators, platform engineers, billing managers, security leads, and others who enable developers at scale."
5+
6+
---
7+
8+
# Driver-writer Agent
9+
10+
You are a writing assistant for the GitHub Docs team. You help writers create, edit, and review documentation that serves the **Driver persona**.
11+
12+
A Driver is any GitHub user who supports the work of multiple developers by making changes to GitHub at scale. They remove barriers and enable developers to work efficiently while providing guardrails for compliance and security. Drivers include enterprise administrators, billing managers, application security leads, CI/CD administrators, tech leads, and OS maintainers.
13+
14+
Our team prioritizes **self-serve enterprise customers** that use GitHub Enterprise but are not large enough to get dedicated support from a GitHub sales or success team. These customers rely heavily on documentation to set up and manage their enterprise. When making content decisions, optimize for this audience.
15+
16+
Drivers come from two broad backgrounds, and content should account for both:
17+
18+
* **IT administration**: Expects process and controls based on experience with other enterprise systems. May use terminology from other platforms when searching for information.
19+
* **Development**: Fewer preconceptions about enterprise administration. May have limited knowledge of best practices for setting up large systems.
20+
21+
## What makes Driver content different
22+
23+
Driver content is distinct from developer-focused (Builder) content in a few key ways. Apply these when writing or editing:
24+
25+
### Frame value in terms of the enterprise, not individual productivity
26+
27+
Builder content connects features to the developer's own workflow. Driver content should connect features to what Drivers care about: compliance, security posture, cost management, developer enablement at scale, and reducing operational risk.
28+
29+
* Instead of: "You can restrict email notifications for your enterprise."
30+
* Write: "You can prevent your enterprise's information from leaking into personal email accounts."
31+
32+
### Help Drivers make confident decisions
33+
34+
Drivers often face choices with long-lasting, hard-to-reverse consequences (e.g., choosing between EMU and classic authentication, selecting an identity provider, structuring enterprises and organizations). Content should present enough context for the reader to choose confidently: what the tradeoffs are, what most enterprises do, and what cannot be changed later.
35+
36+
### Write for people who manage GitHub, not people who use it to code
37+
38+
Drivers are configuring, monitoring, and governing, not writing code. They are less likely to want code examples and more likely to need:
39+
40+
* Clear explanations of how settings interact and propagate across an enterprise
41+
* Guidance on rollout sequence and dependencies between configuration steps
42+
* Visibility into what their developers will experience as a result of their changes
43+
44+
### Be explicit about policy scope and cascade
45+
46+
When writing about enterprise settings or policies, always clarify what level the setting operates at (enterprise, organization, repository) and how it cascades. Make it clear who controls the setting and whether lower levels can override it. When parallel articles exist for different levels (e.g., enterprise vs. org), keep the structure, terminology, and level of detail consistent between them.
47+
48+
### Flag specific high-risk claims for verification
49+
50+
Driver actions often affect an entire enterprise and can be hard to reverse, so a single inaccurate detail can have outsized consequences: a security gap, a compliance failure, unexpected cost, or an administrator locking themselves out. Do not flag an entire article as high-risk just because of its topic. Instead, identify the specific claims most likely to cause harm if wrong, and call each one out individually for the writer to verify.
51+
52+
Pay closest attention to discrete, checkable claims in these areas:
53+
54+
* Authentication and identity (e.g., specific SAML/SCIM attribute values, SSO setup steps)
55+
* Security and compliance policy behavior and enforcement
56+
* Billing, licensing, and spending controls (specific numbers, thresholds, what counts toward usage)
57+
* Irreversible or enterprise-wide configuration steps
58+
* Exact permission or role requirements for an action
59+
60+
For example, in an article about configuring SSO, do not say "verify this entire article." Instead, flag the specific risky claims, e.g.: "Step 6 says to set the SAML `NameID` to the user's email. Confirm the exact required attribute with the identity team, since the wrong value will block all sign-ins."
61+
62+
## Driver user journey
63+
64+
Drivers move through these phases with GitHub. Content should meet them where they are:
65+
66+
* **Evaluate**: Researching tools that add value for the team.
67+
* **Onboard**: Understanding best practices to configure the enterprise. Relying on documentation before reaching out to people.
68+
* **Adopt**: Monitoring rollout, managing licenses, evaluating ROI.
69+
* **Optimize**: Monitoring data, auditing configuration for efficiency.
70+
* **Sustain**: Promoting best practices, making minimal configuration changes.

.github/dependabot.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ updates:
1818
ignore:
1919
# Because this is so dependent on the remote server we use
2020
- dependency-name: '@elastic/elasticsearch'
21-
# Because whatever we have needs to match what @primer/react also uses
22-
- dependency-name: 'styled-components'
2321
- dependency-name: '*'
2422
update-types:
2523
['version-update:semver-patch', 'version-update:semver-minor']

.github/instructions/content.instructions.md

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
applyTo: "content/**,data/**,**/*.md"
2+
applyTo: "content/**,data/**"
33
---
44

55
# Copilot content instructions for docs.github.com
@@ -95,17 +95,23 @@ Examples:
9595

9696
## Versioning
9797

98-
Avoid `{% ifversion fpt %}`, `{% ifversion ghec %}`, and `{% ifversion fpt or ghec %}` in content files whenever possible. Instead of suggesting or adding version-gating within an article:
98+
Follow one of these sets of instructions, depending on how articles are versioned in the frontmatter. Articles may be versioned for FPT and GHEC, for GHES only, or for all three. Articles may also be versioned using feature-based versioning defined in `data/features`. Feature-based versioning allows centralized control of when content appears for specific GHES releases.
9999

100-
* Write content that applies to all versions the article is versioned for
101-
* If content is truly version-specific, consider whether it is low-harm to show it to all readers (e.g., an enterprise-only row in a reference table)
102-
* Only use `{% ifversion %}` as a last resort when content would be actively misleading for readers on a different version
100+
### FPT/GHEC-only articles
103101

104-
**FPT and GHEC content**: When dotcom content applies to both products, version the page for `fpt` and `ghec` in the frontmatter. Do NOT use in-article Liquid versioning. Do NOT suggest adding `{% ifversion fpt or ghec %}` blocks as a fix for content that mentions a dotcom-only feature. Instead, suggest rewriting the content using the alternatives to inline versioning options listed below.
102+
All articles that are ONLY for FPT and GHEC should be versioned for these versions in the frontmatter.
105103

106-
**GHES content**: If versioning is necessary for GitHub Enterprise Server content, use feature-based versioning (FBV). GHES content should rely on feature flags defined in `data/features/` rather than inline `{% ifversion ghes %}` blocks. Feature flags allow centralized control of when content appears for specific GHES releases.
104+
For such content, DO NOT use in-article Liquid versioning such as `{% ifversion fpt %}`, `{% ifversion ghec %}`, and `{% ifversion fpt or ghec %}`.
107105

108-
### Alternatives to inline versioning
106+
### GHES-only articles
107+
108+
All articles that are ONLY for GitHub Enterprise Server (GHES) should be versioned in the frontmatter using feature-based versioning defined in `data/features/`.
109+
110+
### FPT, GHEC, GHES articles
111+
112+
All articles that are versioned for all of FPT, GHEC, and GHES in the frontmatter MAY require certain blocks of content to be versioned using in-article Liquid versioning. Before recommending this, check if this is really the case.
113+
114+
#### Check in-article versioning is required
109115

110116
Before resorting to in-article versioning, first consider whether the content is actually different across versions. Often procedures can be simplified to work at both levels.
111117

@@ -127,26 +133,6 @@ Use these strategies instead of `{% ifversion %}`, depending on the level of con
127133
* End list items with "({% data variables.product.prodname_ghe_cloud %} only)", "({% data variables.product.prodname_dotcom_the_website %} only)", etc.
128134
* Specify if the feature is not available for GHES with "NAME-OF-FEATURE is not available for {% data variables.product.prodname_ghe_server %}", "... (not available in {% data variables.product.prodname_ghe_server %})", etc.
129135

130-
### Example
131-
132-
When documenting a feature that only applies to dotcom (not GHES):
133-
134-
❌ Don't wrap content in version blocks:
135-
136-
```markdown
137-
{% ifversion fpt or ghec %}
138-
139-
## Immutable subject claims
140-
141-
Repositories created after July 15, 2026 now use an immutable default subject format.
142-
143-
{% endif %}
144-
```
145-
146-
✅ Do use prose to indicate availability:
147-
148-
```markdown
149-
## Immutable subject claims
136+
#### If in-article versioning is required
150137

151-
Repositories created after July 15, 2026 now use an immutable default subject format. This rollout does not include {% data variables.product.prodname_ghe_server %}.
152-
```
138+
In-article versioning is required if a block of content in an article is definitely ONLY relevant for GHES, but the article itself is otherwise versioned in the frontmatter for all of FPT, GHEC, and GHES. In this situation, use feature-based versioning (FBV) wherever possible, using `{% ifversion FBV %}` blocks, where FBV is defined in `data/features/`. If it's not possible to use FBV, use {% ifversion ghes %} blocks, which will version the content block for all versions of GHES.

.github/instructions/style-guide-summary.instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
applyTo: "content/**,data/**,**/*.md"
2+
applyTo: "content/**,data/**"
33
---
44

55
# Concise style guide for docs.github.com

.github/workflows/benchmark-pages.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ jobs:
2424
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
2525
with:
2626
persist-credentials: 'false'
27+
- name: Generate GitHub App token
28+
id: app-token
29+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
30+
with:
31+
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
32+
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}
33+
owner: github
34+
repositories: docs-engineering
2735

2836
- uses: ./.github/actions/node-npm-setup
2937

@@ -50,7 +58,7 @@ jobs:
5058
- name: Check results and create issue if needed
5159
if: always()
5260
env:
53-
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
61+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
5462
RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
5563
run: |
5664
echo "Reading benchmark results..."
@@ -166,4 +174,4 @@ jobs:
166174
- uses: ./.github/actions/create-workflow-failure-issue
167175
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
168176
with:
169-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
177+
token: ${{ steps.app-token.outputs.token }}

.github/workflows/changelog-agent.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
steps:
4848
- name: Generate GitHub App token
4949
id: app-token
50-
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2.0.2
50+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
5151
with:
5252
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
5353
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}
@@ -591,7 +591,7 @@ jobs:
591591
body: prBody,
592592
head: branchName,
593593
base: 'main',
594-
draft: true,
594+
draft: false,
595595
});
596596
597597
// Add labels
@@ -600,22 +600,22 @@ jobs:
600600
owner: 'github',
601601
repo: 'docs-content',
602602
issue_number: pullRequest.number,
603-
labels: ['ready-for-doc-review', 'skip FR board', 'llm-generated'],
603+
labels: ['skip FR board', 'llm-generated'],
604604
});
605605
} catch (err) {
606606
core.warning(`Failed to add labels: ${err.message}`);
607607
}
608608
609-
// Assign to PR author
609+
// Request review from PR author
610610
try {
611-
await github.rest.issues.addAssignees({
611+
await github.rest.pulls.requestReviewers({
612612
owner: 'github',
613613
repo: 'docs-content',
614-
issue_number: pullRequest.number,
615-
assignees: [process.env.PR_AUTHOR],
614+
pull_number: pullRequest.number,
615+
reviewers: [process.env.PR_AUTHOR],
616616
});
617617
} catch (err) {
618-
core.warning(`Failed to assign PR to @${process.env.PR_AUTHOR}: ${err.message}`);
618+
core.warning(`Failed to request review from @${process.env.PR_AUTHOR}: ${err.message}`);
619619
}
620620
621621
core.setOutput('changelog_pr_url', pullRequest.html_url);

.github/workflows/codeql.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ jobs:
3030
runs-on: ubuntu-latest
3131
steps:
3232
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
33+
3334
- uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7
3435
with:
3536
languages: javascript # comma separated list of values from {go, python, javascript, java, cpp, csharp, ruby}
@@ -41,7 +42,17 @@ jobs:
4142
with:
4243
slack_token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
4344

45+
- name: Generate GitHub App token
46+
if: ${{ failure() && github.event_name != 'pull_request' }}
47+
id: app-token
48+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
49+
with:
50+
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
51+
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}
52+
owner: github
53+
repositories: docs-engineering
54+
4455
- uses: ./.github/actions/create-workflow-failure-issue
4556
if: ${{ failure() && github.event_name != 'pull_request' }}
4657
with:
47-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
58+
token: ${{ steps.app-token.outputs.token }}

.github/workflows/copilot-setup-steps.yml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,27 @@ jobs:
3030
steps:
3131
- name: Checkout code
3232
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
33+
- name: Generate GitHub App token
34+
id: app-token
35+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
36+
with:
37+
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
38+
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}
39+
owner: github
40+
repositories: docs-early-access
3341

3442
- uses: ./.github/actions/node-npm-setup
3543

3644
# Search and language test suites require a running Elasticsearch instance.
3745
- uses: ./.github/actions/setup-elasticsearch
3846
with:
39-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
47+
token: ${{ steps.app-token.outputs.token }}
4048

4149
# docs-internal has early-access content that must be fetched separately.
4250
- uses: ./.github/actions/get-docs-early-access
4351
if: ${{ github.repository == 'github/docs-internal' }}
4452
with:
45-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
53+
token: ${{ steps.app-token.outputs.token }}
4654

4755
# Many test suites depend on Next.js build artifacts.
4856
- name: Build

.github/workflows/count-translation-corruptions.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
steps:
2626
- name: Generate GitHub App token
2727
id: app-token
28-
uses: actions/create-github-app-token@3ff1caaa28b64c9cc276ce0a02e2ff584f3900c5 # v2.0.2
28+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
2929
with:
3030
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
3131
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}

.github/workflows/delete-orphan-translation-files.yml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,20 @@ jobs:
6161

6262
steps:
6363
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
64+
- name: Generate GitHub App token
65+
id: app-token
66+
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
67+
with:
68+
app-id: ${{ secrets.DOCS_BOT_APP_ID }}
69+
private-key: ${{ secrets.DOCS_BOT_APP_PRIVATE_KEY }}
70+
owner: github
71+
repositories: docs-internal.es-es,docs-internal.ja-jp,docs-internal.pt-br,docs-internal.zh-cn,docs-internal.ru-ru,docs-internal.fr-fr,docs-internal.ko-kr,docs-internal.de-de,docs-engineering
6472

6573
- name: Checkout the language-specific repo
6674
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
6775
with:
6876
repository: ${{ matrix.language_repo }}
69-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
77+
token: ${{ steps.app-token.outputs.token }}
7078
path: ${{ matrix.language_dir }}
7179

7280
- uses: ./.github/actions/node-npm-setup
@@ -89,7 +97,7 @@ jobs:
8997
working-directory: ${{ matrix.language_dir }}
9098
env:
9199
# Needed for gh
92-
GH_TOKEN: ${{ secrets.DOCS_BOT_PAT_BASE }}
100+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
93101
run: |
94102
# If nothing to commit, exit now. It's fine. No orphans.
95103
changes=$(git diff --name-only | wc -l)
@@ -164,4 +172,4 @@ jobs:
164172
- uses: ./.github/actions/create-workflow-failure-issue
165173
if: ${{ failure() && github.event_name != 'workflow_dispatch' }}
166174
with:
167-
token: ${{ secrets.DOCS_BOT_PAT_BASE }}
175+
token: ${{ steps.app-token.outputs.token }}

0 commit comments

Comments
 (0)