Skip to content

Commit 2675b8e

Browse files
authored
Merge pull request github#39356 from github/repo-sync
Repo sync
2 parents 493b8f8 + c9e7677 commit 2675b8e

File tree

15 files changed

+361
-65
lines changed

15 files changed

+361
-65
lines changed

content/actions/how-tos/writing-workflows/choosing-when-your-workflow-runs/triggering-a-workflow.md

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,11 @@ redirect_from:
1818

1919
{% data reusables.actions.enterprise-github-hosted-runners %}
2020

21-
## About workflow triggers
21+
## Prerequisites
2222

23-
{% data reusables.actions.about-triggers %}
23+
To learn more about workflows and triggering workflows, see [AUTOTITLE](/actions/concepts/workflows-and-actions/workflows).
2424

25-
Workflow triggers are defined with the `on` key. For more information, see [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#on).
26-
27-
The following steps occur to trigger a workflow run:
28-
29-
1. An event occurs on your repository. The event has an associated commit SHA and Git ref.
30-
1. {% data variables.product.github %} searches the `.github/workflows` directory in the root of your repository for workflow files that are present in the associated commit SHA or Git ref of the event.
31-
1. A workflow run is triggered for any workflows that have `on:` values that match the triggering event. Some events also require the workflow file to be present on the default branch of the repository in order to run.
32-
33-
Each workflow run will use the version of the workflow that is present in the associated commit SHA or Git ref of the event. When a workflow runs, {% data variables.product.github %} sets the `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (Git ref) environment variables in the runner environment. For more information, see [AUTOTITLE](/actions/learn-github-actions/variables).
34-
35-
### Triggering a workflow from a workflow
25+
## Triggering a workflow from a workflow
3626

3727
{% data reusables.actions.actions-do-not-trigger-workflows %} For more information, see [AUTOTITLE](/actions/security-guides/automatic-token-authentication).
3828

content/copilot/how-tos/context/model-context-protocol/extending-copilot-chat-with-mcp.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ redirect_from:
1515

1616
>[!NOTE]
1717
> * MCP support is generally available (GA) in {% data variables.copilot.copilot_chat_short %} for {% data variables.product.prodname_vscode %}.
18-
> * MCP support for Copilot in {% data variables.product.prodname_vs %}, JetBrains, Eclipse, and Xcode is in {% data variables.release-phases.public_preview %} and is subject to change.
19-
> * The [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-pre-release-license-terms) apply to your use of this product.
18+
> * MCP support for {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_vs %}, JetBrains, Eclipse, and Xcode is in {% data variables.release-phases.public_preview %} and is subject to change.
19+
> * The [AUTOTITLE](/free-pro-team@latest/site-policy/github-terms/github-pre-release-license-terms) apply only to {% data variables.product.prodname_copilot_short %} in IDEs where MCP support is still in preview. GA terms apply when using MCP for {% data variables.product.prodname_copilot_short %} in {% data variables.product.prodname_vscode %}.
2020
2121
{% vscode %}
2222

data/release-notes/enterprise-server/3-14/0.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ sections:
168168
- |
169169
When using a JSON Web Token (JWT) to authenticate or request an installation token, developers of GitHub Apps can use the app's client ID for the JWT's `iss` claim. The application ID remains valid, but is considered deprecated.
170170
171+
changes:
172+
- |
173+
The API endpoint for setting and removing organization membership for a user (`PUT /orgs/{org}/memberships/{username}` and `DELETE /orgs/{org}/memberships/{username}`) requires `admin:org` permissions for classic tokens. Previously, the changes were allowed with the `read:org, repo` permissions. [Updated: 2025-07-16]
174+
171175
known_issues:
172176
- |
173177
Complete SCIM payloads are written to the audit log, including SCIM attributes that are not required or supported per [API docs](/rest/enterprise-admin/scim?apiVersion=2022-11-28#supported-scim-user-attributes). Customers using Okta with SCIM may notice that a placeholder password attribute is among the data passed to audit logs in its current configuration. This placeholder data is associated with Okta’s password synchronization feature that is not expected or required by GitHub. See [okta-scim](https://developer.okta.com/docs/api/openapi/okta-scim/guides/scim-20/#create-the-user) for more information.
@@ -244,5 +248,7 @@ sections:
244248
These release notes previously did not include a note for the deprecation of team discussions.
245249
- |
246250
These release notes previously indicated as a known issue that on GitHub Enterprise Server 3.14.0, repositories originally imported using `ghe-migrator` will not correctly track Advanced Security contributions.
247-
251+
248252
The fix for this problem was already included in GitHub Enterprise Server [3.12](/admin/release-notes#3.12.0-bugs). [Updated: 2025-04-11]
253+
- |
254+
The release notes previously did not include a note for the change in permissions required for managing user organization membership. [Updated: 2025-07-16]

data/reusables/actions/about-triggers.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,13 @@ Workflow triggers are events that cause a workflow to run. These events can be:
66
* Manual
77

88
For example, you can configure your workflow to run when a push is made to the default branch of your repository, when a release is created, or when an issue is opened.
9+
10+
Workflow triggers are defined with the `on` key. For more information, see [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#on).
11+
12+
The following steps occur to trigger a workflow run:
13+
14+
1. An event occurs on your repository. The event has an associated commit SHA and Git ref.
15+
1. {% data variables.product.github %} searches the `.github/workflows` directory in the root of your repository for workflow files that are present in the associated commit SHA or Git ref of the event.
16+
1. A workflow run is triggered for any workflows that have `on:` values that match the triggering event. Some events also require the workflow file to be present on the default branch of the repository in order to run.
17+
18+
Each workflow run will use the version of the workflow that is present in the associated commit SHA or Git ref of the event. When a workflow runs, {% data variables.product.github %} sets the `GITHUB_SHA` (commit SHA) and `GITHUB_REF` (Git ref) environment variables in the runner environment. For more information, see [AUTOTITLE](/actions/learn-github-actions/variables).

data/reusables/contributing/content-linter-rules.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
| GHD042 | liquid-tag-whitespace | Liquid tags should start and end with one whitespace. Liquid tag arguments should be separated by only one whitespace. | error | liquid, format |
7070
| GHD043 | link-quotation | Internal link titles must not be surrounded by quotations | error | links, url |
7171
| GHD044 | octicon-aria-labels | Octicons should always have an aria-label attribute even if aria-hidden. | warning | accessibility, octicons |
72+
| GHD046 | outdated-release-phase-terminology | Outdated release phase terminology should be replaced with current GitHub terminology | warning | terminology, consistency, release-phases |
7273
| GHD048 | british-english-quotes | Periods and commas should be placed inside quotation marks (American English style) | warning | punctuation, quotes, style, consistency |
7374
| GHD050 | multiple-emphasis-patterns | Do not use more than one emphasis/strong, italics, or uppercase for a string | warning | formatting, emphasis, style |
7475
| GHD049 | note-warning-formatting | Note and warning tags should be formatted according to style guide | warning | formatting, callouts, notes, warnings, style |
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
> [!NOTE]
2-
> {% ifversion ghes > 3.16 %}Only changes made to a ruleset after you have upgraded to {% data variables.product.prodname_ghe_server %} 3.17.0, or a later version, are included in the ruleset history.{% elsif fpt or ghec %}Only changes made to a ruleset after the {% data variables.release-phases.public_preview %} release, on October 11, 2023, are included in the ruleset history.{% endif %}
2+
> {% ifversion ghes > 3.16 %}Only changes made to a ruleset after you have upgraded to {% data variables.product.prodname_ghe_server %} 3.17.0, or a later version, are included in the ruleset history.{% endif %}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1+
Ruleset history lists events triggered by changes that affect your rulesets within the last 180 days.
2+
13
You can view all the changes to a ruleset and revert back to a specific iteration. You can also download a JSON file containing the ruleset's configuration at a specific iteration. The bypass list of a ruleset is excluded from the exported JSON file.

src/content-linter/lib/linting-rules/index.js

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,55 @@
11
import searchReplace from 'markdownlint-rule-search-replace'
22
import markdownlintGitHub from '@github/markdownlint-github'
33

4-
import { codeFenceLineLength } from './code-fence-line-length'
5-
import { imageAltTextEndPunctuation } from './image-alt-text-end-punctuation'
6-
import { imageFileKebabCase } from './image-file-kebab-case'
7-
import { incorrectAltTextLength } from './image-alt-text-length'
8-
import { internalLinksNoLang } from './internal-links-no-lang'
9-
import { internalLinksSlash } from './internal-links-slash'
10-
import { imageAltTextExcludeStartWords } from './image-alt-text-exclude-start-words'
11-
import { listFirstWordCapitalization } from './list-first-word-capitalization'
12-
import { linkPunctuation } from './link-punctuation'
13-
import { earlyAccessReferences, frontmatterEarlyAccessReferences } from './early-access-references'
14-
import { frontmatterHiddenDocs } from './frontmatter-hidden-docs'
15-
import { frontmatterVideoTranscripts } from './frontmatter-video-transcripts'
16-
import { yamlScheduledJobs } from './yaml-scheduled-jobs'
17-
import { internalLinksOldVersion } from './internal-links-old-version'
18-
import { hardcodedDataVariable } from './hardcoded-data-variable'
19-
import { githubOwnedActionReferences } from './github-owned-action-references'
20-
import { liquidQuotedConditionalArg } from './liquid-quoted-conditional-arg'
21-
import { liquidDataReferencesDefined, liquidDataTagFormat } from './liquid-data-tags'
22-
import { frontmatterSchema } from './frontmatter-schema'
23-
import { codeAnnotations } from './code-annotations'
24-
import { codeAnnotationCommentSpacing } from './code-annotation-comment-spacing'
25-
import { frontmatterLiquidSyntax, liquidSyntax } from './liquid-syntax'
26-
import { liquidIfTags, liquidIfVersionTags } from './liquid-versioning'
27-
import { raiReusableUsage } from './rai-reusable-usage'
28-
import { imageNoGif } from './image-no-gif'
29-
import { expiredContent, expiringSoon } from './expired-content'
30-
import { tableLiquidVersioning } from './table-liquid-versioning'
31-
import { tableColumnIntegrity } from './table-column-integrity'
32-
import { thirdPartyActionPinning } from './third-party-action-pinning'
33-
import { liquidTagWhitespace } from './liquid-tag-whitespace'
34-
import { linkQuotation } from './link-quotation'
35-
import { octiconAriaLabels } from './octicon-aria-labels'
36-
import { liquidIfversionVersions } from './liquid-ifversion-versions'
37-
import { britishEnglishQuotes } from './british-english-quotes'
38-
import { multipleEmphasisPatterns } from './multiple-emphasis-patterns'
39-
import { noteWarningFormatting } from './note-warning-formatting'
4+
import { codeFenceLineLength } from '@/content-linter/lib/linting-rules/code-fence-line-length'
5+
import { imageAltTextEndPunctuation } from '@/content-linter/lib/linting-rules/image-alt-text-end-punctuation'
6+
import { imageFileKebabCase } from '@/content-linter/lib/linting-rules/image-file-kebab-case'
7+
import { incorrectAltTextLength } from '@/content-linter/lib/linting-rules/image-alt-text-length'
8+
import { internalLinksNoLang } from '@/content-linter/lib/linting-rules/internal-links-no-lang'
9+
import { internalLinksSlash } from '@/content-linter/lib/linting-rules/internal-links-slash'
10+
import { imageAltTextExcludeStartWords } from '@/content-linter/lib/linting-rules/image-alt-text-exclude-start-words'
11+
import { listFirstWordCapitalization } from '@/content-linter/lib/linting-rules/list-first-word-capitalization'
12+
import { linkPunctuation } from '@/content-linter/lib/linting-rules/link-punctuation'
13+
import {
14+
earlyAccessReferences,
15+
frontmatterEarlyAccessReferences,
16+
} from '@/content-linter/lib/linting-rules/early-access-references'
17+
import { frontmatterHiddenDocs } from '@/content-linter/lib/linting-rules/frontmatter-hidden-docs'
18+
import { frontmatterVideoTranscripts } from '@/content-linter/lib/linting-rules/frontmatter-video-transcripts'
19+
import { yamlScheduledJobs } from '@/content-linter/lib/linting-rules/yaml-scheduled-jobs'
20+
import { internalLinksOldVersion } from '@/content-linter/lib/linting-rules/internal-links-old-version'
21+
import { hardcodedDataVariable } from '@/content-linter/lib/linting-rules/hardcoded-data-variable'
22+
import { githubOwnedActionReferences } from '@/content-linter/lib/linting-rules/github-owned-action-references'
23+
import { liquidQuotedConditionalArg } from '@/content-linter/lib/linting-rules/liquid-quoted-conditional-arg'
24+
import {
25+
liquidDataReferencesDefined,
26+
liquidDataTagFormat,
27+
} from '@/content-linter/lib/linting-rules/liquid-data-tags'
28+
import { frontmatterSchema } from '@/content-linter/lib/linting-rules/frontmatter-schema'
29+
import { codeAnnotations } from '@/content-linter/lib/linting-rules/code-annotations'
30+
import { codeAnnotationCommentSpacing } from '@/content-linter/lib/linting-rules/code-annotation-comment-spacing'
31+
import {
32+
frontmatterLiquidSyntax,
33+
liquidSyntax,
34+
} from '@/content-linter/lib/linting-rules/liquid-syntax'
35+
import {
36+
liquidIfTags,
37+
liquidIfVersionTags,
38+
} from '@/content-linter/lib/linting-rules/liquid-versioning'
39+
import { raiReusableUsage } from '@/content-linter/lib/linting-rules/rai-reusable-usage'
40+
import { imageNoGif } from '@/content-linter/lib/linting-rules/image-no-gif'
41+
import { expiredContent, expiringSoon } from '@/content-linter/lib/linting-rules/expired-content'
42+
import { tableLiquidVersioning } from '@/content-linter/lib/linting-rules/table-liquid-versioning'
43+
import { tableColumnIntegrity } from '@/content-linter/lib/linting-rules/table-column-integrity'
44+
import { thirdPartyActionPinning } from '@/content-linter/lib/linting-rules/third-party-action-pinning'
45+
import { liquidTagWhitespace } from '@/content-linter/lib/linting-rules/liquid-tag-whitespace'
46+
import { linkQuotation } from '@/content-linter/lib/linting-rules/link-quotation'
47+
import { octiconAriaLabels } from '@/content-linter/lib/linting-rules/octicon-aria-labels'
48+
import { liquidIfversionVersions } from '@/content-linter/lib/linting-rules/liquid-ifversion-versions'
49+
import { outdatedReleasePhaseTerminology } from '@/content-linter/lib/linting-rules/outdated-release-phase-terminology'
50+
import { britishEnglishQuotes } from '@/content-linter/lib/linting-rules/british-english-quotes'
51+
import { multipleEmphasisPatterns } from '@/content-linter/lib/linting-rules/multiple-emphasis-patterns'
52+
import { noteWarningFormatting } from '@/content-linter/lib/linting-rules/note-warning-formatting'
4053

4154
const noDefaultAltText = markdownlintGitHub.find((elem) =>
4255
elem.names.includes('no-default-alt-text'),
@@ -88,6 +101,7 @@ export const gitHubDocsMarkdownlint = {
88101
liquidTagWhitespace,
89102
linkQuotation,
90103
octiconAriaLabels,
104+
outdatedReleasePhaseTerminology,
91105
britishEnglishQuotes,
92106
multipleEmphasisPatterns,
93107
noteWarningFormatting,
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import { addError, ellipsify } from 'markdownlint-rule-helpers'
2+
3+
import { getRange } from '@/content-linter/lib/helpers/utils'
4+
import frontmatter from '@/frame/lib/read-frontmatter'
5+
6+
// Mapping of outdated terms to their new replacements
7+
// Order matters - longer phrases must come first to avoid partial matches
8+
const TERMINOLOGY_REPLACEMENTS = [
9+
// Beta variations → public preview (longer phrases first)
10+
['limited public beta', 'public preview'],
11+
['public beta', 'public preview'],
12+
['private beta', 'private preview'],
13+
['beta', 'public preview'],
14+
15+
// Alpha → private preview
16+
['alpha', 'private preview'],
17+
18+
// Deprecated variations → closing down
19+
['deprecation', 'closing down'],
20+
['deprecated', 'closing down'],
21+
22+
// Sunset → retired
23+
['sunset', 'retired'],
24+
]
25+
26+
// Precompile RegExp objects for better performance
27+
const COMPILED_REGEXES = TERMINOLOGY_REPLACEMENTS.map(([outdatedTerm, replacement]) => ({
28+
regex: new RegExp(`(?<!\\w|-|_)${outdatedTerm.replace(/\s+/g, '\\s+')}(?!\\w|-|_)`, 'gi'),
29+
outdatedTerm,
30+
replacement,
31+
}))
32+
33+
/**
34+
* Find all non-overlapping matches of outdated terminology in a line
35+
* @param {string} line - The line of text to search
36+
* @returns {Array} Array of match objects with start, end, text, replacement, and outdatedTerm
37+
*/
38+
function findOutdatedTerminologyMatches(line) {
39+
const foundMatches = []
40+
41+
// Check each outdated term (in order - longest first)
42+
for (const { regex, outdatedTerm, replacement } of COMPILED_REGEXES) {
43+
// Reset regex state for each line
44+
regex.lastIndex = 0
45+
let match
46+
47+
while ((match = regex.exec(line)) !== null) {
48+
// Check if this match overlaps with any existing matches
49+
const overlaps = foundMatches.some(
50+
(existing) =>
51+
(match.index >= existing.start && match.index < existing.end) ||
52+
(match.index + match[0].length > existing.start &&
53+
match.index + match[0].length <= existing.end) ||
54+
(match.index <= existing.start && match.index + match[0].length >= existing.end),
55+
)
56+
57+
if (!overlaps) {
58+
foundMatches.push({
59+
start: match.index,
60+
end: match.index + match[0].length,
61+
text: match[0],
62+
replacement: replacement,
63+
outdatedTerm: outdatedTerm,
64+
})
65+
}
66+
}
67+
}
68+
69+
// Sort matches by position for consistent ordering
70+
return foundMatches.sort((a, b) => a.start - b.start)
71+
}
72+
73+
export const outdatedReleasePhaseTerminology = {
74+
names: ['GHD046', 'outdated-release-phase-terminology'],
75+
description:
76+
'Outdated release phase terminology should be replaced with current GitHub terminology',
77+
tags: ['terminology', 'consistency', 'release-phases'],
78+
severity: 'error',
79+
function: (params, onError) => {
80+
// Skip autogenerated files
81+
const frontmatterString = params.frontMatterLines.join('\n')
82+
const fm = frontmatter(frontmatterString).data
83+
if (fm && fm.autogenerated) return
84+
85+
// Check all lines for outdated terminology
86+
for (let i = 0; i < params.lines.length; i++) {
87+
const line = params.lines[i]
88+
const lineNumber = i + 1
89+
90+
// Find all matches on this line
91+
const foundMatches = findOutdatedTerminologyMatches(line)
92+
93+
// Report all found matches
94+
for (const matchInfo of foundMatches) {
95+
const range = getRange(line, matchInfo.text)
96+
const errorMessage = `Replace outdated terminology "${matchInfo.text}" with "${matchInfo.replacement}"`
97+
98+
// Provide a fix suggestion
99+
const fixInfo = {
100+
editColumn: matchInfo.start + 1,
101+
deleteCount: matchInfo.text.length,
102+
insertText: matchInfo.replacement,
103+
}
104+
105+
addError(onError, lineNumber, errorMessage, ellipsify(line), range, fixInfo)
106+
}
107+
}
108+
},
109+
}

src/content-linter/style/github-docs.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ const githubDocsConfig = {
206206
'partial-markdown-files': true,
207207
'yml-files': true,
208208
},
209+
'outdated-release-phase-terminology': {
210+
// GHD046
211+
severity: 'warning',
212+
'partial-markdown-files': true,
213+
'yml-files': true,
214+
},
209215
'table-column-integrity': {
210216
// GHD047
211217
severity: 'warning',

0 commit comments

Comments
 (0)