Merge branch 'main' into cindyalvarez-patch-1
@@ -1,6 +1,3 @@
|
||||
ALGOLIA_API_KEY=
|
||||
ALGOLIA_APPLICATION_ID=
|
||||
ALLOW_TRANSLATION_COMMITS=
|
||||
EARLY_ACCESS_HOSTNAME=
|
||||
EARLY_ACCESS_SHARED_SECRET=
|
||||
GITHUB_TOKEN=
|
||||
1
.eslintignore
Normal file
@@ -0,0 +1 @@
|
||||
dist/
|
||||
28
.eslintrc.js
Normal file
@@ -0,0 +1,28 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
browser: true,
|
||||
commonjs: true,
|
||||
es2020: true,
|
||||
node: true
|
||||
},
|
||||
parser: 'babel-eslint',
|
||||
extends: [
|
||||
'eslint:recommended',
|
||||
'standard'
|
||||
],
|
||||
parserOptions: {
|
||||
ecmaVersion: 11
|
||||
},
|
||||
rules: {
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: [
|
||||
'**/tests/**/*.js'
|
||||
],
|
||||
env: {
|
||||
jest: true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
4
.github/CODEOWNERS
vendored
@@ -20,6 +20,10 @@ package.json @github/docs-engineering
|
||||
# Site Policy
|
||||
/content/github/site-policy/ @github/site-policy-admins
|
||||
|
||||
# Content strategy
|
||||
/contributing/content-markup-reference.md @github/docs-content-strategy
|
||||
/contributing/content-style-guide.md @github/docs-content-strategy
|
||||
|
||||
# Make sure that Octokit maintainers get notified about changes
|
||||
# relevant to the Octokit libraries (https://github.com/octokit)
|
||||
/content/rest/reference @github/octokit-maintainers
|
||||
|
||||
@@ -7,7 +7,7 @@ labels:
|
||||
assignees: ''
|
||||
---
|
||||
<!--
|
||||
HUBBERS BEWARE! THE GITHUB/DOCS REPO IS PUBLIC TO THE ENTIRE INTERNET. OPEN AN ISSUE IN GITHUB/DOCS-CONTENT https://github.com/github/docs-content/issues/new/choose INSTEAD.
|
||||
HUBBERS BEWARE! THE GITHUB/DOCS REPO IS PUBLIC TO THE ENTIRE INTERNET. OPEN AN ISSUE IN GITHUB/DOCS-CONTENT INSTEAD.
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/improve-the-site.md
vendored
@@ -7,7 +7,7 @@ assignees: ''
|
||||
---
|
||||
|
||||
<!--
|
||||
HUBBERS BEWARE! THE GITHUB/DOCS REPO IS PUBLIC TO THE ENTIRE INTERNET. OPEN AN ISSUE IN GITHUB/DOCS-CONTENT https://github.com/github/docs-content/issues/new/choose INSTEAD.
|
||||
HUBBERS BEWARE! THE GITHUB/DOCS REPO IS PUBLIC TO THE ENTIRE INTERNET. OPEN AN ISSUE IN GITHUB/DOCS-CONTENT INSTEAD.
|
||||
-->
|
||||
|
||||
<!--
|
||||
|
||||
3
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -21,7 +21,6 @@ Thanks again!
|
||||
<!-- Share artifacts of the changes, be they code snippets, GIFs or screenshots; whatever shares the most context. -->
|
||||
|
||||
### Check off the following:
|
||||
- [ ] All of the tests are passing.
|
||||
- [ ] I have reviewed my changes in staging.
|
||||
- [ ] I have reviewed my changes in staging. (look for the **deploy-to-heroku** link in your pull request, then click **View deployment**)
|
||||
- [ ] For content changes, I have reviewed the [localization checklist](https://github.com/github/docs/blob/main/contributing/localization-checklist.md)
|
||||
- [ ] For content changes, I have reviewed the [Content style guide for GitHub Docs](https://github.com/github/docs/blob/main/contributing/content-style-guide.md).
|
||||
|
||||
36
.github/actions-scripts/enterprise-algolia-label.js
vendored
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
const core = require('@actions/core')
|
||||
const eventPayload = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, 'utf8'))
|
||||
|
||||
// This workflow-run script does the following:
|
||||
// 1. Gets an array of labels on a PR.
|
||||
// 2. Finds one with the relevant Algolia text; if none found, exits early.
|
||||
// 3. Gets the version substring from the label string.
|
||||
|
||||
const labelText = 'sync-english-index-for-'
|
||||
const labelsArray = eventPayload.pull_request.labels
|
||||
|
||||
// Exit early if no labels are on this PR
|
||||
if (!(labelsArray && labelsArray.length)) {
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
// Find the relevant label
|
||||
const algoliaLabel = labelsArray
|
||||
.map(label => label.name)
|
||||
.find(label => label.startsWith(labelText))
|
||||
|
||||
// Exit early if no relevant label is found
|
||||
if (!algoliaLabel) {
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
// Given: sync-english-index-for-enterprise-server@3.0
|
||||
// Returns: enterprise-server@3.0
|
||||
const versionToSync = algoliaLabel.split(labelText)[1]
|
||||
|
||||
// Store the version so we can access it later in the workflow
|
||||
core.setOutput('versionToSync', versionToSync)
|
||||
process.exit(0)
|
||||
41
.github/actions-scripts/openapi-schema-branch.js
vendored
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const { execSync } = require('child_process')
|
||||
const semver = require('semver')
|
||||
|
||||
/*
|
||||
* This script performs two checks to prevent shipping development mode OpenAPI schemas:
|
||||
* - Ensures the `info.version` property is a semantic version.
|
||||
* In development mode, the `info.version` property is a string
|
||||
* containing the `github/github` branch name.
|
||||
* - Ensures the decorated schema matches the dereferenced schema.
|
||||
* The workflow that calls this script runs `script/rest/update-files.js`
|
||||
* with the `--decorate-only` switch then checks to see if files changed.
|
||||
*
|
||||
*/
|
||||
|
||||
// Check that the `info.version` property is a semantic version
|
||||
const dereferencedDir = path.join(process.cwd(), 'lib/rest/static/dereferenced')
|
||||
const schemas = fs.readdirSync(dereferencedDir)
|
||||
schemas.forEach(filename => {
|
||||
const schema = require(path.join(dereferencedDir, filename))
|
||||
if (!semver.valid(schema.info.version)) {
|
||||
console.log(`🚧⚠️ Your branch contains a development mode OpenAPI schema: ${schema.info.version}. This check is a reminder to not 🚢 OpenAPI files in development mode. 🛑`)
|
||||
process.exit(1)
|
||||
}
|
||||
})
|
||||
|
||||
// Check that the decorated schema matches the dereferenced schema
|
||||
const changedFiles = execSync('git diff --name-only HEAD').toString()
|
||||
|
||||
if(changedFiles !== '') {
|
||||
console.log(`These files were changed:\n${changedFiles}`)
|
||||
console.log(`🚧⚠️ Your decorated and dereferenced schema files don't match. Ensure you're using decorated and dereferenced schemas from the automatically created pull requests by the 'github-openapi-bot' user. For more information, see 'script/rest/README.md'. 🛑`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// All checks pass, ready to ship
|
||||
console.log('All good 👍')
|
||||
process.exit(0)
|
||||
14
.github/allowed-actions.js
vendored
@@ -12,6 +12,8 @@ module.exports = [
|
||||
'actions/setup-ruby@5f29a1cd8dfebf420691c4c9a0e832e2fae5a526', //actions/setup-ruby@v1.1.2
|
||||
'actions/stale@af4072615903a8b031f986d25b1ae3bf45ec44d4', //actions/stale@v3.0.13
|
||||
'crowdin/github-action@fd9429dd63d6c0f8a8cb4b93ad8076990bd6e688',
|
||||
'crykn/copy_folder_to_another_repo_action@abc264e1c16eb3d7b1f7763bfdb0e1699ad43120',
|
||||
'cschleiden/actions-linter@43fd4e08e52ed40c0e2782dc2425694388851576',
|
||||
'dawidd6/action-delete-branch@47743101a121ad657031e6704086271ca81b1911',
|
||||
'docker://chinthakagodawita/autoupdate-action:v1',
|
||||
'fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289',
|
||||
@@ -21,13 +23,17 @@ module.exports = [
|
||||
'juliangruber/approve-pull-request-action@c530832d4d346c597332e20e03605aa94fa150a8',
|
||||
'juliangruber/find-pull-request-action@64d55773c959748ad30a4184f4dc102af1669f7b',
|
||||
'juliangruber/read-file-action@e0a316da496006ffd19142f0fd594a1783f3b512',
|
||||
'lee-dohm/close-matching-issues@22002609b2555fe18f52b8e2e7c07cbf5529e8a8',
|
||||
'pascalgn/automerge-action@c9bd182',
|
||||
'peter-evans/create-issue-from-file@35e304e2a12caac08c568247a2cb46ecd0c3ecc5',
|
||||
'peter-evans/create-pull-request@938e6aea6f8dbdaced2064e948cb806c77fe87b8',
|
||||
'peter-evans/create-issue-from-file@a04ce672e3acedb1f8e416b46716ddfd09905326',
|
||||
'peter-evans/create-or-update-comment@5221bf4aa615e5c6e95bb142f9673a9c791be2cd',
|
||||
'peter-evans/create-pull-request@8c603dbb04b917a9fc2dd991dc54fef54b640b43',
|
||||
'rachmari/actions-add-new-issue-to-column@1a459ef92308ba7c9c9dc2fcdd72f232495574a9',
|
||||
'rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e',
|
||||
'repo-sync/github-sync@3832fe8e2be32372e1b3970bbae8e7079edeec88',
|
||||
'repo-sync/pull-request@33777245b1aace1a58c87a29c90321aa7a74bd7d',
|
||||
'rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815',
|
||||
'tjenkinson/gh-action-auto-merge-dependency-updates@cee2ac0'
|
||||
'someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd',
|
||||
'tjenkinson/gh-action-auto-merge-dependency-updates@cee2ac0',
|
||||
'EndBug/add-and-commit@9358097a71ad9fb9e2f9624c6098c89193d83575',
|
||||
'dorny/paths-filter@eb75a1edc117d3756a18ef89958ee59f9500ba58'
|
||||
]
|
||||
|
||||
6
.github/workflows/60-days-stale-check.yml
vendored
@@ -1,10 +1,11 @@
|
||||
name: 60 Days Stale Check
|
||||
on:
|
||||
schedule:
|
||||
- cron: "40 16 * * *" # Run each day at 16:40 UTC / 8:40 PST
|
||||
- cron: '40 16 * * *' # Run each day at 16:40 UTC / 8:40 PST
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@af4072615903a8b031f986d25b1ae3bf45ec44d4
|
||||
@@ -17,4 +18,5 @@ jobs:
|
||||
only-labels: 'engineering'
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
|
||||
exempt-pr-labels: 'never-stale'
|
||||
exempt-issue-labels: 'never-stale'
|
||||
|
||||
4
.github/workflows/auto-label-prs.yml
vendored
@@ -1,6 +1,6 @@
|
||||
name: Auto label Pull Requests
|
||||
on:
|
||||
- pull_request
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
@@ -9,4 +9,4 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/labeler@5f867a63be70efff62b767459b009290364495eb
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
|
||||
9
.github/workflows/automerge-dependencies.yml
vendored
@@ -3,10 +3,10 @@ name: Auto Merge Dependency Updates
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- "package*.json"
|
||||
- "Gemfile*"
|
||||
- "Dockerfile"
|
||||
- ".github/workflows/**"
|
||||
- 'package*.json'
|
||||
- 'Gemfile*'
|
||||
- 'Dockerfile'
|
||||
- '.github/workflows/**'
|
||||
pull_request_review:
|
||||
types:
|
||||
- edited
|
||||
@@ -14,6 +14,7 @@ on:
|
||||
|
||||
jobs:
|
||||
run:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: tjenkinson/gh-action-auto-merge-dependency-updates@cee2ac0
|
||||
|
||||
22
.github/workflows/automerge.yml
vendored
@@ -20,17 +20,17 @@ on:
|
||||
jobs:
|
||||
automerge:
|
||||
runs-on: ubuntu-latest
|
||||
if: contains(github.event.pull_request.labels.*.name, 'automerge') || contains(github.event.pull_request.labels.*.name, 'autosquash')
|
||||
if: (contains(github.event.pull_request.labels.*.name, 'automerge') || contains(github.event.pull_request.labels.*.name, 'autosquash')) && (github.repository == 'github/docs-internal' || github.repository == 'github/docs')
|
||||
steps:
|
||||
- name: automerge
|
||||
uses: "pascalgn/automerge-action@c9bd182"
|
||||
uses: 'pascalgn/automerge-action@c9bd182'
|
||||
env:
|
||||
GITHUB_TOKEN: "${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}"
|
||||
MERGE_METHOD_LABELS: "automerge=merge,autosquash=squash"
|
||||
MERGE_COMMIT_MESSAGE: "pull-request-title"
|
||||
MERGE_METHOD: "merge"
|
||||
MERGE_FORKS: "true"
|
||||
MERGE_RETRIES: "50"
|
||||
MERGE_RETRY_SLEEP: "10000" # ten seconds
|
||||
UPDATE_LABELS: "automerge,autosquash"
|
||||
UPDATE_METHOD: "merge"
|
||||
GITHUB_TOKEN: '${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}'
|
||||
MERGE_METHOD_LABELS: 'automerge=merge,autosquash=squash'
|
||||
MERGE_COMMIT_MESSAGE: 'pull-request-title'
|
||||
MERGE_METHOD: 'merge'
|
||||
MERGE_FORKS: 'true'
|
||||
MERGE_RETRIES: '50'
|
||||
MERGE_RETRY_SLEEP: '10000' # ten seconds
|
||||
UPDATE_LABELS: 'automerge,autosquash'
|
||||
UPDATE_METHOD: 'merge'
|
||||
|
||||
3
.github/workflows/autoupdate-branch.yml
vendored
@@ -5,8 +5,9 @@ on:
|
||||
- main
|
||||
jobs:
|
||||
autoupdate:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
name: autoupdate
|
||||
runs-on: ubuntu-18.04
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: docker://chinthakagodawita/autoupdate-action:v1
|
||||
env:
|
||||
|
||||
12
.github/workflows/browser-test.yml
vendored
@@ -20,18 +20,22 @@ jobs:
|
||||
paths: '[".github/workflows/browser-test.yml","assets/**", "content/**", "data/**", "includes/**", "javascripts/**", "jest-puppeteer.config.js", "jest.config.js", "layouts/**", "lib/**", "middleware/**", "package-lock.json", "package.json", "server.js", "translations/**", "webpack.config.js"]'
|
||||
build:
|
||||
needs: see_if_should_skip
|
||||
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
|
||||
# Even if if doesn't do anything
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- name: Install
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install
|
||||
uses: ianwalter/puppeteer@12728ddef82390d1ecd4732fb543f62177392fbb
|
||||
with:
|
||||
args: npm ci
|
||||
|
||||
- name: Test
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Test
|
||||
uses: ianwalter/puppeteer@12728ddef82390d1ecd4732fb543f62177392fbb
|
||||
with:
|
||||
args: npm run browser-test
|
||||
|
||||
22
.github/workflows/check-all-english-links.yml
vendored
@@ -3,7 +3,7 @@ name: Check all English links
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "40 19 * * *" # once a day at 19:40 UTC / 11:40 PST
|
||||
- cron: '40 19 * * *' # once a day at 19:40 UTC / 11:40 PST
|
||||
|
||||
jobs:
|
||||
check_all_english_links:
|
||||
@@ -17,16 +17,32 @@ jobs:
|
||||
- name: npm run build
|
||||
run: npm run build
|
||||
- name: Run script
|
||||
run: script/check-english-links.js > broken_links.md
|
||||
run: |
|
||||
script/check-english-links.js > broken_links.md
|
||||
- if: ${{ failure() }}
|
||||
name: Get title for issue
|
||||
id: check
|
||||
run: echo "::set-output name=title::$(head -1 broken_links.md)"
|
||||
- if: ${{ failure() }}
|
||||
name: Close previous report
|
||||
uses: lee-dohm/close-matching-issues@22002609b2555fe18f52b8e2e7c07cbf5529e8a8
|
||||
with:
|
||||
query: 'label:"broken link report"'
|
||||
token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
- if: ${{ failure() }}
|
||||
name: Create issue from file
|
||||
uses: peter-evans/create-issue-from-file@35e304e2a12caac08c568247a2cb46ecd0c3ecc5
|
||||
id: broken-link-report
|
||||
uses: peter-evans/create-issue-from-file@a04ce672e3acedb1f8e416b46716ddfd09905326
|
||||
with:
|
||||
token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
title: ${{ steps.check.outputs.title }}
|
||||
content-filepath: ./broken_links.md
|
||||
labels: broken link report
|
||||
- if: ${{ failure() }}
|
||||
name: Add comment to issue
|
||||
uses: peter-evans/create-or-update-comment@5221bf4aa615e5c6e95bb142f9673a9c791be2cd
|
||||
with:
|
||||
body: |
|
||||
cc @github/docs-content
|
||||
issue-number: ${{ steps.broken-link-report.outputs.issue-number }}
|
||||
token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
|
||||
9
.github/workflows/codeql.yml
vendored
@@ -1,15 +1,20 @@
|
||||
name: "CodeQL analysis"
|
||||
name: CodeQL analysis
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**/*.js'
|
||||
- '.github/workflows/codeql.yml'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
- uses: github/codeql-action/init@v1
|
||||
|
||||
73
.github/workflows/confirm-internal-staff-work-in-docs.yml
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
name: Confirm internal staff meant to post in public
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
- transferred
|
||||
pull_request_target:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
check-team-membership:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
if: github.repository == 'github/docs'
|
||||
steps:
|
||||
- id: membership_check
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
script: |
|
||||
// Only perform this action with GitHub employees
|
||||
try {
|
||||
await github.teams.getMembershipForUserInOrg({
|
||||
org: 'github',
|
||||
team_slug: 'employees',
|
||||
username: context.payload.sender.login,
|
||||
});
|
||||
} catch(err) {
|
||||
// An error will be thrown if the user is not a GitHub employee
|
||||
// If a user is not a GitHub employee, we should stop here and
|
||||
// Not send a notification
|
||||
return
|
||||
}
|
||||
|
||||
// Don't perform this action with Docs team members
|
||||
try {
|
||||
await github.teams.getMembershipForUserInOrg({
|
||||
org: 'github',
|
||||
team_slug: 'docs',
|
||||
username: context.payload.sender.login,
|
||||
});
|
||||
// If the user is a Docs team member, we should stop here and not send
|
||||
// a notification
|
||||
return
|
||||
} catch(err) {
|
||||
// An error will be thrown if the user is not a Docs team member
|
||||
// If a user is not a Docs team member we should continue and send
|
||||
// the notification
|
||||
}
|
||||
|
||||
const issueNo = context.number || context.issue.number
|
||||
|
||||
// Create an issue in our private repo
|
||||
await github.issues.create({
|
||||
owner: 'github',
|
||||
repo: 'docs-internal',
|
||||
title: `@${context.payload.sender.login} confirm that \#${issueNo} should be in the public github/docs repo`,
|
||||
body: `@${context.payload.sender.login} opened https://github.com/github/docs/issues/${issueNo} publicly in the github/docs repo, instead of the private github/docs-internal repo.\n\n@${context.payload.sender.login}, please confirm that this belongs in the public repo and that no sensitive information was disclosed by commenting below and closing the issue.\n\nIf this was not intentional and sensitive information was shared, please delete https://github.com/github/docs/issues/${issueNo} and notify us in the \#docs-open-source channel.\n\nThanks! \n\n/cc @github/docs @github/docs-engineering`
|
||||
});
|
||||
|
||||
core.setOutput('did_warn', 'true')
|
||||
|
||||
- name: Send Slack notification if a GitHub employee who isn't on the docs team opens an issue in public
|
||||
if: ${{ steps.membership_check.outputs.did_warn && github.repository == 'github/docs' }}
|
||||
uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd
|
||||
with:
|
||||
channel: ${{ secrets.DOCS_OPEN_SOURCE_SLACK_CHANNEL_ID }}
|
||||
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
|
||||
text: <@${{github.actor}}> opened https://github.com/github/docs/issues/${{ github.event.number || github.event.issue.number }} publicly on the github/docs repo instead of the private github/docs-internal repo. They have been notified via a new issue in the github/docs-internal repo to confirm this was intentional.
|
||||
4
.github/workflows/crowdin.yml
vendored
@@ -3,7 +3,7 @@ name: Crowdin Sync
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "33 2 * * *" # every day at 2:33 UTC at least until automerge is working
|
||||
- cron: '33 2 * * *' # every day at 2:33 UTC at least until automerge is working
|
||||
|
||||
jobs:
|
||||
sync_with_crowdin:
|
||||
@@ -47,5 +47,3 @@ jobs:
|
||||
# See https://crowdin.com/settings#api-key to generate a token
|
||||
# This token was created by logging into Crowdin with the octoglot user
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
name: First responder docs-content
|
||||
on:
|
||||
pull_request:
|
||||
types: [reopened, opened, ready_for_review, closed, unlabeled]
|
||||
types:
|
||||
- reopened
|
||||
- opened
|
||||
- ready_for_review
|
||||
- closed
|
||||
- unlabeled
|
||||
|
||||
jobs:
|
||||
first-responder-triage-pr:
|
||||
@@ -41,15 +46,15 @@ jobs:
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
if: steps.set-result.outputs.result == 'false'
|
||||
with:
|
||||
repo-token: "${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}"
|
||||
add-labels: "docs-content-fr"
|
||||
repo-token: '${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}'
|
||||
add-labels: 'docs-content-fr'
|
||||
- name: Triage to FR PR project column
|
||||
uses: rachmari/actions-add-new-issue-to-column@1a459ef92308ba7c9c9dc2fcdd72f232495574a9
|
||||
if: steps.set-result.outputs.result == 'false'
|
||||
with:
|
||||
action-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
project-url: "https://github.com/orgs/github/projects/1367"
|
||||
column-name: "Docs-internal external contributor PRs"
|
||||
project-url: 'https://github.com/orgs/github/projects/1367'
|
||||
column-name: 'Docs-internal external contributor PRs'
|
||||
|
||||
first-responder-remove-pr:
|
||||
name: Remove PR from FR project board
|
||||
@@ -81,5 +86,5 @@ jobs:
|
||||
if: github.event.action == 'closed'
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
with:
|
||||
repo-token: "${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}"
|
||||
remove-labels: "docs-content-fr"
|
||||
repo-token: '${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}'
|
||||
remove-labels: 'docs-content-fr'
|
||||
|
||||
17
.github/workflows/js-lint.yml
vendored
@@ -10,23 +10,8 @@ on:
|
||||
- translations
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
should_skip: ${{ steps.skip_check.outputs.should_skip }}
|
||||
steps:
|
||||
- id: skip_check
|
||||
uses: fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289
|
||||
with:
|
||||
cancel_others: 'false'
|
||||
github_token: ${{ github.token }}
|
||||
paths: '["**/*.js", "package*.json", ".github/workflows/js-lint.yml"]'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
needs: see_if_should_skip
|
||||
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
@@ -53,7 +38,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Run linter
|
||||
run: npx standard
|
||||
run: npx eslint .
|
||||
|
||||
- name: Check dependencies
|
||||
run: npm run check-deps
|
||||
|
||||
3
.github/workflows/merged-notification.yml
vendored
@@ -1,7 +1,8 @@
|
||||
name: Merged notification
|
||||
on:
|
||||
pull_request_target:
|
||||
types: ['closed']
|
||||
types:
|
||||
- 'closed'
|
||||
|
||||
jobs:
|
||||
comment:
|
||||
|
||||
37
.github/workflows/openapi-decorate.yml
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
name: OpenAPI generate decorated schema files
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
types: [opened]
|
||||
|
||||
jobs:
|
||||
generate-decorated-files:
|
||||
if: github.event.pull_request.user.login == 'github-openapi-bot'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Label pull requests with 'github-openapi-bot'
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
with:
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
add-labels: 'github-openapi-bot'
|
||||
- name: Checkout repository code
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Decorate the dereferenced OpenAPI schemas
|
||||
run: script/rest/update-files.js --decorate-only
|
||||
|
||||
- name: Check in the decorated files
|
||||
uses: EndBug/add-and-commit@9358097a71ad9fb9e2f9624c6098c89193d83575
|
||||
with:
|
||||
# The arguments for the `git add` command
|
||||
add: 'lib/rest/static/decorated'
|
||||
|
||||
# The message for the commit
|
||||
message: 'Add decorated OpenAPI schema files'
|
||||
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Leave this line unchanged
|
||||
22
.github/workflows/openapi-schema-check.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: OpenAPI dev mode check
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
|
||||
jobs:
|
||||
check-schema-versions:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository code
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
# Differences between decorated and dereferenced files indicates a problem
|
||||
- name: Generate decorated files to check that there are no differences
|
||||
run: script/rest/update-files.js --decorate-only
|
||||
|
||||
- name: Check if deref/decorated schemas are dev mode and that they match
|
||||
run: .github/actions-scripts/openapi-schema-branch.js
|
||||
5
.github/workflows/pa11y.yml
vendored
@@ -1,10 +1,11 @@
|
||||
name: "Pa11y"
|
||||
name: Pa11y
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "25 17 * * *" # once a day at 17:25 UTC / 11:50 PST
|
||||
- cron: '25 17 * * *' # once a day at 17:25 UTC / 11:50 PST
|
||||
jobs:
|
||||
test:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repo
|
||||
|
||||
2
.github/workflows/ping-staging-apps.yml
vendored
@@ -2,7 +2,7 @@ name: Ping staging apps
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "*/20 * * * *" # every twenty minutes
|
||||
- cron: '*/20 * * * *' # every twenty minutes
|
||||
|
||||
jobs:
|
||||
ping_staging_apps:
|
||||
|
||||
7
.github/workflows/remove-unused-assets.yml
vendored
@@ -5,7 +5,7 @@ env:
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "20 15 * * 0" # run every Sunday at 20:15 UTC / 12:15 PST
|
||||
- cron: '20 15 * * 0' # run every Sunday at 20:15 UTC / 12:15 PST
|
||||
|
||||
jobs:
|
||||
remove_unused_assets:
|
||||
@@ -33,13 +33,14 @@ jobs:
|
||||
- name: Remove script results file
|
||||
run: rm -rf ./results.md
|
||||
- name: Create pull request
|
||||
uses: peter-evans/create-pull-request@938e6aea6f8dbdaced2064e948cb806c77fe87b8
|
||||
uses: peter-evans/create-pull-request@8c603dbb04b917a9fc2dd991dc54fef54b640b43
|
||||
with:
|
||||
# need to use a token with repo and workflow scopes for this step
|
||||
token: ${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}
|
||||
commit-message: Action ran script/remove-unused-assets.js
|
||||
title: Remove unused assets
|
||||
body: "Hello! This PR removes some files that exist in the repo but are not used in content or data files:\n\n
|
||||
body:
|
||||
"Hello! This PR removes some files that exist in the repo but are not used in content or data files:\n\n
|
||||
${{ steps.results.outputs.content }}
|
||||
\n\nIf you have any questions, please contact @github/docs-engineering."
|
||||
labels: unused assets
|
||||
|
||||
2
.github/workflows/repo-freeze-check.yml
vendored
@@ -16,10 +16,10 @@ env:
|
||||
|
||||
jobs:
|
||||
check-freezer:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
name: Prevent merging during deployment freezes
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Fail if repo merges are paused
|
||||
if: ${{ env.FREEZE == 'true' }}
|
||||
run: |
|
||||
|
||||
16
.github/workflows/repo-freeze-reminders.yml
vendored
@@ -2,7 +2,7 @@ name: Repo Freeze Reminders
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "00 11 * * *" # once per day around 11:00am UTC
|
||||
- cron: '00 11 * * *' # once per day around 11:00am UTC
|
||||
|
||||
env:
|
||||
FREEZE: ${{ secrets.FREEZE }}
|
||||
@@ -13,13 +13,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'github/docs-internal'
|
||||
steps:
|
||||
|
||||
- name: Send Slack notification if repo is frozen
|
||||
uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd
|
||||
if: ${{ env.FREEZE == 'true' }}
|
||||
uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }}
|
||||
SLACK_USERNAME: docs-repo-sync
|
||||
SLACK_ICON_EMOJI: ':freezing_face:'
|
||||
SLACK_COLOR: '#51A0D5' # Carolina Blue
|
||||
SLACK_MESSAGE: All repo-sync runs will fail for ${{ github.repository }} because the repo is currently frozen!
|
||||
with:
|
||||
channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
|
||||
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
|
||||
color: info
|
||||
text: All repo-sync runs will fail for ${{ github.repository }} because the repo is currently frozen!
|
||||
|
||||
62
.github/workflows/repo-sync-stalls.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
name: Repo Sync Stalls
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 */2 * * *'
|
||||
jobs:
|
||||
check-freezer:
|
||||
name: Check for deployment freezes
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Exit if repo is frozen
|
||||
if: ${{ env.FREEZE == 'true' }}
|
||||
run: |
|
||||
echo 'The repo is currently frozen! Exiting this workflow.'
|
||||
exit 1 # prevents further steps from running
|
||||
repo-sync-stalls:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
name: Check if repo sync is stalled
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
script: |
|
||||
let pulls;
|
||||
const owner = context.repo.owner
|
||||
const repo = context.repo.repo
|
||||
try {
|
||||
pulls = await github.pulls.list({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
head: `${owner}:repo-sync`,
|
||||
state: 'open'
|
||||
});
|
||||
} catch(err) {
|
||||
throw err
|
||||
return
|
||||
}
|
||||
|
||||
// Remove all pull requests that don't have the
|
||||
// 'automated-reposync-pr' label
|
||||
pulls.data = pulls.data.filter(pr =>
|
||||
pr.labels.some(label => label.name === 'automated-reposync-pr')
|
||||
)
|
||||
|
||||
// Search for pull requests that have been open too long
|
||||
pulls.data.forEach(pr => {
|
||||
const timeDelta = Date.now() - Date.parse(pr.created_at);
|
||||
const minutesOpen = timeDelta / 1000 / 60;
|
||||
|
||||
if (minutesOpen > 180) {
|
||||
core.setFailed('Repo sync appears to be stalled')
|
||||
}
|
||||
})
|
||||
- name: Send Slack notification if workflow fails
|
||||
uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd
|
||||
if: failure()
|
||||
with:
|
||||
channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
|
||||
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
|
||||
color: failure
|
||||
text: Repo sync appears to be stalled for ${{github.repository}}. See https://github.com/${{github.repository}}/pulls?q=is%3Apr+is%3Aopen+label%3Aautomated-reposync-pr
|
||||
55
.github/workflows/repo-sync.yml
vendored
@@ -7,8 +7,9 @@
|
||||
name: Repo Sync
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "*/15 * * * *" # every 15 minutes
|
||||
- cron: '*/15 * * * *' # every 15 minutes
|
||||
|
||||
env:
|
||||
FREEZE: ${{ secrets.FREEZE }}
|
||||
@@ -18,7 +19,6 @@ jobs:
|
||||
name: Check for deployment freezes
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Exit if repo is frozen
|
||||
if: ${{ env.FREEZE == 'true' }}
|
||||
run: |
|
||||
@@ -26,11 +26,11 @@ jobs:
|
||||
exit 1 # prevents further steps from running
|
||||
|
||||
repo-sync:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
name: Repo Sync
|
||||
needs: check-freezer
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
@@ -45,15 +45,16 @@ jobs:
|
||||
github_token: ${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}
|
||||
|
||||
- name: Create pull request
|
||||
id: create-pull
|
||||
uses: repo-sync/pull-request@33777245b1aace1a58c87a29c90321aa7a74bd7d
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}
|
||||
with:
|
||||
source_branch: repo-sync
|
||||
destination_branch: main
|
||||
pr_title: "repo sync"
|
||||
pr_title: 'repo sync'
|
||||
pr_body: "This is an automated pull request to sync changes between the public and private repos.\n\n:robot: This pull request should be merged (not squashed) to preserve continuity across repos, so please let a bot do the merging!"
|
||||
pr_label: automerge,autoupdate
|
||||
pr_label: automerge,autoupdate,automated-reposync-pr
|
||||
github_token: ${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}
|
||||
|
||||
- name: Find pull request
|
||||
@@ -71,12 +72,40 @@ jobs:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
number: ${{ steps.find-pull-request.outputs.number }}
|
||||
|
||||
# There are cases where the branch becomes out-of-date in between the time this workflow began and when the pull request is created/updated
|
||||
- name: Update branch
|
||||
if: ${{ steps.find-pull-request.outputs.number }}
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
script: |
|
||||
const mainHeadSha = await github.git.getRef({
|
||||
...context.repo,
|
||||
ref: 'heads/main'
|
||||
})
|
||||
console.log(`heads/main sha: ${mainHeadSha.data.object.sha}`)
|
||||
|
||||
const pull = await github.pulls.get({
|
||||
...context.repo,
|
||||
pull_number: parseInt(${{ steps.find-pull-request.outputs.number }})
|
||||
})
|
||||
console.log(`Pull request base sha: ${pull.data.base.sha}`)
|
||||
|
||||
if (mainHeadSha.data.object.sha !== pull.data.base.sha || pull.data.mergeable_state === 'behind') {
|
||||
const updateBranch = await github.pulls.updateBranch({
|
||||
...context.repo,
|
||||
pull_number: parseInt(${{ steps.find-pull-request.outputs.number }})
|
||||
})
|
||||
console.log(updateBranch.data.message)
|
||||
} else {
|
||||
console.log(`Branch is already up-to-date`)
|
||||
}
|
||||
|
||||
- name: Send Slack notification if workflow fails
|
||||
uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815
|
||||
if: ${{ failure() }}
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }}
|
||||
SLACK_USERNAME: docs-repo-sync
|
||||
SLACK_ICON_EMOJI: ':ohno:'
|
||||
SLACK_COLOR: '#B90E0A' # Crimson
|
||||
SLACK_MESSAGE: The last repo-sync run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions?query=workflow%3A%22Repo+Sync%22
|
||||
uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd
|
||||
if: failure()
|
||||
with:
|
||||
channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
|
||||
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
|
||||
color: failure
|
||||
text: The last repo-sync run for ${{github.repository}} failed. See https://github.com/${{github.repository}}/actions?query=workflow%3A%22Repo+Sync%22
|
||||
|
||||
@@ -2,7 +2,9 @@ name: Send Issue to EPD backlog
|
||||
|
||||
on:
|
||||
issues:
|
||||
types: [labeled, reopened]
|
||||
types:
|
||||
- labeled
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
|
||||
42
.github/workflows/site-policy-sync.yml
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
name: site-policy-sync
|
||||
|
||||
# Controls when the action will run.
|
||||
on:
|
||||
# Triggers the workflow pull requests merged to the main branch
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
types:
|
||||
- closed
|
||||
paths:
|
||||
- 'content/github/site-policy/**'
|
||||
|
||||
# Allows you to run this workflow manually from the Actions tab
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This workflow contains a single job called "build"
|
||||
copy-file:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Steps represent a sequence of tasks that will be executed as part of the job
|
||||
steps:
|
||||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
|
||||
- uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
# Pushes to other repo
|
||||
- name: Push folder to another repository
|
||||
uses: crykn/copy_folder_to_another_repo_action@abc264e1c16eb3d7b1f7763bfdb0e1699ad43120
|
||||
env:
|
||||
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_SITEPOLICY }}
|
||||
with:
|
||||
source_folder: 'content/github/site-policy'
|
||||
destination_repo: 'github/site-policy'
|
||||
destination_branch: 'repo-sync'
|
||||
destination_folder: 'Policies'
|
||||
user_email: 'pcihon@users.noreply.github.com'
|
||||
user_name: 'pcihon'
|
||||
commit_msg: 'Automatic sync from GitHub Docs.'
|
||||
@@ -2,10 +2,13 @@ name: Start new engineering PR workflow
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
types: [opened, reopened]
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
env:
|
||||
|
||||
@@ -33,8 +33,10 @@ jobs:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: npm run sync-search
|
||||
- name: Send slack notification if workflow run fails
|
||||
uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815
|
||||
uses: someimportantcompany/github-actions-slack-message@0b470c14b39da4260ed9e3f9a4f1298a74ccdefd
|
||||
if: failure()
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }}
|
||||
SLACK_MESSAGE: The last Algolia workflow run for ${{github.repository}} failed. See https://github.com/github/docs-internal/actions?query=workflow%3AAlgolia
|
||||
with:
|
||||
channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
|
||||
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
|
||||
color: failure
|
||||
text: The last Algolia workflow run for ${{github.repository}} failed. Search actions for `workflow:Algolia`
|
||||
|
||||
46
.github/workflows/sync-single-english-algolia-index.yml
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
name: Algolia Sync Single English Index
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- labeled
|
||||
- unlabeled
|
||||
- opened
|
||||
- reopened
|
||||
- synchronize
|
||||
- ready_for_review
|
||||
- unlocked
|
||||
|
||||
# This workflow requires a label in the format `sync-english-index-for-<PLAN@RELEASE>`
|
||||
jobs:
|
||||
updateIndices:
|
||||
name: Update English index for single version based on a label's version
|
||||
if: github.repository == 'github/docs-internal'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
- uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
|
||||
with:
|
||||
node-version: 14.x
|
||||
- name: cache node modules
|
||||
uses: actions/cache@0781355a23dac32fd3bac414512f4b903437991a
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
- name: npm ci
|
||||
run: npm ci
|
||||
- name: Get version from Algolia label if present; only continue if the label is found.
|
||||
id: getVersion
|
||||
run: $GITHUB_WORKSPACE/.github/actions-scripts/enterprise-algolia-label.js
|
||||
- if: ${{ steps.getVersion.outputs.versionToSync }}
|
||||
name: Sync English index for single version
|
||||
env:
|
||||
VERSION: ${{ steps.getVersion.outputs.versionToSync }}
|
||||
LANGUAGE: 'en'
|
||||
ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }}
|
||||
ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: npm run sync-search
|
||||
6
.github/workflows/test-translations.yml
vendored
@@ -4,7 +4,7 @@ name: Node.js Tests - Translations
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "10 20 * * *" # once a day at 20:10 UTC / 12:10 PST
|
||||
- cron: '10 20 * * *' # once a day at 20:10 UTC / 12:10 PST
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
@@ -38,7 +38,7 @@ jobs:
|
||||
run: npm ci
|
||||
|
||||
- name: Run linter
|
||||
run: npx standard
|
||||
run: npx eslint .
|
||||
|
||||
- name: Check dependencies
|
||||
run: npm run check-deps
|
||||
@@ -78,4 +78,4 @@ jobs:
|
||||
- name: Run tests
|
||||
run: npx jest tests/${{ matrix.test-group }}/
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
NODE_OPTIONS: '--max_old_space_size=4096'
|
||||
|
||||
9
.github/workflows/test-windows.yml
vendored
@@ -4,15 +4,14 @@ name: Node.js Tests - Windows
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request:
|
||||
schedule:
|
||||
- cron: "50 19 * * *" # once a day at 19:50 UTC / 11:50 PST
|
||||
|
||||
env:
|
||||
CI: true
|
||||
- cron: '50 19 * * *' # once a day at 19:50 UTC / 11:50 PST
|
||||
|
||||
jobs:
|
||||
test:
|
||||
runs-on: windows-latest
|
||||
if: (github.event_name != 'pull_request') || (github.event_name == 'pull_request' && (contains(github.event.pull_request.labels.*.name, 'Windows') || contains(github.event.pull_request.labels.*.name, 'windows')))
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
@@ -48,4 +47,4 @@ jobs:
|
||||
- name: Run tests
|
||||
run: npx jest tests/${{ matrix.test-group }}/
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
NODE_OPTIONS: '--max_old_space_size=4096'
|
||||
|
||||
46
.github/workflows/test.yml
vendored
@@ -27,32 +27,41 @@ jobs:
|
||||
with:
|
||||
cancel_others: 'false'
|
||||
github_token: ${{ github.token }}
|
||||
paths: '[".github/workflows/test.yml",".node-version", ".npmrc", "app.json", "content/**", "data/**","lib/**", "Dockerfile", "feature-flags.json", "Gemfile", "Gemfile.lock", "middleware/**", "node_modules/**","package.json", "package-lock.json", "server.js", "tests/**", "translations/**", "Procfile", "webpack.config.js"]'
|
||||
paths: '[".github/workflows/test.yml", ".node-version", ".npmrc", "app.json", "content/**", "data/**","lib/**", "Dockerfile", "feature-flags.json", "Gemfile", "Gemfile.lock", "middleware/**", "node_modules/**","package.json", "package-lock.json", "server.js", "tests/**", "translations/**", "Procfile", "webpack.config.js"]'
|
||||
|
||||
test:
|
||||
needs: see_if_should_skip
|
||||
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test-group: [content, meta, rendering, routing, unit, links-and-images]
|
||||
test-group:
|
||||
[content, meta, rendering, routing, unit, links-and-images, graphql]
|
||||
steps:
|
||||
- name: Check out repo
|
||||
# Each of these ifs needs to be repeated at each step to make sure the required check still runs
|
||||
# Even if if doesn't do anything
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
with:
|
||||
# Enables cloning the Early Access repo later with the relevant PAT
|
||||
persist-credentials: 'false'
|
||||
|
||||
- name: Setup node
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup node
|
||||
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- name: Get npm cache directory
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Get npm cache directory
|
||||
id: npm-cache
|
||||
run: |
|
||||
echo "::set-output name=dir::$(npm config get cache)"
|
||||
|
||||
- name: Cache node modules
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Cache node modules
|
||||
uses: actions/cache@0781355a23dac32fd3bac414512f4b903437991a
|
||||
with:
|
||||
path: ${{ steps.npm-cache.outputs.dir }}
|
||||
@@ -60,20 +69,23 @@ jobs:
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- name: Install dependencies
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Clone early access
|
||||
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository == 'github/docs-internal' }}
|
||||
run: npm run heroku-postbuild
|
||||
env:
|
||||
DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }}
|
||||
GIT_BRANCH: ${{ github.ref }}
|
||||
|
||||
- name: Run build script
|
||||
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository != 'github/docs-internal' }}
|
||||
run: npm run build
|
||||
|
||||
- name: Run tests
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Run tests
|
||||
run: npx jest tests/${{ matrix.test-group }}/
|
||||
env:
|
||||
NODE_OPTIONS: "--max_old_space_size=4096"
|
||||
|
||||
- name: Send Slack notification if workflow fails
|
||||
uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815
|
||||
if: failure() && github.ref == 'early-access'
|
||||
env:
|
||||
SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }}
|
||||
SLACK_MESSAGE: "Tests are failing on the `early-access` branch. https://github.com/github/docs-internal/tree/early-access"
|
||||
NODE_OPTIONS: '--max_old_space_size=4096'
|
||||
|
||||
2
.github/workflows/translations.yml
vendored
@@ -2,7 +2,7 @@ name: Translations
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "20 19 * * *" # once a day at 19:20 UTC / 11:20 PST
|
||||
- cron: '20 19 * * *' # once a day at 19:20 UTC / 11:20 PST
|
||||
|
||||
env:
|
||||
FREEZE: ${{ secrets.FREEZE }}
|
||||
|
||||
11
.github/workflows/triage-issue-comments.yml
vendored
@@ -1,7 +1,8 @@
|
||||
name: Triage new issue comments
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
types:
|
||||
- created
|
||||
|
||||
jobs:
|
||||
triage-issue-comments:
|
||||
@@ -36,11 +37,11 @@ jobs:
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
if: (steps.is-internal-contributor.outputs.result == 'false')
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
add-labels: "triage"
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
add-labels: 'triage'
|
||||
- name: Triage to project board
|
||||
uses: rachmari/actions-add-new-issue-to-column@1a459ef92308ba7c9c9dc2fcdd72f232495574a9
|
||||
with:
|
||||
action-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
project-url: "https://github.com/github/docs/projects/1"
|
||||
column-name: "Triage"
|
||||
project-url: 'https://github.com/github/docs/projects/1'
|
||||
column-name: 'Triage'
|
||||
|
||||
12
.github/workflows/triage-issues.yml
vendored
@@ -1,7 +1,9 @@
|
||||
name: Triage new issues
|
||||
on:
|
||||
issues:
|
||||
types: [reopened, opened]
|
||||
types:
|
||||
- reopened
|
||||
- opened
|
||||
|
||||
jobs:
|
||||
triage_issues:
|
||||
@@ -12,11 +14,11 @@ jobs:
|
||||
- name: Label new issues with 'triage'
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
add-labels: "triage"
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
add-labels: 'triage'
|
||||
- name: Triage to project board
|
||||
uses: rachmari/actions-add-new-issue-to-column@1a459ef92308ba7c9c9dc2fcdd72f232495574a9
|
||||
with:
|
||||
action-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
project-url: "https://github.com/github/docs/projects/1"
|
||||
column-name: "Triage"
|
||||
project-url: 'https://github.com/github/docs/projects/1'
|
||||
column-name: 'Triage'
|
||||
|
||||
12
.github/workflows/triage-pull-requests.yml
vendored
@@ -1,7 +1,9 @@
|
||||
name: Triage new pull requests
|
||||
on:
|
||||
pull_request:
|
||||
types: [reopened, opened]
|
||||
types:
|
||||
- reopened
|
||||
- opened
|
||||
|
||||
jobs:
|
||||
triage_pulls:
|
||||
@@ -12,11 +14,11 @@ jobs:
|
||||
- name: Label new pull requests with 'triage'
|
||||
uses: rachmari/labeler@832d42ec5523f3c6d46e8168de71cd54363e3e2e
|
||||
with:
|
||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
add-labels: "triage"
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
add-labels: 'triage'
|
||||
- name: Triage to project board
|
||||
uses: rachmari/actions-add-new-issue-to-column@1a459ef92308ba7c9c9dc2fcdd72f232495574a9
|
||||
with:
|
||||
action-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
project-url: "https://github.com/github/docs/projects/1"
|
||||
column-name: "Triage"
|
||||
project-url: 'https://github.com/github/docs/projects/1'
|
||||
column-name: 'Triage'
|
||||
|
||||
4
.github/workflows/triage-stale-check.yml
vendored
@@ -1,7 +1,7 @@
|
||||
name: Public Repo Stale Check
|
||||
on:
|
||||
schedule:
|
||||
- cron: "45 16 * * *" # Run each day at 16:45 UTC / 8:45 PST
|
||||
- cron: '45 16 * * *' # Run each day at 16:45 UTC / 8:45 PST
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
@@ -16,3 +16,5 @@ jobs:
|
||||
days-before-stale: 7
|
||||
days-before-close: 10
|
||||
stale-pr-label: 'stale'
|
||||
exempt-pr-labels: 'never-stale'
|
||||
exempt-issue-labels: 'never-stale'
|
||||
|
||||
123
.github/workflows/triage-unallowed-contributions.yml
vendored
Normal file
@@ -0,0 +1,123 @@
|
||||
name: Check unallowed file changes
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
paths:
|
||||
- '.github/workflows/**'
|
||||
- '.github/CODEOWNERS'
|
||||
- 'translations/**'
|
||||
- 'assets/fonts/**'
|
||||
- 'data/graphql/**'
|
||||
- 'lib/graphql/**'
|
||||
- 'lib/redirects/**'
|
||||
- 'lib/rest/**'
|
||||
- 'lib/webhooks/**'
|
||||
|
||||
jobs:
|
||||
triage:
|
||||
if: github.repository == 'github/docs' && github.event.pull_request.user.login != 'Octomerger'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
- name: Check for existing requested changes
|
||||
id: requested-change
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
result-encoding: json
|
||||
script: |
|
||||
const pullReviews = await github.pulls.listReviews({
|
||||
...context.repo,
|
||||
pull_number: context.payload.number
|
||||
})
|
||||
|
||||
const botReviews = pullReviews.data
|
||||
.filter(review => review.user.login === 'github-actions[bot]')
|
||||
.sort((a, b) => new Date(b.submitted_at) - new Date(a.submitted_at))
|
||||
.shift()
|
||||
|
||||
if (botReviews) {
|
||||
console.log(`Pull request reviews authored by the github-action bot: ${botReviews}`)
|
||||
}
|
||||
return botReviews
|
||||
|
||||
- name: Get files changed
|
||||
uses: dorny/paths-filter@eb75a1edc117d3756a18ef89958ee59f9500ba58
|
||||
id: filter
|
||||
with:
|
||||
# Base branch used to get changed files
|
||||
base: 'main'
|
||||
|
||||
# Enables setting an output in the format in `${FILTER_NAME}_files
|
||||
# with the names of the matching files formatted as JSON array
|
||||
list-files: json
|
||||
|
||||
# Returns list of changed files matching each filter
|
||||
filters: |
|
||||
translation:
|
||||
- 'translations/**'
|
||||
openapi:
|
||||
- 'lib/rest/static/**'
|
||||
notAllowed:
|
||||
- '.github/workflows/**'
|
||||
- '.github/CODEOWNERS'
|
||||
- 'translations/**'
|
||||
- 'assets/fonts/**'
|
||||
- 'data/graphql/**'
|
||||
- 'lib/graphql/**'
|
||||
- 'lib/redirects/**'
|
||||
- 'lib/rest/**'
|
||||
- 'lib/webhooks/**'
|
||||
|
||||
# When there are changes to files we can't accept
|
||||
# and no review exists,leave a REQUEST_CHANGES review
|
||||
- name: Request pull request changes
|
||||
# Check for no reviews or reviews that aren't CHANGES_REQUESTED
|
||||
if: ${{ steps.filter.outputs.notAllowed == 'true' && (!steps.requested-change.outputs.result || fromJson(steps.requested-change.outputs.result).state != 'CHANGES_REQUESTED') }}
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
const changedFiles = ${{steps.filter.outputs.notAllowed_files}}
|
||||
const restFiles = ${{steps.filter.outputs.openapi_files}}
|
||||
const translationFiles = ${{steps.filter.outputs.translation_files}}
|
||||
const markdownFiles = changedFiles.map(file => `- \`${file}\`\n`).join('')
|
||||
|
||||
let reviewMessage = `👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions.\n${markdownFiles}\n\nYou'll need to revert all of these ☝️ files using [GitHub Desktop](https://docs.github.com/en/free-pro-team@latest/desktop/contributing-and-collaborating-using-github-desktop/reverting-a-commit) or \`git checkout origin/main <file name>\`. Once you get those files reverted, we can continue with the review process. :octocat:`
|
||||
|
||||
if (restFiles.length > 0) {
|
||||
reviewMessage += "\n\nIt looks like you've modified the OpenAPI schema (`lib/rest/static/**`). While we aren't accepting changes to the schema directly, you can open an issue for any updates to the REST API docs. Head on over to the [`github/rest-api-description`](https://github.com/github/rest-api-description/issues/new?assignees=&labels=Inaccuracy&template=schema-inaccuracy.md&title=%5BSchema+Inaccuracy%5D+%3CDescribe+Problem%3E) repository to open an issue. ⚡"
|
||||
}
|
||||
|
||||
if (translationFiles.length > 0) {
|
||||
await github.issues.addLabels({
|
||||
...context.repo,
|
||||
issue_number: context.payload.number,
|
||||
labels: ['localization']
|
||||
})
|
||||
reviewMessage += "\n\nIt looks like you've modified translated content. Unfortunately, we are not able to accept pull requests for translated content. Our translation process involves an integration with an external service at crowdin.com, where all translation activity happens. We hope to eventually open up the translation process to the open source community, but we're not there yet. See https://github.com/github/docs/blob/main/CONTRIBUTING.md#earth_asia-translations for more details."
|
||||
}
|
||||
|
||||
await github.pulls.createReview({
|
||||
...context.repo,
|
||||
pull_number: context.payload.number,
|
||||
body: reviewMessage,
|
||||
event: 'REQUEST_CHANGES'
|
||||
})
|
||||
exit 1 # prevents further steps from running and fails workflow
|
||||
# When the most recent review was CHANGES_REQUESTED and the existing
|
||||
# PR no longer contains unallowed changes, dismiss the previous review
|
||||
- name: Dismiss pull request review
|
||||
# Check that unallowed files aren't modified and that a
|
||||
# CHANGES_REQUESTED review already exists
|
||||
if: ${{ steps.filter.outputs.notAllowed == 'false' && steps.requested-change.outputs.result && fromJson(steps.requested-change.outputs.result).state == 'CHANGES_REQUESTED' }}
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||
script: |
|
||||
await github.pulls.dismissReview({
|
||||
...context.repo,
|
||||
pull_number: context.payload.number,
|
||||
review_id: ${{fromJson(steps.requested-change.outputs.result).id}},
|
||||
message: `✨Looks like you reverted all files we don't accept contributions for. 🙌 A member of the docs team will review your PR soon. 🚂`
|
||||
})
|
||||
19
.github/workflows/update-graphql-files.yml
vendored
@@ -9,8 +9,9 @@ env:
|
||||
FREEZE: ${{ secrets.FREEZE }}
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "20 16 * * *" # run every day at 16:20 UTC / 8:20 PST
|
||||
- cron: '20 16 * * *' # run every day at 16:20 UTC / 8:20 PST
|
||||
|
||||
jobs:
|
||||
update_graphql_files:
|
||||
@@ -36,23 +37,19 @@ jobs:
|
||||
- name: Run updater scripts
|
||||
env:
|
||||
# need to use a token from a user with access to github/github for this step
|
||||
GITHUB_TOKEN: ${{ secrets.ZEKE_PAT_WITH_REPO_AND_WORKFLOW_SCOPE_FOR_REPO_SYNC }}
|
||||
# technically the changelog should only be updated once per day, but we can safely
|
||||
# run build-changelog-from-markdown.js in its current form once per hour; when we
|
||||
# rewrite the changelog script, we may need to run it in a separate workflow on a
|
||||
# once-per-day schedule; see details in https://github.com/github/docs-internal/issues/12722.
|
||||
GITHUB_TOKEN: ${{ secrets.RACHMARI_REPO_WORKFLOW }}
|
||||
run: |
|
||||
script/graphql/update-files.js
|
||||
script/graphql/build-changelog-from-markdown.js
|
||||
- name: Create pull request
|
||||
id: create-pull-request
|
||||
uses: peter-evans/create-pull-request@938e6aea6f8dbdaced2064e948cb806c77fe87b8
|
||||
uses: peter-evans/create-pull-request@8c603dbb04b917a9fc2dd991dc54fef54b640b43
|
||||
with:
|
||||
# need to use a token with repo and workflow scopes for this step
|
||||
token: ${{ secrets.OCTOMERGER_PAT_WITH_REPO_AND_WORKFLOW_SCOPE }}
|
||||
commit-message: 'Action ran graphql scripts "update-files" and "build-changelog-from-markdown"'
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: 'Action ran graphql script"update-files"'
|
||||
title: GraphQL schema update
|
||||
body: "Hello! Some GraphQL data in github/github was updated recently. This PR
|
||||
body:
|
||||
"Hello! Some GraphQL data in github/github was updated recently. This PR
|
||||
syncs up the GraphQL data in this repo.\n\n
|
||||
If CI passes, this PR will be auto-merged. :green_heart:\n\n
|
||||
If CI does not pass or other problems arise, contact #docs-engineering on slack."
|
||||
|
||||
22
.github/workflows/workflow-lint.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
name: Lint workflows
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
# push:
|
||||
# branches:
|
||||
# - main
|
||||
# pull_request:
|
||||
# branches-ignore:
|
||||
# - translations
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- name: Run linter
|
||||
uses: cschleiden/actions-linter@43fd4e08e52ed40c0e2782dc2425694388851576
|
||||
with:
|
||||
workflows: '[".github/workflows/*.yml"]'
|
||||
41
.github/workflows/yml-lint.yml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Lint Yaml
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- translations
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- name: Get npm cache directory
|
||||
id: npm-cache
|
||||
run: |
|
||||
echo "::set-output name=dir::$(npm config get cache)"
|
||||
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@0781355a23dac32fd3bac414512f4b903437991a
|
||||
with:
|
||||
path: ${{ steps.npm-cache.outputs.dir }}
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Run linter
|
||||
run: npx prettier -c "**/*.{yml,yaml}"
|
||||
14
.gitignore
vendored
@@ -1,9 +1,17 @@
|
||||
.algolia-cache
|
||||
.DS_Store
|
||||
.env
|
||||
node_modules
|
||||
/node_modules/
|
||||
npm-debug.log
|
||||
coverage
|
||||
coverage/
|
||||
.linkinator
|
||||
broken_links.md
|
||||
/assets/images/early-access
|
||||
/content/early-access
|
||||
/data/early-access
|
||||
dist
|
||||
|
||||
# blc: broken link checker
|
||||
blc_output.log
|
||||
blc_output_internal.log
|
||||
/dist/
|
||||
broken_links.md
|
||||
|
||||
1
.prettierignore
Normal file
@@ -0,0 +1 @@
|
||||
translations/
|
||||
12
.prettierrc.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"overrides": [
|
||||
{
|
||||
"files":[
|
||||
"**/*.{yml,yaml}"
|
||||
],
|
||||
"options": {
|
||||
"singleQuote": true
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
13
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "node",
|
||||
"request": "attach",
|
||||
"name": "Node: Nodemon",
|
||||
"processId": "${command:PickProcess}",
|
||||
"restart": true,
|
||||
"protocol": "inspector",
|
||||
},
|
||||
]
|
||||
}
|
||||
@@ -22,6 +22,7 @@ Examples of unacceptable behavior include:
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email address, without their explicit permission
|
||||
* Contacting individual members, contributors, or leaders privately, outside designated community mechanisms, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
@@ -114,7 +114,8 @@ You can browse existing issues to find something that needs help!
|
||||
|
||||
### Labels
|
||||
Labels can help you find an issue you'd like to help with.
|
||||
- The [`good-first-issue` label](https://github.com/github/docs/issues?q=is%3Aopen+is%3Aissue+label%3Agood-first-issue) is for problems or updates we think are ideal for beginners.
|
||||
- The [`help wanted` label](https://github.com/github/docs/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) is for problems or updates that anyone in the community can start working on.
|
||||
- The [`good first issue` label](https://github.com/github/docs/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) is for problems or updates we think are ideal for beginners.
|
||||
- The [`content` label](https://github.com/github/docs/issues?q=is%3Aopen+is%3Aissue+label%3Acontent) is for problems or updates in the content on docs.github.com. These will usually require some knowledge of Markdown.
|
||||
- The [`engineering` label](https://github.com/github/docs/issues?q=is%3Aopen+is%3Aissue+label%3Aengineering) is for problems or updates in the docs.github.com website. These will usually require some knowledge of JavaScript/Node.js or YAML to fix.
|
||||
|
||||
@@ -151,7 +152,7 @@ We (usually the docs team, but sometimes GitHub product managers, engineers, or
|
||||
You should always review your own PR first.
|
||||
|
||||
For content changes, make sure that you:
|
||||
- [ ] Confirm that the changes address every part of the content strategy plan from your issue (if there are differences, explain them).
|
||||
- [ ] Confirm that the changes address every part of the content design plan from your issue (if there are differences, explain them).
|
||||
- [ ] Review the content for technical accuracy.
|
||||
- [ ] Review the entire pull request using the [localization checklist](contributing/localization-checklist.md).
|
||||
- [ ] Copy-edit the changes for grammar, spelling, and adherence to the style guide.
|
||||
|
||||
@@ -10,10 +10,11 @@ GEM
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
graphql (= 1.10.6)
|
||||
graphql-schema_comparator (~> 1.0.0)
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
2.2.1
|
||||
|
||||
2
Procfile
@@ -1 +1,3 @@
|
||||
web: NODE_ENV=production node server.js
|
||||
|
||||
release: NODE_ENV=production node script/purge-redis-pages.js
|
||||
|
||||
@@ -5,6 +5,7 @@ This repository contains the documentation website code and Markdown source file
|
||||
GitHub's Docs team works on pre-production content in a private repo that regularly syncs with this public repo.
|
||||
|
||||
In this article:
|
||||
|
||||
- [Contributing](#contributing)
|
||||
- [READMEs](#readmes)
|
||||
- [License](#license)
|
||||
@@ -17,7 +18,7 @@ We accept a lot of [different contributions](CONTRIBUTING.md/#types-of-contribut
|
||||
|
||||
#### Click **make a contribution** from docs
|
||||
|
||||
As you're using the GitHub Docs, you may find something in an article that you'd like to add to, update, or change. Click on **make a contribution** to navigate directly to that article in the codebase, so that you can begin making your contribution.
|
||||
As you're using GitHub Docs, you may find something in an article that you'd like to add to, update, or change. Click on **make a contribution** to navigate directly to that article in the codebase, so that you can begin making your contribution.
|
||||
|
||||
<img src="./assets/images/contribution_cta.png" width="400">
|
||||
|
||||
@@ -27,13 +28,14 @@ If you've found a problem, you can open an issue using a [template](https://gith
|
||||
|
||||
#### Solve an issue
|
||||
|
||||
If you have a solution to one of the open issues, you will need to fork the repository and submit a PR using the [template](https://github.com/github/docs/blob/main/CONTRIBUTING.md#pull-request-template) that is visible automatically in the pull request body. For more details about this process, please check out [Getting Started with Contributing](/CONTRIBUTING.md).
|
||||
If you have a solution to one of the open issues, you will need to fork the repository and submit a pull request using the [template](https://github.com/github/docs/blob/main/CONTRIBUTING.md#pull-request-template) that is visible automatically in the pull request body. For more details about this process, please check out [Getting Started with Contributing](/CONTRIBUTING.md).
|
||||
|
||||
#### Join us in discussions
|
||||
|
||||
We use GitHub Discussions to talk about all sorts of topics related to documentation and this site. For example: if you'd like help troubleshooting a PR, have a great new idea, or want to share something amazing you've learned in our docs, join us in [discussions](https://github.com/github/docs/discussions).
|
||||
|
||||
#### And that's it!
|
||||
|
||||
That's how you can get started easily as a member of the GitHub Documentation community. :sparkles:
|
||||
|
||||
If you want to know more, or you're making a more complex contribution, check out [Getting Started with Contributing](/CONTRIBUTING.md).
|
||||
@@ -48,6 +50,8 @@ There are a few more things to know when you're getting started with this repo:
|
||||
In addition to the README you're reading right now, this repo includes other READMEs that describe the purpose of each subdirectory in more detail:
|
||||
|
||||
- [content/README.md](content/README.md)
|
||||
- [content/graphql/README.md](content/graphql/README.md)
|
||||
- [content/rest/README.md](content/rest/README.md)
|
||||
- [contributing/README.md](contributing/README.md)
|
||||
- [data/README.md](data/README.md)
|
||||
- [data/reusables/README.md](data/reusables/README.md)
|
||||
|
||||
3
app.json
@@ -2,7 +2,8 @@
|
||||
"name": "docs.github.com",
|
||||
"env": {
|
||||
"NODE_ENV": "production",
|
||||
"NPM_CONFIG_PRODUCTION": "true"
|
||||
"NPM_CONFIG_PRODUCTION": "true",
|
||||
"ENABLED_LANGUAGES": "en"
|
||||
},
|
||||
"buildpacks": [
|
||||
{ "url": "heroku/nodejs" }
|
||||
|
||||
BIN
assets/images/actions-approve-deployments.png
Normal file
|
After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.4 KiB |
BIN
assets/images/actions-review-deployments.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 9.4 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 130 KiB |
|
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 95 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 59 KiB |
|
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 101 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 104 KiB |