Merge branch 'main' into patch-4
27
.github/ISSUE_COMMENT_TEMPLATE/quick-status.yml
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
---
|
||||
name: A brief status update
|
||||
description: A brief status update.
|
||||
body:
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Status
|
||||
options:
|
||||
- label: 'GREY ⚪️ (Not started, paused, not currently being worked on)'
|
||||
value: 'Status: GREY'
|
||||
- label: 'GREEN 🟢 (All good, smooth sailing)'
|
||||
value: 'Status: GREEN'
|
||||
- label: "YELLOW \U0001F7E1 (On track, with hurdles to work through)"
|
||||
value: 'Status: YELLOW'
|
||||
- label: "RED \U0001F534 (BLOCKED)"
|
||||
value: 'Status: RED'
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Update Summary
|
||||
placeholder:
|
||||
Brief summary of the status and next steps. Any blockers should be
|
||||
called out specifically.
|
||||
- type: input
|
||||
attributes:
|
||||
label: 'Attribution'
|
||||
value: '_created with :heart: by typing_ `/status`'
|
||||
format: text
|
||||
26
.github/ISSUE_COMMENT_TEMPLATE/status.yml
vendored
@@ -1,26 +0,0 @@
|
||||
---
|
||||
name: Status Update
|
||||
about: A brief status update.
|
||||
body:
|
||||
- type: dropdown
|
||||
attributes:
|
||||
name: Status
|
||||
options:
|
||||
- name: "GREEN \U0001F34F (All good, smooth sailing)"
|
||||
value: 'Status: GREEN'
|
||||
- name: "YELLOW \U0001F7E1 (On track, with hurdles to work through)"
|
||||
value: 'Status: YELLOW'
|
||||
- name: "RED \U0001F534 (BLOCKED)"
|
||||
value: 'Status: RED'
|
||||
- type: input
|
||||
attributes:
|
||||
name: Update Summary
|
||||
placeholder:
|
||||
Brief summary of the status and next steps. Any blockers should be
|
||||
called out specifically.
|
||||
inputType: longText
|
||||
- type: input
|
||||
attributes:
|
||||
name: 'Attribution'
|
||||
value: '_created with :heart: by typing_ `/status`'
|
||||
inputType: text
|
||||
14
.github/ISSUE_COMMENT_TEMPLATE/target-date.yml
vendored
@@ -1,14 +0,0 @@
|
||||
---
|
||||
name: Target Date Update
|
||||
about: Target date update
|
||||
body:
|
||||
- type: input
|
||||
attributes:
|
||||
name: Target completion date
|
||||
placeholder: With context if the target completion date has changed
|
||||
inputType: text
|
||||
- type: input
|
||||
attributes:
|
||||
name: 'Attribution'
|
||||
value: '_created with :heart: by typing_ `/status`'
|
||||
inputType: text
|
||||
27
.github/actions-scripts/check-for-enterprise-issues-by-label.js
vendored
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const github = require('@actions/github')
|
||||
const core = require('@actions/core')
|
||||
|
||||
async function run () {
|
||||
const token = process.env.GITHUB_TOKEN
|
||||
const octokit = github.getOctokit(token)
|
||||
const query = encodeURIComponent('is:open repo:github/docs-internal is:issue')
|
||||
|
||||
const deprecationIssues = await octokit.request(`GET /search/issues?q=${query}+label:"enterprise%20deprecation"`)
|
||||
const releaseIssues = await octokit.request(`GET /search/issues?q=${query}+label:"enterprise%20release"`)
|
||||
const isDeprecationIssue = deprecationIssues.data.items.length === 0 ? 'false' : 'true'
|
||||
const isReleaseIssue = releaseIssues.data.items.length === 0 ? 'false' : 'true'
|
||||
core.setOutput('deprecationIssue', isDeprecationIssue)
|
||||
core.setOutput('releaseIssue', isReleaseIssue)
|
||||
return `Set outputs deprecationIssue: ${isDeprecationIssue}, releaseIssue: ${isReleaseIssue}`
|
||||
}
|
||||
|
||||
run()
|
||||
.then(
|
||||
(response) => { console.log(`Finished running: ${response}`) },
|
||||
(error) => {
|
||||
console.log(`#ERROR# ${error}`)
|
||||
process.exit(1)
|
||||
}
|
||||
)
|
||||
148
.github/actions-scripts/create-enterprise-issue.js
vendored
Executable file
@@ -0,0 +1,148 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const github = require('@actions/github')
|
||||
const enterpriseDates = require('../../lib/enterprise-dates')
|
||||
const { latest, oldestSupported } = require('../../lib/enterprise-server-releases')
|
||||
const acceptedMilestones = ['release', 'deprecation']
|
||||
const teamsToCC = '/cc @github/docs-content @github/docs-engineering'
|
||||
|
||||
// Adjust these values as needed.
|
||||
const numberOfdaysBeforeReleaseToOpenIssue = 30
|
||||
const numberOfdaysBeforeDeprecationToOpenIssue = 15
|
||||
|
||||
// [start-readme]
|
||||
//
|
||||
// This script runs once per day via a scheduled GitHub Action to check whether
|
||||
// an Enterprise release or deprecation milestone is within the specified
|
||||
// number of days.
|
||||
//
|
||||
// When a milestone is within the specified number of days, a new issue is
|
||||
// created using the templates in
|
||||
// .github/actions-scripts/enterprise-server-issue-templates.
|
||||
//
|
||||
// Release issues are then added to the docs content squad board for triage.
|
||||
// Deprecations issues are owned by docs engineering and are added to the
|
||||
// docs engineering squad board automatically when the engineering label is added.
|
||||
//
|
||||
// [end-readme]
|
||||
|
||||
run()
|
||||
|
||||
async function run () {
|
||||
|
||||
|
||||
const milestone = process.argv[2]
|
||||
if (!acceptedMilestones.includes(milestone)) {
|
||||
console.log('Please specify either \'release\' or \'deprecation\'\n')
|
||||
console.log('Example: script/open-enterprise-issue.js release')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Milestone-dependent values.
|
||||
const numberOfdaysBeforeMilestoneToOpenIssue = milestone === 'release'
|
||||
? numberOfdaysBeforeReleaseToOpenIssue
|
||||
: numberOfdaysBeforeDeprecationToOpenIssue
|
||||
|
||||
const versionNumber = milestone === 'release'
|
||||
? getNextVersionNumber()
|
||||
: oldestSupported
|
||||
|
||||
if (!versionNumber) {
|
||||
console.log(`Could not find the next version number after ${latest} in enterprise-dates.json. Try running script/udpate-enterprise-dates.js, then rerun this script.`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
const datesForVersion = enterpriseDates[versionNumber]
|
||||
|
||||
if (!datesForVersion) {
|
||||
console.log(`Could not find ${versionNumber} in enterprise-dates.json. Try running script/udpate-enterprise-dates.js, then rerun this script.`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
const nextMilestoneDate = datesForVersion[`${milestone}Date`]
|
||||
const daysUntilMilestone = calculateDaysUntilMilestone(nextMilestoneDate)
|
||||
|
||||
// If the milestone is more than the specific days away, exit now.
|
||||
if (daysUntilMilestone > numberOfdaysBeforeMilestoneToOpenIssue) {
|
||||
console.log(`The ${versionNumber} ${milestone} is not until ${nextMilestoneDate}! An issue will be opened when it is ${numberOfdaysBeforeMilestoneToOpenIssue} days away.`)
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
const milestoneSteps = fs.readFileSync(path.join(process.cwd(), `.github/actions-scripts/enterprise-server-issue-templates/${milestone}-issue.md`), 'utf8')
|
||||
const issueLabels = [`enterprise ${milestone}`, `engineering`]
|
||||
const issueTitle = `[${nextMilestoneDate}] Enterprise Server ${versionNumber} ${milestone} (technical steps)`
|
||||
|
||||
const issueBody = `GHES ${versionNumber} ${milestone} occurs on ${nextMilestoneDate}.
|
||||
\n${milestoneSteps}
|
||||
${teamsToCC}`
|
||||
|
||||
const token = process.env.GITHUB_TOKEN
|
||||
|
||||
// Create the milestone issue
|
||||
const octokit = github.getOctokit(token)
|
||||
try {
|
||||
issue = await octokit.request('POST /repos/{owner}/{repo}/issues', {
|
||||
owner: 'github',
|
||||
repo: 'docs-internal',
|
||||
title: issueTitle,
|
||||
body: issueBody,
|
||||
labels: issueLabels
|
||||
})
|
||||
if (issue.status === 201) {
|
||||
// Write the values to disk for use in the workflow.
|
||||
console.log(`Issue #${issue.data.number} for the ${versionNumber} ${milestone} was opened: ${issue.data.html_url}`)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`#ERROR# ${error}`)
|
||||
console.log(`🛑 There was an error creating the issue.`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
// Add the release issue to the 'Needs triage' column on the
|
||||
// docs content squad project board:
|
||||
// https://github.com/orgs/github/projects/1773#column-12198119
|
||||
// Deprecation issues are owned by docs engineering only and will
|
||||
// be triaged by adding the engineering label to the issue.
|
||||
if (milestone === 'release') {
|
||||
try {
|
||||
const addCard = await octokit.request('POST /projects/columns/{column_id}/cards', {
|
||||
column_id: 12198119,
|
||||
content_id: issue.data.id,
|
||||
content_type: 'Issue',
|
||||
mediaType: {
|
||||
previews: [
|
||||
'inertia'
|
||||
]
|
||||
}
|
||||
})
|
||||
|
||||
if (addCard.status === 201) {
|
||||
// Write the values to disk for use in the workflow.
|
||||
console.log(`The issue #${issue.data.number} was added to https://github.com/orgs/github/projects/1773#column-12198119.`)
|
||||
}
|
||||
} catch(error) {
|
||||
console.error(`#ERROR# ${error}`)
|
||||
console.log(`🛑 There was an error adding the issue to the project board.`)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getNextVersionNumber () {
|
||||
const indexOfLatest = Object.keys(enterpriseDates).indexOf(latest)
|
||||
const indexOfNext = indexOfLatest + 1
|
||||
return Object.keys(enterpriseDates)[indexOfNext]
|
||||
}
|
||||
|
||||
function calculateDaysUntilMilestone (nextMilestoneDate) {
|
||||
const today = new Date().toISOString().slice(0, 10)
|
||||
const differenceInMilliseconds = getTime(nextMilestoneDate) - getTime(today)
|
||||
// Return the difference in days
|
||||
return Math.floor((differenceInMilliseconds) / (1000 * 60 * 60 * 24))
|
||||
}
|
||||
|
||||
function getTime (date) {
|
||||
return new Date(date).getTime()
|
||||
}
|
||||
57
.github/actions-scripts/enterprise-server-issue-templates/deprecation-issue.md
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
## Overview
|
||||
|
||||
The day after a GHES version's [deprecation date](https://github.com/github/docs-internal/tree/main/lib/enterprise-dates.json), a banner on the docs will say: `This version was deprecated on <date>.` This is all users need to know. However, we don't want to update those docs anymore or link to them in the nav. Follow the steps in this issue to **archive** the docs.
|
||||
|
||||
**Note**: Do each step below in a separate PR. Only move on to the next step when the previous PR has been merged.
|
||||
|
||||
## Step 1: Scrape the docs and archive the files
|
||||
|
||||
- [ ] In your checkout of the [repo with archived GHES content](https://github.com/github/help-docs-archived-enterprise-versions), create a new branch: `git checkout -b deprecate-<version>`
|
||||
- [ ] In your `docs-internal` checkout, download the static files for the oldest supported version into your archival checkout:
|
||||
```
|
||||
$ script/enterprise-server-deprecations/archive-version.js -p <path-to-archive-repo-checkout>
|
||||
```
|
||||
If your checkouts live in the same directory, this command would be:
|
||||
```
|
||||
$ script/enterprise-server-deprecations/archive-version.js -p ../help-docs-archived-enterprise-versions
|
||||
```
|
||||
**Note:** You can pass the `--dry-run` flag to scrape only the first 10 pages plus their redirects for testing purposes.
|
||||
|
||||
## Step 2: Upload the assets directory to Azure storage
|
||||
|
||||
- [ ] Log in to the Azure portal from Okta. Navigate to the [githubdocs Azure Storage Blob resoruce](https://portal.azure.com/#@githubazure.onmicrosoft.com/resource/subscriptions/fa6134a7-f27e-4972-8e9f-0cedffa328f1/resourceGroups/docs-production/providers/Microsoft.Storage/storageAccounts/githubdocs/overview).
|
||||
- [ ] Click the "Open in Explorer" button to the right of search box.If you haven't already, click the download link to download "Microsoft Azure Storage Explorer." To login to the app, click the plug icon in the left sidebar and click the option to "add an azure account." When you login, you'll need a yubikey to authenticate through Okta.
|
||||
- [ ] From the Microsoft Azure Storage Explorer app, select the `githubdocs` storage account resource and navigate to the `github-images` blob container.
|
||||
- [ ] Click "Upload" and select "Upload folder." Click the "Selected folder" input to navigate to the `help-docs-archived-enterprise-versions` repository and select the `assets` directory for the version you just generated. In the "Destination folder" input, add the version number. For example, `/enterprise/2.22/`.
|
||||
- [ ] Check the log to ensure all files were uploaded successfully.
|
||||
- [ ] Removed the `assets` directory from the `/help-docsc-archived-enterprise-versions` repository.
|
||||
|
||||
## Step 3: Commit and push changes to help-docs-archived-enterprise-versions repo
|
||||
|
||||
- [ ] In your archival checkout, `git add <version>`, commit, and push.
|
||||
- [ ] Open a PR and merge it in. Note that the version will _not_ be deprecated on the docs site until you do the next step.
|
||||
|
||||
## Step 4: Deprecate the version in docs-internal
|
||||
|
||||
In your `docs-internal` checkout:
|
||||
- [ ] Create a new branch: `git checkout -b deprecate-<version>`.
|
||||
- [ ] Edit `lib/enterprise-server-releases.js` by moving the number to be deprecated into the `deprecated` array.
|
||||
- [ ] Run `script/enterprise-server-deprecations/remove-static-files.js` and commit results.
|
||||
- [ ] Manually remove entries for the deprecated version from `lib/redirects/static/developer-docs-routes-for-supported-versions.json`.
|
||||
- **Note**: These entries only go up to 2.21. We can remove this step once 2.21 is deprecated.
|
||||
- [ ] Open a new PR. Make sure to check the following:
|
||||
- [ ] Tests are passing.
|
||||
- [ ] The deprecated version renders on staging as expected.
|
||||
- [ ] The new oldest supported version renders on staging as expected. Also check the banner text.
|
||||
- [ ] When the PR is approved, merge it in to complete the deprecation.
|
||||
|
||||
## Step 5: Remove outdated Liquid markup and frontmatter
|
||||
|
||||
The following steps are somewhat optional and can be completed at any time. They do not have user impact; they just clear out old Liquid statements for the deprecated version, which makes things easier for content writers.
|
||||
|
||||
In your `docs-internal` checkout:
|
||||
- [ ] Create a new branch: `git checkout -b remove-<version>-markup`
|
||||
- [ ] Run the script: `script/remove-deprecated-enterprise-version-markup.js --release <number>`.
|
||||
- [ ] Spot check a few changes. Content, frontmatter, and data files should all have been updated.
|
||||
- [ ] Open a PR with the results. The diff may be large and complex, so make sure to get a review from `@github/docs-content`.
|
||||
- [ ] Debug any test failures or unexpected results.
|
||||
53
.github/actions-scripts/enterprise-server-issue-templates/release-issue.md
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
## To enable the new version
|
||||
|
||||
**Do these steps in a local checkout to create a GHES release branch with passing tests:**
|
||||
|
||||
- [ ] In [lib/enterprise-server-releases.js](https://github.com/github/docs-internal/blob/main/lib/enterprise-server-releases.js):
|
||||
- [ ] Prepend the new release number to the `supported` array.
|
||||
- [ ] Increment the `next` variable above the `supported` array (e.g., new release number + `.1`)
|
||||
- [ ] Update the GHES dates file (requires a PAT in a local `.env` file):
|
||||
```
|
||||
script/update-enterprise-dates.js
|
||||
```
|
||||
- [ ] Create REST files based on previous version:
|
||||
```
|
||||
script/enterprise-server-releases/create-rest-files.js --oldVersion <PLAN@RELEASE> --newVersion <PLAN@RELEASE>
|
||||
```
|
||||
- [ ] Create GraphQL files based on previous version:
|
||||
```
|
||||
script/enterprise-server-releases/create-graphql-files.js --oldVersion <PLAN@RELEASE> --newVersion <PLAN@RELEASE>
|
||||
```
|
||||
- [ ] Create webhook files based on previous version:
|
||||
```
|
||||
script/enterprise-server-release/create-webhook-files.js --oldVersion <PLAN@RELEASE> --newVersion <PLAN@RELEASE>
|
||||
```
|
||||
- [ ] (Optional) Add a Release Candidate banner:
|
||||
```
|
||||
script/enterprise-server-releases/release-banner.js --action create --version <PLAN@RELEASE>
|
||||
```
|
||||
|
||||
### When the `docs-internal` release branch is open
|
||||
|
||||
- [ ] Add a label to the PR in this format:
|
||||
```
|
||||
sync-english-index-for-<PLAN@RELEASE>
|
||||
```
|
||||
☝️ This will run a workflow **on every push to the PR** that will sync **only** the English index for the new version to Algolia. This will make the GHES content searchable on staging throughout content creation, and will ensure the search updates go live at the same time the content is published. See [`contributing/search.md`](https://github.com/github/docs-internal/blob/main/contributing/search.md) for details.
|
||||
|
||||
- [ ] Create an OpenAPI topic branch
|
||||
|
||||
This branch is used to avoid propagating the OpenAPI dev mode check CI test failure in all of the branches. All changes that affect the OpenAPI schema should branch off of this topic branch. The tests should all be passing before the OpenAPI topic branch is merged into the megabranch.
|
||||
|
||||
For more information about how OpenAPI changes are published to docs.github.com, see [Publishing REST API changes to docs.github.com](https://github.com/github/docs-content/blob/main/docs-content-docs/docs-content-workflows/publishing-documentation/publishing-REST-api-docs.md#publishing-rest-api-changes-to-docsgithubcom).
|
||||
|
||||
- [ ] In `github/github`, to create a new GHES release follow these steps:
|
||||
- [ ] Copy the previous release's root document to a new root document for this release `cp app/api/description/ghes-<LATEST RELEASE NUMBER>.yaml app/api/description/ghes-<NEXT RELEASE NUMBER>.yaml`.
|
||||
- [ ] Update the `externalDocs.url` property in that file to use the new GHES release number.
|
||||
- [ ] Copy the previous release's configuration file to a new configuration file for this release `cp app/api/description/config/releases/ghes-<LATEST RELEASE NUMBER>.yaml app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml`.
|
||||
- [ ] Update the `variables.externalDocsUrl`, `variables.ghesVersion`, and `patch.[].value.url` in that file to use the new GHES release number.
|
||||
- [ ] Update `published` in that file to `false`. **Note:** This is important to ensure that 3.1 OpenAPI changes are not made public until 3.1 is released.
|
||||
|
||||
### Before shipping the release branch
|
||||
|
||||
- [ ] Add the GHES release notes to `data/release-notes/` and update the versioning frontmatter in `content/admin/release-notes.md` to `enterprise-server: '<=<RELEASE>'`
|
||||
- [ ] In `github/github`, open a PR to change `published` to `true` in `app/api/description/config/releases/ghes-<NEXT RELEASE NUMBER>.yaml`. Get the required approval from `@github/ecosystem-api-reviewers` then deploy to dotcom. This process generally takes 30-90 minutes. Ask in `#docs-ecosystem` if you need help with this.
|
||||
2
.github/allowed-actions.js
vendored
@@ -20,13 +20,13 @@ module.exports = [
|
||||
"cschleiden/actions-linter@0ff16d6ac5103cca6c92e6cbc922b646baaea5be",
|
||||
"dawidd6/action-delete-branch@47743101a121ad657031e6704086271ca81b1911",
|
||||
"docker://chinthakagodawita/autoupdate-action:v1",
|
||||
"fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289",
|
||||
"github/codeql-action/analyze@v1",
|
||||
"github/codeql-action/init@v1",
|
||||
"juliangruber/approve-pull-request-action@c530832d4d346c597332e20e03605aa94fa150a8",
|
||||
"juliangruber/find-pull-request-action@2fc55e82a6d5d36fe1e7f1848f7e64fd02d99de9",
|
||||
"juliangruber/read-file-action@e0a316da496006ffd19142f0fd594a1783f3b512",
|
||||
"lee-dohm/close-matching-issues@22002609b2555fe18f52b8e2e7c07cbf5529e8a8",
|
||||
"lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb",
|
||||
"pascalgn/automerge-action@c9bd1823770819dc8fb8a5db2d11a3a95fbe9b07", //pascalgn/automerge@0.12.0
|
||||
"peter-evans/create-issue-from-file@a04ce672e3acedb1f8e416b46716ddfd09905326",
|
||||
"peter-evans/create-or-update-comment@5221bf4aa615e5c6e95bb142f9673a9c791be2cd",
|
||||
|
||||
10
.github/commands/remove.yaml
vendored
@@ -1,10 +0,0 @@
|
||||
trigger: remove-from-fr-board
|
||||
title: Remove from FR board
|
||||
description: Remove the current issue or pull request from the project board for the docs content first responder
|
||||
surfaces:
|
||||
- issue
|
||||
- pull_request
|
||||
- discussion
|
||||
steps:
|
||||
- type: repository_dispatch
|
||||
eventType: remove_from_FR_board
|
||||
2
.github/workflows/60-days-stale-check.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
stale-pr-message: 'This PR is stale because it has been open 60 days with no activity.'
|
||||
days-before-stale: 60
|
||||
days-before-close: -1
|
||||
only-labels: 'engineering'
|
||||
only-labels: 'engineering,Triaged,Improve existing docs,Core,Ecosystem'
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
exempt-pr-labels: 'never-stale'
|
||||
|
||||
26
.github/workflows/browser-test.yml
vendored
@@ -12,44 +12,26 @@ on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
continue-on-error: true
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
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: '[".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
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# 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
|
||||
- name: Checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup Node
|
||||
- name: Setup Node
|
||||
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install
|
||||
- name: Install
|
||||
uses: rachmari/puppeteer-container@6d56d6e132a3df76cf60bc290a4282f7fbaed05e
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
args: npm ci
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Test
|
||||
- name: Test
|
||||
timeout-minutes: 10
|
||||
uses: rachmari/puppeteer-container@6d56d6e132a3df76cf60bc290a4282f7fbaed05e
|
||||
with:
|
||||
|
||||
11
.github/workflows/check-for-spammy-issues.yml
vendored
@@ -65,3 +65,14 @@ jobs:
|
||||
issue_number: issue.number,
|
||||
body: "This issue appears to have been opened accidentally. I'm going to close it now, but feel free to open a new issue or ask any questions in [discussions](https://github.com/github/docs/discussions)!"
|
||||
});
|
||||
|
||||
// Add the issue to the Done column on the triage board
|
||||
try {
|
||||
await github.projects.createCard({
|
||||
column_id: 11167427,
|
||||
content_id: context.payload.issue.id,
|
||||
content_type: "Issue"
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
name: Check for External Repo Sync PR
|
||||
|
||||
# **What it does**: If someone made a repo sync pull request other than Octomerger, close it.
|
||||
# **Why we have it**: Another form of spam in the open-source repository.
|
||||
# **Who does it impact**: Open-source contributors.
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types:
|
||||
- opened
|
||||
- reopened
|
||||
branches:
|
||||
- main
|
||||
|
||||
jobs:
|
||||
invalid-repo-sync-check:
|
||||
name: Close external Repo Sync PRs
|
||||
if: ${{ github.repository == 'github/docs' && github.head_ref == 'repo-sync' }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
script: |
|
||||
|
||||
const prCreator = context.payload.sender.login
|
||||
|
||||
// If the PR creator is the expected account, stop now
|
||||
if (prCreator === 'Octomerger') {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await github.teams.getMembershipForUserInOrg({
|
||||
org: 'github',
|
||||
team_slug: 'employees',
|
||||
username: prCreator
|
||||
})
|
||||
|
||||
// If the PR creator is a GitHub employee, stop now
|
||||
return
|
||||
} catch (err) {
|
||||
// An error will be thrown if the user is not a GitHub employee.
|
||||
// That said, we still want to proceed anyway!
|
||||
}
|
||||
|
||||
const pr = context.payload.pull_request
|
||||
const { owner, repo } = context.repo
|
||||
|
||||
// Close the PR and add the invalid label
|
||||
await github.issues.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pr.number,
|
||||
labels: ['invalid'],
|
||||
state: 'closed'
|
||||
})
|
||||
|
||||
// Comment on the PR
|
||||
await github.issues.createComment({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pr.number,
|
||||
body: "Please leave this `repo-sync` branch to the robots!\n\nI'm going to close this pull request now, but feel free to open a new issue or ask any questions in [discussions](https://github.com/github/docs/discussions)!"
|
||||
})
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
check-team-membership:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
if: github.repository == 'github/docs'
|
||||
if: github.repository == 'github/docs' && github.actor != 'docs-bot'
|
||||
steps:
|
||||
- id: membership_check
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
|
||||
37
.github/workflows/link-check-dotcom.yml
vendored
@@ -12,53 +12,26 @@ on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
continue-on-error: true
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
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: '[".github/workflows/link-check-dotcom.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
|
||||
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
|
||||
steps:
|
||||
# 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
|
||||
- name: Checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup node
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install
|
||||
- name: Install
|
||||
run: npm ci
|
||||
|
||||
## TODO
|
||||
# - if: ${{ github.repository == 'github/docs-internal' && needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
# name: Clone early access
|
||||
# run: npm run heroku-postbuild
|
||||
# env:
|
||||
# DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }}
|
||||
# GIT_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Build
|
||||
- name: Build
|
||||
run: npm run build
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: 'Link check: Dotcom'
|
||||
- name: 'Link check: Dotcom'
|
||||
env:
|
||||
DOCS_VERSION: 'dotcom'
|
||||
run: npm run link-check
|
||||
|
||||
37
.github/workflows/link-check-ghae.yml
vendored
@@ -12,53 +12,26 @@ on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
continue-on-error: true
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
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: '[".github/workflows/link-check-ghae.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
|
||||
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
|
||||
steps:
|
||||
# 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
|
||||
- name: Checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup node
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install
|
||||
- name: Install
|
||||
run: npm ci
|
||||
|
||||
## TODO
|
||||
# - if: ${{ github.repository == 'github/docs-internal' && needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
# name: Clone early access
|
||||
# run: npm run heroku-postbuild
|
||||
# env:
|
||||
# DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }}
|
||||
# GIT_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Build
|
||||
- name: Build
|
||||
run: npm run build
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: 'Link check: GitHub AE'
|
||||
- name: 'Link check: GitHub AE'
|
||||
env:
|
||||
DOCS_VERSION: 'github-ae'
|
||||
run: npm run link-check
|
||||
|
||||
37
.github/workflows/link-check-ghes.yml
vendored
@@ -12,53 +12,26 @@ on:
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
continue-on-error: true
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
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: '[".github/workflows/link-check-ghes.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
|
||||
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
|
||||
steps:
|
||||
# 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
|
||||
- name: Checkout
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup node
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install
|
||||
- name: Install
|
||||
run: npm ci
|
||||
|
||||
## TODO
|
||||
# - if: ${{ github.repository == 'github/docs-internal' && needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
# name: Clone early access
|
||||
# run: npm run heroku-postbuild
|
||||
# env:
|
||||
# DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }}
|
||||
# GIT_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Build
|
||||
- name: Build
|
||||
run: npm run build
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: 'Link check: Enterprise Server'
|
||||
- name: 'Link check: Enterprise Server'
|
||||
env:
|
||||
DOCS_VERSION: 'enterprise-server'
|
||||
run: npm run link-check
|
||||
|
||||
41
.github/workflows/move-reopened-issues-to-triage.yaml
vendored
Normal file
@@ -0,0 +1,41 @@
|
||||
name: Move Reopened Issues to Triage
|
||||
|
||||
# **What it does**: Moves issues that are reopened from the Done column to the Triage column.
|
||||
# **Why we have it**: To prevent having to do this manually.
|
||||
# **Who does it impact**: Open-source.
|
||||
|
||||
on:
|
||||
issues:
|
||||
types:
|
||||
- reopened
|
||||
|
||||
jobs:
|
||||
move-reopened-issue-to-triage:
|
||||
if: github.repository == 'github/docs'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
script: |
|
||||
const issueNumber = context.issue.number;
|
||||
const doneColumnId = 11167427;
|
||||
const triageColumnId = 11007039;
|
||||
|
||||
try {
|
||||
const cards = await github.projects.listCards({
|
||||
column_id: doneColumnId
|
||||
});
|
||||
|
||||
for (const card of cards) {
|
||||
if (card.content_url.endsWith(`/${issueNumber}`)) {
|
||||
await github.projects.moveCard({
|
||||
card_id: card.id,
|
||||
position: 'position',
|
||||
column_id: triageColumnId
|
||||
});
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
console.log(error);
|
||||
}
|
||||
30
.github/workflows/no-response.yaml
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
name: No Response
|
||||
|
||||
# **What it does**: Closes issues that don't have enough information to be
|
||||
# actionable.
|
||||
# **Why we have it**: To remove the need for maintainers to remember to check
|
||||
# back on issues periodically to see if contributors have
|
||||
# responded.
|
||||
# **Who does it impact**: Everyone that works on docs or docs-internal.
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: created
|
||||
|
||||
schedule:
|
||||
# Schedule for five minutes after the hour every hour
|
||||
- cron: '5 * * * *'
|
||||
|
||||
jobs:
|
||||
noResponse:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
closeComment: >
|
||||
This issue has been automatically closed because there has been no response
|
||||
to our request for more information from the original author. With only the
|
||||
information that is currently in the issue, we don't have enough information
|
||||
to take action. Please reach out if you have or find the answers we need so
|
||||
that we can investigate further. See [this blog post on bug reports and the importance of repro steps](https://www.lee-dohm.com/2015/01/04/writing-good-bug-reports/) for more information about the kind of information that may be helpful.
|
||||
47
.github/workflows/open-enterprise-issue.yml
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Open Enterprise release or deprecation issue
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '49 14 * * *' # At 14:49 UTC daily
|
||||
|
||||
jobs:
|
||||
open_enterprise_issue:
|
||||
name: Open Enterprise issue
|
||||
if: github.repository == 'github/docs-internal'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check for existing release or deprecation issues
|
||||
id: existingIssue
|
||||
run: |
|
||||
.github/actions-scripts/check-for-enterprise-issues-by-label.js
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
if: steps.existingIssue.outputs.deprecationIssue == 'false' || steps.existingIssue.outputs.releaseIssue == 'false'
|
||||
|
||||
- name: npm ci
|
||||
if: steps.existingIssue.outputs.deprecationIssue == 'false' || steps.existingIssue.outputs.releaseIssue == 'false'
|
||||
run: npm ci
|
||||
|
||||
- name: npm run build
|
||||
if: steps.existingIssue.outputs.deprecationIssue == 'false' || steps.existingIssue.outputs.releaseIssue == 'false'
|
||||
run: npm run build
|
||||
|
||||
- name: Update enterprise dates
|
||||
if: steps.existingIssue.outputs.deprecationIssue == 'false' || steps.existingIssue.outputs.releaseIssue == 'false'
|
||||
run: |
|
||||
script/update-enterprise-dates.js
|
||||
|
||||
- name: Create an enterprise release issue
|
||||
if: steps.existingIssue.outputs.releaseIssue == 'false'
|
||||
run: |
|
||||
.github/actions-scripts/create-enterprise-issue.js release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
- name: Create an enterprise deprecation issue
|
||||
if: steps.existingIssue.outputs.deprecationIssue == 'false'
|
||||
run: |
|
||||
.github/actions-scripts/create-enterprise-issue.js deprecation
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
2
.github/workflows/repo-freeze-reminders.yml
vendored
@@ -6,7 +6,7 @@ name: Repo Freeze Reminders
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '00 11 * * *' # once per day around 11:00am UTC
|
||||
- cron: '9 11 * * *' # once per day around 11:09am UTC
|
||||
|
||||
env:
|
||||
FREEZE: ${{ secrets.FREEZE }}
|
||||
|
||||
2
.github/workflows/repo-sync-stalls.yml
vendored
@@ -7,7 +7,7 @@ name: Repo Sync Stalls
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '0 */2 * * *'
|
||||
- cron: '32 */2 * * *' # At minute 32 past every 2nd hour.
|
||||
|
||||
jobs:
|
||||
repo-sync-stalls:
|
||||
|
||||
77
.github/workflows/repo-sync.yml
vendored
@@ -1,13 +1,18 @@
|
||||
# The docs.github.com project has two repositories: github/docs (public) and github/docs-internal (private)
|
||||
#
|
||||
# This GitHub Actions workflow keeps the main branch of those two repos in sync.
|
||||
# This GitHub Actions workflow keeps the `main` branch of those two repos in sync.
|
||||
#
|
||||
# For more details, see https://github.com/repo-sync/repo-sync#how-it-works
|
||||
|
||||
name: Repo Sync
|
||||
|
||||
# **What it does**: Syncs docs and docs-internal.
|
||||
# **Why we have it**: To keep the open-source repository up-to-date, while still having an internal repository for sensitive work.
|
||||
# **What it does**:
|
||||
# - close-invalid-repo-sync: Close repo sync pull requests not created by Octomerger or a Hubber.
|
||||
# - repo-sync: Syncs docs and docs-internal.
|
||||
# **Why we have it**:
|
||||
# - close-invalid-repo-sync: Another form of spam prevention for the open-source repository.
|
||||
# - repo-sync: To keep the open-source repository up-to-date, while still having an internal
|
||||
# repository for sensitive work.
|
||||
# **Who does it impact**: Open-source.
|
||||
|
||||
on:
|
||||
@@ -16,7 +21,73 @@ on:
|
||||
- cron: '*/15 * * * *' # every 15 minutes
|
||||
|
||||
jobs:
|
||||
close-invalid-repo-sync:
|
||||
name: Close invalid Repo Sync PRs
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Find pull request
|
||||
if: ${{ github.repository == 'github/docs' }}
|
||||
uses: juliangruber/find-pull-request-action@2fc55e82a6d5d36fe1e7f1848f7e64fd02d99de9
|
||||
id: find-pull-request
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: repo-sync
|
||||
base: main
|
||||
|
||||
- name: Close pull request if unwanted
|
||||
if: ${{ github.repository == 'github/docs' && steps.find-pull-request.outputs.number }}
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.DOCUBOT_FR_PROJECT_BOARD_WORKFLOWS_REPO_ORG_READ_SCOPES }}
|
||||
script: |
|
||||
const { owner, repo } = context.repo
|
||||
|
||||
const pr = await github.pulls.get({
|
||||
owner,
|
||||
repo,
|
||||
pull_number: parseInt(${{ steps.find-pull-request.outputs.number }})
|
||||
})
|
||||
|
||||
const prCreator = pr.user.login
|
||||
|
||||
// If the PR creator is the expected account, stop now
|
||||
if (prCreator === 'Octomerger') {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await github.teams.getMembershipForUserInOrg({
|
||||
org: 'github',
|
||||
team_slug: 'employees',
|
||||
username: prCreator
|
||||
})
|
||||
|
||||
// If the PR creator is a GitHub employee, stop now
|
||||
return
|
||||
} catch (err) {
|
||||
// An error will be thrown if the user is not a GitHub employee.
|
||||
// That said, we still want to proceed anyway!
|
||||
}
|
||||
|
||||
// Close the PR and add the invalid label
|
||||
await github.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
labels: ['invalid'],
|
||||
state: 'closed'
|
||||
})
|
||||
|
||||
// Comment on the PR
|
||||
await github.issues.createComment({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: pr.number,
|
||||
body: "Please leave this `repo-sync` branch to the robots!\n\nI'm going to close this pull request now, but feel free to open a new issue or ask any questions in [discussions](https://github.com/github/docs/discussions)!"
|
||||
})
|
||||
|
||||
repo-sync:
|
||||
needs: close-invalid-repo-sync
|
||||
if: github.repository == 'github/docs-internal' || github.repository == 'github/docs'
|
||||
name: Repo Sync
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
@@ -16,7 +16,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
continue-on-error: true
|
||||
steps:
|
||||
- if: (github.repository == 'github/docs-internal' || github.repository == 'github/docs') && (contains(github.event.pull_request.labels.*.name, 'engineering') && contains(github.event.pull_request.labels.*.name, 'feature'))
|
||||
- if: (github.repository == 'github/docs-internal' || github.repository == 'github/docs') && contains(github.event.pull_request.labels.*.name, 'feature')
|
||||
uses: actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9
|
||||
with:
|
||||
github-token: ${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }}
|
||||
@@ -35,11 +35,15 @@ jobs:
|
||||
|
||||
var column_id = 13445681;
|
||||
try {
|
||||
github.projects.createCard({
|
||||
await github.projects.createCard({
|
||||
column_id: column_id,
|
||||
content_id: context.payload.pull_request.id,
|
||||
content_type: "PullRequest"
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
if (error.includes('Project already has the associated issue')) {
|
||||
return
|
||||
} else {
|
||||
console.log(error);
|
||||
}
|
||||
}
|
||||
|
||||
37
.github/workflows/test.yml
vendored
@@ -17,22 +17,7 @@ env:
|
||||
CI: true
|
||||
|
||||
jobs:
|
||||
see_if_should_skip:
|
||||
continue-on-error: true
|
||||
runs-on: ubuntu-latest
|
||||
# Map a step output to a job output
|
||||
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: '[".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
|
||||
# Run on self-hosted if the private repo or ubuntu-latest if the public repo
|
||||
# See pull # 17442 in the private repo for context
|
||||
runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
|
||||
@@ -44,27 +29,23 @@ jobs:
|
||||
steps:
|
||||
# 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
|
||||
- name: Check out repo
|
||||
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
|
||||
with:
|
||||
# Enables cloning the Early Access repo later with the relevant PAT
|
||||
persist-credentials: 'false'
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Setup node
|
||||
- name: Setup node
|
||||
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
|
||||
with:
|
||||
node-version: 14.x
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Get npm cache directory
|
||||
- name: Get npm cache directory
|
||||
id: npm-cache
|
||||
run: |
|
||||
echo "::set-output name=dir::$(npm config get cache)"
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Cache node modules
|
||||
- name: Cache node modules
|
||||
uses: actions/cache@0781355a23dac32fd3bac414512f4b903437991a
|
||||
with:
|
||||
path: ${{ steps.npm-cache.outputs.dir }}
|
||||
@@ -72,23 +53,21 @@ jobs:
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Install dependencies
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository == 'github/docs-internal' }}
|
||||
- if: ${{ github.repository == 'github/docs-internal' }}
|
||||
name: Clone early access
|
||||
run: npm run heroku-postbuild
|
||||
env:
|
||||
DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }}
|
||||
GIT_BRANCH: ${{ github.head_ref || github.ref }}
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository != 'github/docs-internal' }}
|
||||
- if: ${{ github.repository != 'github/docs-internal' }}
|
||||
name: Run build script
|
||||
run: npm run build
|
||||
|
||||
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
|
||||
name: Run tests
|
||||
- name: Run tests
|
||||
run: npx jest tests/${{ matrix.test-group }}/
|
||||
env:
|
||||
NODE_OPTIONS: '--max_old_space_size=4096'
|
||||
|
||||
18
.pa11yci
@@ -24,7 +24,7 @@
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/setting-your-commit-email-address",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/configuring-two-factor-authentication",
|
||||
"http://localhost:4001/en/rest",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/changing-your-primary-email-address",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile/why-are-my-contributions-not-showing-up-on-my-profile",
|
||||
@@ -36,17 +36,17 @@
|
||||
"http://localhost:4001/en/github/authenticating-to-github/testing-your-ssh-connection",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/fork-a-repo",
|
||||
"http://localhost:4001/en/graphql",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/developers",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/supported-browsers",
|
||||
"http://localhost:4001/en/github/managing-your-work-on-github/about-project-boards",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/syncing-a-fork",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/creating-a-github-pages-site",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/creating-a-github-pages-site",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/working-with-ssh-key-passphrases",
|
||||
"http://localhost:4001/en/github/authenticating-to-github",
|
||||
"http://localhost:4001/en/packages/using-github-packages-with-your-projects-ecosystem/configuring-npm-for-use-with-github-packages",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/about-github-pages",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages/about-github-pages",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile",
|
||||
"http://localhost:4001/en/actions/getting-started-with-github-actions/about-github-actions",
|
||||
"http://localhost:4001/en/github/getting-started-with-github",
|
||||
@@ -59,7 +59,7 @@
|
||||
"http://localhost:4001/en/packages",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/configuring-a-workflow",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/managing-commit-signature-verification",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-organizations-and-teams/about-oauth-app-access-restrictions",
|
||||
"http://localhost:4001/en/organizations/restricting-access-to-your-organizations-data/about-oauth-app-access-restrictions",
|
||||
"http://localhost:4001/en/github/managing-files-in-a-repository/adding-a-file-to-a-repository-using-the-command-line",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/access-permissions-on-github",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/githubs-products",
|
||||
@@ -75,7 +75,7 @@
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/inviting-collaborators-to-a-personal-repository",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-user-account/changing-your-github-username",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/create-a-repo",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/getting-started-with-github-pages",
|
||||
"http://localhost:4001/en/pages/getting-started-with-github-pages",
|
||||
"http://localhost:4001/en/github/administering-a-repository/deleting-a-repository",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/using-environment-variables",
|
||||
"http://localhost:4001/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets",
|
||||
@@ -86,7 +86,7 @@
|
||||
"http://localhost:4001/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue",
|
||||
"http://localhost:4001/en/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates",
|
||||
"http://localhost:4001/en/github/authenticating-to-github/about-two-factor-authentication",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/about-custom-domains-and-github-pages",
|
||||
"http://localhost:4001/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages",
|
||||
"http://localhost:4001/en/github/searching-for-information-on-github/searching-code",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/configuring-git-to-handle-line-endings",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/getting-changes-from-a-remote-repository",
|
||||
@@ -95,7 +95,7 @@
|
||||
"http://localhost:4001/en/github/creating-cloning-and-archiving-repositories/licensing-a-repository",
|
||||
"http://localhost:4001/en/github/getting-started-with-github/verifying-your-email-address",
|
||||
"http://localhost:4001/en/github/setting-up-and-managing-your-github-profile/personalizing-your-profile",
|
||||
"http://localhost:4001/en/github/working-with-github-pages/setting-up-a-github-pages-site-with-jekyll",
|
||||
"http://localhost:4001/en/pages/setting-up-a-github-pages-site-with-jekyll",
|
||||
"http://localhost:4001/en/github/managing-subscriptions-and-notifications-on-github",
|
||||
"http://localhost:4001/en/github/collaborating-with-issues-and-pull-requests/configuring-a-remote-for-a-fork"
|
||||
]
|
||||
|
||||
19
Dockerfile.openapi_decorator
Normal file
@@ -0,0 +1,19 @@
|
||||
FROM node:14-alpine
|
||||
|
||||
RUN apk add --no-cache git python make g++
|
||||
|
||||
WORKDIR /openapi-check
|
||||
|
||||
RUN chown node:node /openapi-check -R
|
||||
|
||||
USER node
|
||||
|
||||
COPY --chown=node:node package.json /openapi-check
|
||||
COPY --chown=node:node package-lock.json /openapi-check
|
||||
ADD --chown=node:node script /openapi-check/script
|
||||
ADD --chown=node:node lib /openapi-check/lib
|
||||
ADD --chown=node:node content /openapi-check/content
|
||||
|
||||
RUN npm ci -D
|
||||
|
||||
ENTRYPOINT ["node", "/openapi-check/script/rest/openapi-check.js"]
|
||||
2
app.json
@@ -12,7 +12,7 @@
|
||||
"formation": {
|
||||
"web": {
|
||||
"quantity": 1,
|
||||
"size": "standard-1x"
|
||||
"size": "standard-2x"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 19 KiB |
BIN
assets/images/help/pages/pages-tab.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 142 KiB |
BIN
assets/images/help/pages/remove-custom-domain.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 21 KiB |
BIN
assets/images/help/releases/create-release-discussion.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 136 KiB |
BIN
assets/images/help/repository/actions-quickstart-job.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
assets/images/help/repository/actions-quickstart-log-detail.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
assets/images/help/repository/actions-quickstart-logs.png
Normal file
|
After Width: | Height: | Size: 206 KiB |
BIN
assets/images/help/repository/actions-quickstart-run-name.png
Normal file
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 114 KiB |
BIN
assets/images/help/settings/settings-sidebar-billing-plans.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 16 KiB |
BIN
assets/images/help/sponsors/enable-custom-amounts.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 74 KiB |
BIN
assets/images/help/sponsors/set-default-amount.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
assets/images/help/sponsors/show-one-time-tiers.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 34 KiB |
@@ -184,8 +184,10 @@ featuredLinks:
|
||||
|
||||
### `changelog`
|
||||
|
||||
- Purpose: Render a list of changelog items with timestamps on product pages (ex: `layouts/product-landing.html`)
|
||||
- Type: `Array`, items are objects `{ href: string, title: string, date: 'YYYY-MM-DD' }`
|
||||
- Purpose: Render a list of items pulled from [GitHub Changelog](https://github.blog/changelog/) on product landing pages (ex: `layouts/product-landing.html`). The one exception is Education, which pulls from https://github.blog/category/community/education.
|
||||
- Type: `Object`, properties:
|
||||
- `label` -- must be present and corresponds to the labels used in the [GitHub Changelog](https://github.blog/changelog/)
|
||||
- `prefix` -- optional string that starts each changelog title that should be omitted in the docs feed. For example, with the prefix `GitHub Actions: ` specified, changelog titles like `GitHub Actions: Some Title Here` will render as `Some Title Here` in the docs feed).
|
||||
- Optional.
|
||||
|
||||
### `defaultPlatform`
|
||||
@@ -223,7 +225,7 @@ includeGuides:
|
||||
```
|
||||
|
||||
### `type`
|
||||
- Purpose: Indicate the type of article.
|
||||
- Purpose: Indicate the type of article.
|
||||
- Type: `String`, one of the `overview`, `quick_start`, `tutorial`, `how_to`, `reference`.
|
||||
- Optional.
|
||||
|
||||
|
||||
@@ -58,10 +58,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Ant
|
||||
run: ant -noinput -buildfile build.xml
|
||||
```
|
||||
@@ -70,7 +71,7 @@ jobs:
|
||||
This workflow performs the following steps:
|
||||
|
||||
1. The `checkout` step downloads a copy of your repository on the runner.
|
||||
2. The `setup-java` step configures the Java 1.8 JDK.
|
||||
2. The `setup-java` step configures the Java 11 JDK by Adoptium.
|
||||
3. The "Build with Ant" step runs the default target in your `build.xml` in non-interactive mode.
|
||||
|
||||
The default workflow templates are excellent starting points when creating your build and test workflow, and you can customize the template to suit your project’s needs.
|
||||
@@ -91,9 +92,10 @@ If you use different commands to build your project, or you want to run a differ
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Run the Ant jar target
|
||||
run: ant -noinput -buildfile build-ci.xml jar
|
||||
```
|
||||
@@ -109,7 +111,11 @@ Ant will usually create output files like JARs, EARs, or WARs in the `build/jar`
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
|
||||
- run: ant -noinput -buildfile build.xml
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
||||
@@ -58,10 +58,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
||||
```
|
||||
@@ -70,7 +71,7 @@ jobs:
|
||||
This workflow performs the following steps:
|
||||
|
||||
1. The `checkout` step downloads a copy of your repository on the runner.
|
||||
2. The `setup-java` step configures the Java 1.8 JDK.
|
||||
2. The `setup-java` step configures the Java 11 JDK by Adoptium.
|
||||
3. The "Build with Gradle" step runs the `gradlew` wrapper script to ensure that your code builds, tests pass, and a package can be created.
|
||||
|
||||
The default workflow templates are excellent starting points when creating your build and test workflow, and you can customize the template to suit your project’s needs.
|
||||
@@ -91,9 +92,10 @@ If you use different commands to build your project, or you want to use a differ
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Run the Gradle package task
|
||||
run: ./gradlew -b ci.gradle package
|
||||
```
|
||||
@@ -107,10 +109,11 @@ When using {% data variables.product.prodname_dotcom %}-hosted runners, you can
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Cache Gradle packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
@@ -143,7 +146,11 @@ Gradle will usually create output files like JARs, EARs, or WARs in the `build/l
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
|
||||
- run: ./gradlew build
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
|
||||
@@ -58,10 +58,11 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Build with Maven
|
||||
run: mvn --batch-mode --update-snapshots verify
|
||||
```
|
||||
@@ -70,7 +71,7 @@ jobs:
|
||||
This workflow performs the following steps:
|
||||
|
||||
1. The `checkout` step downloads a copy of your repository on the runner.
|
||||
2. The `setup-java` step configures the Java 1.8 JDK.
|
||||
2. The `setup-java` step configures the Java 11 JDK by Adoptium.
|
||||
3. The "Build with Maven" step runs the Maven `package` target in non-interactive mode to ensure that your code builds, tests pass, and a package can be created.
|
||||
|
||||
The default workflow templates are excellent starting points when creating your build and test workflow, and you can customize the template to suit your project’s needs.
|
||||
@@ -91,9 +92,10 @@ If you use different commands to build your project, or you want to use a differ
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Run the Maven verify phase
|
||||
run: mvn --batch-mode --update-snapshots verify
|
||||
```
|
||||
@@ -107,10 +109,11 @@ When using {% data variables.product.prodname_dotcom %}-hosted runners, you can
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
- name: Set up JDK 11
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Cache Maven packages
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
@@ -134,7 +137,10 @@ Maven will usually create output files like JARs, EARs, or WARs in the `target`
|
||||
```yaml{:copy}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- run: mvn --batch-mode --update-snapshots verify
|
||||
- run: mkdir staging && cp target/*.jar staging
|
||||
- uses: actions/upload-artifact@v2
|
||||
|
||||
@@ -85,9 +85,10 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Publish package
|
||||
run: gradle publish
|
||||
env:
|
||||
@@ -143,9 +144,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Publish package
|
||||
run: gradle publish
|
||||
env:
|
||||
@@ -209,9 +211,10 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Publish to the Maven Central Repository
|
||||
run: gradle publish
|
||||
env:
|
||||
|
||||
@@ -85,9 +85,10 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Maven Central Repository
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: ossrh
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
@@ -147,9 +148,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-java@v1
|
||||
- uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Publish package
|
||||
run: mvn --batch-mode deploy
|
||||
env:
|
||||
@@ -183,9 +185,10 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up Java for publishing to Maven Central Repository
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
server-id: ossrh
|
||||
server-username: MAVEN_USERNAME
|
||||
server-password: MAVEN_PASSWORD
|
||||
@@ -195,9 +198,10 @@ jobs:
|
||||
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
|
||||
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
|
||||
- name: Set up Java for publishing to GitHub Packages
|
||||
uses: actions/setup-java@v1
|
||||
uses: actions/setup-java@v2
|
||||
with:
|
||||
java-version: 1.8
|
||||
java-version: '11'
|
||||
distribution: 'adopt'
|
||||
- name: Publish to GitHub Packages
|
||||
run: mvn --batch-mode deploy
|
||||
env:
|
||||
|
||||
@@ -123,7 +123,7 @@ The self-hosted runner polls {% data variables.product.product_name %} to retrie
|
||||
You must ensure that the self-hosted runner has appropriate network access to communicate with the {% data variables.product.prodname_ghe_managed %} URL.
|
||||
For example, if your instance name is `octoghae`, then you will need to allow the self-hosted runner to access `octoghae.github.com`.
|
||||
|
||||
If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. For more information, see "[Managing allowed IP addresses for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list)."
|
||||
If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. For more information, see "[Managing allowed IP addresses for your organization](/organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list)."
|
||||
{% endif %}
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" %}
|
||||
@@ -143,7 +143,7 @@ pkg-containers.githubusercontent.com
|
||||
pkg-containers-az.githubusercontent.com
|
||||
```
|
||||
|
||||
If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. For more information, see "[Managing allowed IP addresses for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list)" or "[Enforcing security settings in your enterprise account](/github/setting-up-and-managing-your-enterprise/enforcing-security-settings-in-your-enterprise-account#using-github-actions-with-an-ip-allow-list)".
|
||||
If you use an IP address allow list for your {% data variables.product.prodname_dotcom %} organization or enterprise account, you must add your self-hosted runner's IP address to the allow list. For more information, see "[Managing allowed IP addresses for your organization](/organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization#using-github-actions-with-an-ip-allow-list)" or "[Enforcing security settings in your enterprise account](/github/setting-up-and-managing-your-enterprise/enforcing-security-settings-in-your-enterprise-account#using-github-actions-with-an-ip-allow-list)".
|
||||
|
||||
{% else %}
|
||||
|
||||
|
||||
@@ -22,18 +22,9 @@ featuredLinks:
|
||||
- /actions/reference/environment-variables
|
||||
- /actions/reference/encrypted-secrets
|
||||
changelog:
|
||||
- title: Environments, environment protection rules and environment secrets (beta)
|
||||
date: '2020-12-15'
|
||||
href: https://github.blog/changelog/2020-12-15-github-actions-environments-environment-protection-rules-and-environment-secrets-beta/
|
||||
- title: Workflow visualization
|
||||
date: '2020-12-08'
|
||||
href: https://github.blog/changelog/2020-12-08-github-actions-workflow-visualization/
|
||||
- title: Removing set-env and add-path commands on November 16
|
||||
date: '2020-11-09'
|
||||
href: https://github.blog/changelog/2020-10-01-github-actions-deprecating-set-env-and-add-path-commands/
|
||||
|
||||
label: 'actions'
|
||||
prefix: 'GitHub Actions: '
|
||||
product_video: https://www.youtube-nocookie.com/embed/cP0I9w2coGU
|
||||
|
||||
redirect_from:
|
||||
- /articles/automating-your-workflow-with-github-actions/
|
||||
- /articles/customizing-your-project-with-github-actions/
|
||||
|
||||
@@ -121,7 +121,7 @@ For example, you can use the audit log to track the `org.update_actions_secret`
|
||||

|
||||
|
||||
The following tables describe the {% data variables.product.prodname_actions %} events that you can find in the audit log. For more information on using the audit log, see
|
||||
"[Reviewing the audit log for your organization](/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#searching-the-audit-log)."
|
||||
"[Reviewing the audit log for your organization](/organizations/keeping-your-organization-secure/reviewing-the-audit-log-for-your-organization#searching-the-audit-log)."
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" %}
|
||||
#### Events for environments
|
||||
@@ -157,7 +157,7 @@ The following tables describe the {% data variables.product.prodname_actions %}
|
||||
| `enterprise.register_self_hosted_runner` | Triggered when a new self-hosted runner is registered. For more information, see "[Adding a self-hosted runner to an enterprise](/actions/hosting-your-own-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-an-enterprise)."
|
||||
| `enterprise.remove_self_hosted_runner` | Triggered when a self-hosted runner is removed.
|
||||
| `enterprise.runner_group_runners_updated` | Triggered when a runner group's list of members is updated. For more information, see "[Set self-hosted runners in a group for an organization](/rest/reference/actions#set-self-hosted-runners-in-a-group-for-an-organization)."
|
||||
| `enterprise.self_hosted_runner_updated` | Triggered when the runner application is updated. Can be viewed using the REST API and the UI. This event is not included when you export the audit log as JSON data or a CSV file. For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#about-self-hosted-runners)" and "[Reviewing the audit log for your organization](/github/setting-up-and-managing-organizations-and-teams/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log)."{% endif %}
|
||||
| `enterprise.self_hosted_runner_updated` | Triggered when the runner application is updated. Can be viewed using the REST API and the UI. This event is not included when you export the audit log as JSON data or a CSV file. For more information, see "[About self-hosted runners](/actions/hosting-your-own-runners/about-self-hosted-runners#about-self-hosted-runners)" and "[Reviewing the audit log for your organization](/organizations/keeping-your-organization-secure/reviewing-the-audit-log-for-your-organization#exporting-the-audit-log)."{% endif %}
|
||||
| `org.register_self_hosted_runner` | Triggered when a new self-hosted runner is registered. For more information, see "[Adding a self-hosted runner to an organization](/actions/hosting-your-own-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-an-organization)."
|
||||
| `org.remove_self_hosted_runner` | Triggered when a self-hosted runner is removed. For more information, see [Removing a runner from an organization](/actions/hosting-your-own-runners/removing-self-hosted-runners#removing-a-runner-from-an-organization).
|
||||
| `org.runner_group_runners_updated` | Triggered when a runner group's list of members is updated. For more information, see "[Set self-hosted runners in a group for an organization](/rest/reference/actions#set-self-hosted-runners-in-a-group-for-an-organization)."
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Quickstart for GitHub Actions
|
||||
intro: 'Add a {% data variables.product.prodname_actions %} workflow to an existing repository in 5 minutes or less.'
|
||||
intro: 'Try out the features of {% data variables.product.prodname_actions %} in 5 minutes or less.'
|
||||
allowTitleToDifferFromFilename: true
|
||||
redirect_from:
|
||||
- /actions/getting-started-with-github-actions/starting-with-preconfigured-workflow-templates
|
||||
@@ -19,135 +19,73 @@ topics:
|
||||
|
||||
### Introduction
|
||||
|
||||
You only need an existing {% data variables.product.prodname_dotcom %} repository to create and run a {% data variables.product.prodname_actions %} workflow. In this guide, you'll add a workflow that lints multiple coding languages using the [{% data variables.product.prodname_dotcom %} Super-Linter action](https://github.com/github/super-linter). The workflow uses Super-Linter to validate your source code every time a new commit is pushed to your repository.
|
||||
You only need a {% data variables.product.prodname_dotcom %} repository to create and run a {% data variables.product.prodname_actions %} workflow. In this guide, you'll add a workflow that demonstrates some of the essential features of {% data variables.product.prodname_actions %}.
|
||||
|
||||
The following example shows you how {% data variables.product.prodname_actions %} jobs can be automatically triggered, where they run, and how they can interact with the code in your repository.
|
||||
|
||||
### Creating your first workflow
|
||||
|
||||
1. From your repository on {% data variables.product.prodname_dotcom %}, create a new file in the `.github/workflows` directory named `superlinter.yml`. For more information, see "[Creating new files](/github/managing-files-in-a-repository/creating-new-files)."
|
||||
2. Copy the following YAML contents into the `superlinter.yml` file. **Note:** If your default branch is not `main`, update the value of `DEFAULT_BRANCH` to match your repository's default branch name.
|
||||
1. From your repository on {% data variables.product.prodname_dotcom %}, create a new file in the `.github/workflows` directory named `github-actions-demo.yml`. For more information, see "[Creating new files](/github/managing-files-in-a-repository/creating-new-files)."
|
||||
2. Copy the following YAML contents into the `github-actions-demo.yml` file:
|
||||
{% raw %}
|
||||
```yaml{:copy}
|
||||
name: Super-Linter
|
||||
|
||||
# Run this workflow every time a new commit pushed to your repository
|
||||
on: push
|
||||
|
||||
name: GitHub Actions Demo
|
||||
on: [push]
|
||||
jobs:
|
||||
# Set the job key. The key is displayed as the job name
|
||||
# when a job name is not provided
|
||||
super-lint:
|
||||
# Name the Job
|
||||
name: Lint code base
|
||||
# Set the type of machine to run on
|
||||
Explore-GitHub-Actions:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
# Checks out a copy of your repository on the ubuntu-latest machine
|
||||
- name: Checkout code
|
||||
- run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
|
||||
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
|
||||
- run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v2
|
||||
- run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
|
||||
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
|
||||
- name: List files in the repository
|
||||
run: |
|
||||
ls ${{ github.workspace }}
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
|
||||
# Runs the Super-Linter action
|
||||
- name: Run Super-Linter
|
||||
uses: github/super-linter@v3
|
||||
env:
|
||||
DEFAULT_BRANCH: main
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
```
|
||||
{% endraw %}
|
||||
3. To run your workflow, scroll to the bottom of the page and select **Create a new branch for this commit and start a pull request**. Then, to create a pull request, click **Propose new file**.
|
||||

|
||||
3. Scroll to the bottom of the page and select **Create a new branch for this commit and start a pull request**. Then, to create a pull request, click **Propose new file**.
|
||||

|
||||
|
||||
Committing the workflow file in your repository triggers the `push` event and runs your workflow.
|
||||
Committing the workflow file to a branch in your repository triggers the `push` event and runs your workflow.
|
||||
|
||||
### Viewing your workflow results
|
||||
|
||||
{% data reusables.repositories.navigate-to-repo %}
|
||||
{% data reusables.repositories.actions-tab %}
|
||||
{% data reusables.repositories.navigate-to-workflow-superlinter %}
|
||||
{% data reusables.repositories.view-run-superlinter %}
|
||||
{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" or currentVersion == "github-ae@latest" %}
|
||||
1. Under **Jobs** or in the visualization graph, click the **Lint code base** job.
|
||||

|
||||
{% else %}
|
||||
1. In the left sidebar, click the **Lint code base** job.
|
||||

|
||||
{% endif %}
|
||||
{% data reusables.repositories.view-failed-job-results-superlinter %}
|
||||
1. In the left sidebar, click the workflow you want to see.
|
||||
|
||||

|
||||
1. From the list of workflow runs, click the name of the run you want to see.
|
||||
|
||||

|
||||
1. Under **Jobs** , click the **Explore-GitHub-Actions** job.
|
||||
|
||||

|
||||
1. The log shows you how each of the steps was processed. Expand any of the steps to view its details.
|
||||
|
||||

|
||||
|
||||
For example, you can see the list of files in your repository:
|
||||

|
||||
|
||||
### More workflow templates
|
||||
|
||||
{% data reusables.actions.workflow-template-overview %}
|
||||
|
||||
### Next steps
|
||||
|
||||
The super-linter workflow you just added runs each time code is pushed to your repository to help you spot errors and inconsistencies in your code. But this is only the beginning of what you can do with {% data variables.product.prodname_actions %}. Your repository can contain multiple workflows that trigger different jobs based on different events. {% data variables.product.prodname_actions %} can help you automate nearly every aspect of your application development processes. Ready to get started? Here are some helpful resources for taking your next steps with {% data variables.product.prodname_actions %}:
|
||||
The example workflow you just added runs each time code is pushed to the branch, and shows you how {% data variables.product.prodname_actions %} can work with the contents of your repository. But this is only the beginning of what you can do with {% data variables.product.prodname_actions %}:
|
||||
|
||||
- "[Learn {% data variables.product.prodname_actions %}](/actions/learn-github-actions)" for an in-depth tutorial
|
||||
- "[Guides](/actions/guides)" for specific uses cases and examples
|
||||
- [github/super-linter](https://github.com/github/super-linter) for more details about configuring the Super-Linter action
|
||||
- Your repository can contain multiple workflows that trigger different jobs based on different events.
|
||||
- You can use a workflow to install software testing apps and have them automatically test your code on {% data variables.product.prodname_dotcom %}'s runners.
|
||||
|
||||
<div id="quickstart-treatment" hidden>
|
||||
{% data variables.product.prodname_actions %} can help you automate nearly every aspect of your application development processes. Ready to get started? Here are some helpful resources for taking your next steps with {% data variables.product.prodname_actions %}:
|
||||
|
||||
### Introduction
|
||||
|
||||
Printing "Hello, World!" is a great way to explore the basic set up and syntax of a new programming language. In this guide, you'll use GitHub Actions to print "Hello, World!" within your {% data variables.product.prodname_dotcom %} repository's workflow logs. All you need to get started is a {% data variables.product.prodname_dotcom %} repository where you feel comfortable creating and running a sample {% data variables.product.prodname_actions %} workflow. Feel free to create a new repository for this Quickstart to test this and future {% data variables.product.prodname_actions %} workflows.
|
||||
|
||||
### Creating your first workflow
|
||||
|
||||
1. From your repository on {% data variables.product.prodname_dotcom %}, create a new file in the `.github/workflows` directory named `hello-world.yml`. For more information, see "[Creating new files](/github/managing-files-in-a-repository/creating-new-files)."
|
||||
2. Copy the following YAML contents into the `hello-world.yml` file.
|
||||
{% raw %}
|
||||
```yaml{:copy}
|
||||
name: Say hello!
|
||||
|
||||
# GitHub Actions Workflows are automatically triggered by GitHub events
|
||||
on:
|
||||
# For this workflow, we're using the workflow_dispatch event which is triggered when the user clicks Run workflow in the GitHub Actions UI
|
||||
workflow_dispatch:
|
||||
# The workflow_dispatch event accepts optional inputs so you can customize the behavior of the workflow
|
||||
inputs:
|
||||
name:
|
||||
description: 'Person to greet'
|
||||
required: true
|
||||
default: 'World'
|
||||
# When the event is triggered, GitHub Actions will run the jobs indicated
|
||||
jobs:
|
||||
say_hello:
|
||||
# Uses a ubuntu-latest runner to complete the requested steps
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- run: |
|
||||
echo "Hello ${{ github.event.inputs.name }}!"
|
||||
```
|
||||
{% endraw %}
|
||||
3. Scroll to the bottom of the page and select **Create a new branch for this commit and start a pull request**. Then, to create a pull request, click **Propose new file**.
|
||||

|
||||
4. Once the pull request has been merged, you'll be ready to move on to "Trigger your workflow".
|
||||
|
||||
### Trigger your workflow
|
||||
|
||||
{% data reusables.repositories.navigate-to-repo %}
|
||||
{% data reusables.repositories.actions-tab %}
|
||||
1. In the left sidebar, click the workflow you want to run.
|
||||

|
||||
1. On the right, click the **Run workflow** drop-down and click **Run workflow**. Optionally, you can enter a custom message into the "Person to greet" input before running the workflow.
|
||||

|
||||
1. The workflow run will appear at the top of the list of "Say hello!" workflow runs. Click "Say hello!" to see the result of the workflow run.
|
||||

|
||||
1. In the left sidebar, click the "say_hello" job.
|
||||

|
||||
1. In the workflow logs, expand the 'Run echo "Hello World!"' section.
|
||||

|
||||
|
||||
### More workflow templates
|
||||
|
||||
{% data reusables.actions.workflow-template-overview %}
|
||||
|
||||
### Next steps
|
||||
|
||||
The hello-world workflow you just added is a minimal example of a manually triggered workflow. This is only the beginning of what you can do with {% data variables.product.prodname_actions %}. Your repository can contain multiple workflows that trigger different jobs based on different events. {% data variables.product.prodname_actions %} can help you automate nearly every aspect of your application development processes. Ready to get started? Here are some helpful resources for taking your next steps with {% data variables.product.prodname_actions %}:
|
||||
|
||||
- "[Learn {% data variables.product.prodname_actions %}](/actions/learn-github-actions)" for an in-depth tutorial
|
||||
- "[Guides](/actions/guides)" for specific uses cases and examples
|
||||
|
||||
</div>
|
||||
- "[Learn {% data variables.product.prodname_actions %}](/actions/learn-github-actions)" for an in-depth tutorial.
|
||||
- "[Guides](/actions/guides)" for specific uses cases and examples.
|
||||
|
||||
@@ -67,7 +67,7 @@ You can configure the artifact and log retention period for your repository, org
|
||||
For more information, see:
|
||||
|
||||
- [Configuring the retention period for {% data variables.product.prodname_actions %} for artifacts and logs in your repository](/github/administering-a-repository/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-repository)
|
||||
- [Configuring the retention period for {% data variables.product.prodname_actions %} for artifacts and logs in your organization](/github/setting-up-and-managing-organizations-and-teams/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization)
|
||||
- [Configuring the retention period for {% data variables.product.prodname_actions %} for artifacts and logs in your organization](/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization)
|
||||
- [Configuring the retention period for {% data variables.product.prodname_actions %} for artifacts and logs in your enterprise](/github/setting-up-and-managing-your-enterprise/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-enterprise-account)
|
||||
{% endif %}
|
||||
|
||||
@@ -77,7 +77,7 @@ For more information, see:
|
||||
|
||||
For more information, see:
|
||||
- "[Disabling or limiting {% data variables.product.prodname_actions %} for a repository](/github/administering-a-repository/disabling-or-limiting-github-actions-for-a-repository)"
|
||||
- "[Disabling or limiting {% data variables.product.prodname_actions %} for your organization](/github/setting-up-and-managing-organizations-and-teams/disabling-or-limiting-github-actions-for-your-organization)"{% if currentVersion == "free-pro-team@latest" %}
|
||||
- "[Disabling or limiting {% data variables.product.prodname_actions %} for your organization](/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization)"{% if currentVersion == "free-pro-team@latest" %}
|
||||
- "[Enforcing {% data variables.product.prodname_actions %} policies in your enterprise account](/github/setting-up-and-managing-your-enterprise/enforcing-github-actions-policies-in-your-enterprise-account)" for {% data variables.product.prodname_ghe_cloud %}{% endif %}
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" or currentVersion == "github-ae@latest" %}
|
||||
|
||||
@@ -21,7 +21,7 @@ After you enable SAML SSO and SCIM for {% data variables.product.prodname_ghe_ma
|
||||
* Assign the {% data variables.product.prodname_ghe_managed %} application to an IdP group on Azure AD to automatically create and grant access to user accounts on {% data variables.product.product_name %} for all members of the IdP group. In addition, the IdP group is available on {% data variables.product.prodname_ghe_managed %} for connection to a team and its parent organization.
|
||||
* Unassign the {% data variables.product.prodname_ghe_managed %} application from an IdP group to deactivate the {% data variables.product.product_name %} user accounts of all IdP users who had access only through that IdP group and remove the users from the parent organization. The IdP group will be disconnected from any teams on {% data variables.product.product_name %}.
|
||||
|
||||
For more information about managing identity and access for your enterprise on {% data variables.product.product_location %}, see "[Managing identity and access for your enterprise](/admin/authentication/managing-identity-and-access-for-your-enterprise)." For more information about synchronizing teams with IdP groups, see "[Synchronizing a team with an identity provider group](/github/setting-up-and-managing-organizations-and-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
For more information about managing identity and access for your enterprise on {% data variables.product.product_location %}, see "[Managing identity and access for your enterprise](/admin/authentication/managing-identity-and-access-for-your-enterprise)." For more information about synchronizing teams with IdP groups, see "[Synchronizing a team with an identity provider group](/organizations/organizing-members-into-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
|
||||
### Prerequisites
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ The provisioning application on your IdP communicates with {% data variables.pro
|
||||
|
||||
{% data reusables.scim.supported-idps %}
|
||||
|
||||
When you set up user provisioning with a supported IdP, you can also assign or unassign the application for {% data variables.product.product_name %} to groups of users. These groups are then available to organization owners and team maintainers in {% data variables.product.product_location %} to map to {% data variables.product.product_name %} teams. For more information, see "[Synchronizing a team with an identity provider group](/github/setting-up-and-managing-organizations-and-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
When you set up user provisioning with a supported IdP, you can also assign or unassign the application for {% data variables.product.product_name %} to groups of users. These groups are then available to organization owners and team maintainers in {% data variables.product.product_location %} to map to {% data variables.product.product_name %} teams. For more information, see "[Synchronizing a team with an identity provider group](/organizations/organizing-members-into-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
|
||||
### Prerequisites
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ By default, authorized users can access your enterprise from any IP address. Ent
|
||||
|
||||
{% data reusables.identity-and-permissions.ip-allow-lists-enable %}
|
||||
|
||||
You can also configure allowed IP addresses for an individual organization. For more information, see "[Managing allowed IP addresses for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-allowed-ip-addresses-for-your-organization)."
|
||||
You can also configure allowed IP addresses for an individual organization. For more information, see "[Managing allowed IP addresses for your organization](/organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization)."
|
||||
|
||||
By default, Azure network security group (NSG) rules leave all inbound traffic open on ports 22, 80, 443, and 25. Enterprise owners can contact {% data variables.contact.github_support %} to configure access restrictions for your instance.
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ In addition to all of the benefits of {% data variables.contact.enterprise_suppo
|
||||
|
||||
{% data reusables.support.signing-up-for-premium-support %}
|
||||
|
||||
{% data reusables.support.scope-of-support %} For more information, see "[Reaching {% data variables.product.prodname_ghe_server %} Support](/enterprise/admin/guides/enterprise-support/reaching-github-support)."
|
||||
{% data reusables.support.scope-of-support %}
|
||||
|
||||
{% data reusables.support.contacting-premium-support %}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ In addition to all of the benefits of {% data variables.contact.enterprise_suppo
|
||||
|
||||
{% data reusables.support.signing-up-for-premium-support %}
|
||||
|
||||
{% data reusables.support.scope-of-support %} For more information, see "[Reaching {% data variables.product.prodname_ghe_server %} Support](/enterprise/admin/guides/enterprise-support/reaching-github-support)."
|
||||
{% data reusables.support.scope-of-support %}
|
||||
|
||||
{% data reusables.support.contacting-premium-support %}
|
||||
|
||||
|
||||
@@ -28,8 +28,21 @@ The `actions-sync` tool can only download actions from {% data variables.product
|
||||
|
||||
### Prerequisites
|
||||
|
||||
* Before using the `actions-sync` tool, you must ensure that all destination organizations already exist on your enterprise instance. The following example demonstrates how to sync actions to an organization named `synced-actions` on an enterprise instance. For more information, see "[Creating a new organization from scratch](/github/setting-up-and-managing-organizations-and-teams/creating-a-new-organization-from-scratch)."
|
||||
* Before using the `actions-sync` tool, you must ensure that all destination organizations already exist on your enterprise instance. The following example demonstrates how to sync actions to an organization named `synced-actions` on an enterprise instance. For more information, see "[Creating a new organization from scratch](/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch)."
|
||||
* You must create a personal access token (PAT) on your enterprise instance that can create and write to repositories in the destination organizations. For more information, see "[Creating a personal access token](/github/authenticating-to-github/creating-a-personal-access-token)."
|
||||
* If you want to sync the bundled actions in the `actions` organization on {% data variables.product.product_location %}, you must be an owner of the `actions` organization.
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** By default, even site administrators are not owners of the bundled `actions` organization.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
Site administrators can use the `ghe-org-admin-promote` command in the administrative shell to promote a user to be an owner of the bundled `actions` organization. For more information, see "[Accessing the administrative shell (SSH)](/admin/configuration/accessing-the-administrative-shell-ssh)" and "[`ghe-org-admin-promote`](/admin/configuration/command-line-utilities#ghe-org-admin-promote)."
|
||||
|
||||
```shell
|
||||
ghe-org-admin-promote -u <em>USERNAME</em> -o actions
|
||||
```
|
||||
|
||||
### Example: Using the `actions-sync` tool
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Installing GitHub Enterprise Server on Hyper-V
|
||||
intro: 'To install {% data variables.product.prodname_ghe_server %} on Hyper-V, you must deploy onto a machine running Windows Server 2008 through Windows Server 2016.'
|
||||
intro: 'To install {% data variables.product.prodname_ghe_server %} on Hyper-V, you must deploy onto a machine running Windows Server 2008 through Windows Server 2019.'
|
||||
redirect_from:
|
||||
- /enterprise/admin/guides/installation/installing-github-enterprise-on-hyper-v/
|
||||
- /enterprise/admin/installation/installing-github-enterprise-server-on-hyper-v
|
||||
@@ -13,7 +13,7 @@ topics:
|
||||
### Prerequisites
|
||||
|
||||
- {% data reusables.enterprise_installation.software-license %}
|
||||
- You must have Windows Server 2008 through Windows Server 2016, which support Hyper-V.
|
||||
- You must have Windows Server 2008 through Windows Server 2019, which support Hyper-V.
|
||||
- Most actions needed to create your virtual machine (VM) may also be performed using the [Hyper-V Manager](https://docs.microsoft.com/windows-server/virtualization/hyper-v/manage/remotely-manage-hyper-v-hosts). However, we recommend using the Windows PowerShell command-line shell for initial setup. Examples using PowerShell are included below. For more information, see the Microsoft guide "[Getting Started with Windows PowerShell](https://docs.microsoft.com/powershell/scripting/getting-started/getting-started-with-windows-powershell?view=powershell-5.1)."
|
||||
|
||||
### Hardware considerations
|
||||
|
||||
@@ -29,7 +29,7 @@ During this beta, {% data variables.product.prodname_advanced_security %} featur
|
||||
|
||||
#### Manage teams from your identity provider (IdP)
|
||||
|
||||
Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with {% data variables.product.company_short %} teams. Once a team has been linked to a security group, membership will be automatically updated in {% data variables.product.product_name %} when a user is added or removed from their assigned security group. For more information, see "[Synchronizing a team with an identity provider group](/github/setting-up-and-managing-organizations-and-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
Customers using SCIM (System for Cross-domain Identity Management) can now sync security groups in Azure Active Directory with {% data variables.product.company_short %} teams. Once a team has been linked to a security group, membership will be automatically updated in {% data variables.product.product_name %} when a user is added or removed from their assigned security group. For more information, see "[Synchronizing a team with an identity provider group](/organizations/organizing-members-into-teams/synchronizing-a-team-with-an-identity-provider-group)."
|
||||
|
||||
#### IP allow lists beta
|
||||
|
||||
@@ -37,7 +37,7 @@ Enterprise and organization owners can now use IP allow lists to restrict traffi
|
||||
|
||||
This functionality is provided in addition to the ability to request network security group changes that filter traffic to the entirety of the {% data variables.product.product_name %} tenant.
|
||||
|
||||
For more information, see "[Restricting network traffic to your enterprise](/admin/configuration/restricting-network-traffic-to-your-enterprise)" and "[Managing allowed IP addresses for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-allowed-ip-addresses-for-your-organization)."
|
||||
For more information, see "[Restricting network traffic to your enterprise](/admin/configuration/restricting-network-traffic-to-your-enterprise)" and "[Managing allowed IP addresses for your organization](/organizations/keeping-your-organization-secure/managing-allowed-ip-addresses-for-your-organization)."
|
||||
|
||||
#### Pull request auto-merge
|
||||
|
||||
@@ -47,8 +47,8 @@ With auto-merge, pull requests can be set to merge automatically when all merge
|
||||
|
||||
#### Developer changes
|
||||
|
||||
- [Organization owners can now disable publication](/github/setting-up-and-managing-organizations-and-teams/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites.
|
||||
- Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites).
|
||||
- [Organization owners can now disable publication](/organizations/managing-organization-settings/managing-the-publication-of-github-pages-sites-for-your-organization) of {% data variables.product.prodname_pages %} sites from repositories in the organization. This will not unpublish existing sites.
|
||||
- Repositories that use {% data variables.product.prodname_pages %} can now [build and deploy from any branch](/pages/getting-started-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites).
|
||||
- When writing an issue or pull request, the list syntax for bullets, numbers, and tasks will now be autocompleted after you press `return` or `enter`.
|
||||
- You can now delete a directory in a repository from the repository page. When navigating to a directory, a new kebab button next to the "Add file" button gives the option to delete the directory.
|
||||
- It’s now easier and faster to [reference issues or pull requests](/github/writing-on-github/basic-writing-and-formatting-syntax#referencing-issues-and-pull-requests), with search across multiple words after the "#".
|
||||
@@ -65,7 +65,7 @@ With auto-merge, pull requests can be set to merge automatically when all merge
|
||||
|
||||
##### Default branch renaming
|
||||
|
||||
Enterprise and organization owners can now set the default branch name for new repositories. Enterprise owners can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. For more information, see "[Enforcing repository management policies in your enterprise](/admin/policies/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-on-the-default-branch-name)" and "[Managing the default branch name for repositories in your organization](/github/setting-up-and-managing-organizations-and-teams/managing-the-default-branch-name-for-repositories-in-your-organization)."
|
||||
Enterprise and organization owners can now set the default branch name for new repositories. Enterprise owners can also enforce their choice of default branch name across all organizations or allow individual organizations to choose their own. For more information, see "[Enforcing repository management policies in your enterprise](/admin/policies/enforcing-repository-management-policies-in-your-enterprise#enforcing-a-policy-on-the-default-branch-name)" and "[Managing the default branch name for repositories in your organization](/organizations/managing-organization-settings/managing-the-default-branch-name-for-repositories-in-your-organization)."
|
||||
|
||||
Existing repositories are unaffected by these settings, and their default branch name will not be changed.
|
||||
|
||||
|
||||
@@ -72,17 +72,16 @@ Mandatory messages have a variety of uses.
|
||||
- Telling users how to get help with {% data variables.product.product_location %}
|
||||
- Ensuring that all users read your terms of service for using {% data variables.product.product_location %}
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** After you configure a mandatory message for {% data variables.product.product_location %}, you cannot change or remove the message.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
|
||||
If you include Markdown checkboxes in the message, all checkboxes must be selected before the user can dismiss the message. For example, if you include your terms of service in the mandatory message, you can require that each user selects a checkbox to confirm the user has read the terms.
|
||||
|
||||
Each time a user sees a mandatory message, an audit log event is created. The event includes the version of the message that the user saw. For more information see "[Audited actions](/admin/user-management/audited-actions)."
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note:** If you change the mandatory message for {% data variables.product.product_location %}, users who have already acknowledged the message will not see the new message.
|
||||
|
||||
{% endnote %}
|
||||
|
||||
{% data reusables.enterprise-accounts.access-enterprise %}
|
||||
{% data reusables.enterprise-accounts.settings-tab %}
|
||||
{% data reusables.enterprise-accounts.messages-tab %}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Managing projects using JIRA
|
||||
intro: 'You can integrate JIRA with {% data variables.product.prodname_enterprise %} for project management.'
|
||||
title: Managing projects using Jira
|
||||
intro: 'You can integrate Jira with {% data variables.product.prodname_enterprise %} for project management.'
|
||||
redirect_from:
|
||||
- /enterprise/admin/guides/installation/project-management-using-jira/
|
||||
- /enterprise/admin/articles/project-management-using-jira/
|
||||
@@ -13,34 +13,54 @@ topics:
|
||||
- enterprise
|
||||
---
|
||||
|
||||
### Connecting JIRA to a {% data variables.product.prodname_enterprise %} organization
|
||||
### Connecting Jira to a {% data variables.product.prodname_enterprise %} organization
|
||||
|
||||
1. Sign into your {% data variables.product.prodname_enterprise %} account at http[s]://[hostname]/login.
|
||||
1. In the upper right corner of any page, click the account settings (gear) icon.
|
||||
1. In the left sidebar, click the name of your organization.
|
||||
1. In the left sidebar, click **Applications**.
|
||||
1. In the upper right corner of the **Organization applications** box, click **Register new application**.
|
||||
1. Fill in the application settings:
|
||||
- In the **Application name** field, type "JIRA".
|
||||
- In the **Homepage URL** field, type the full URL of your JIRA instance.
|
||||
- In the **Authorization callback URL** field, type the full URL of your JIRA instance.
|
||||
1. Click **Register application**.
|
||||
1. At the top of the page, note the **Client ID** and **Client Secret**. You will need these for configuring your JIRA instance.
|
||||
1. Sign into your {% data variables.product.prodname_enterprise %} account at http[s]://[hostname]/login. If already signed in, click on the {% data variables.product.prodname_dotcom %} logo in the top left corner.
|
||||
2. Click on your profile icon under the {% data variables.product.prodname_dotcom %} logo and select the organization you would like to connect with Jira.
|
||||
|
||||
### JIRA instance configuration
|
||||

|
||||
|
||||
1. On your JIRA instance, log into an account with administrative access.
|
||||
1. At the top of the page, click the settings (gear) icon.
|
||||
1. In the settings dropdown, choose **Add-ons**.
|
||||
1. In the left sidebar, under **Source control**, click **DVCS accounts**.
|
||||
1. Click **Link Bitbucket or GitHub account**.
|
||||
1. In the **Add New Account** modal, fill in your {% data variables.product.prodname_enterprise %} settings:
|
||||
- From the **Host** dropdown menu, choose **GitHub Enterprise**.
|
||||
3. Click on the **Edit _organization name_ settings** link.
|
||||
|
||||

|
||||
|
||||
4. In the left sidebar, under **Developer settings**, click **OAuth Apps**.
|
||||
|
||||

|
||||
|
||||
5. Click on the **Register new application** button.
|
||||
|
||||

|
||||
|
||||
6. Fill in the application settings:
|
||||
- In the **Application name** field, type "Jira" or any name you would like to use to identify the Jira instance.
|
||||
- In the **Homepage URL** field, type the full URL of your Jira instance.
|
||||
- In the **Authorization callback URL** field, type the full URL of your Jira instance.
|
||||
7. Click **Register application**.
|
||||
8. At the top of the page, note the **Client ID** and **Client Secret**. You will need these for configuring your Jira instance.
|
||||
|
||||
### Jira instance configuration
|
||||
|
||||
1. On your Jira instance, log into an account with administrative access.
|
||||
2. At the top of the page, click the settings (gear) icon and choose **Applications**.
|
||||
|
||||

|
||||
|
||||
3. In the left sidebar, under **Integrations**, click **DVCS accounts**.
|
||||
|
||||

|
||||
|
||||
4. Click **Link Bitbucket Cloud or {% data variables.product.prodname_dotcom %} account**.
|
||||
|
||||

|
||||
|
||||
5. In the **Add New Account** modal, fill in your {% data variables.product.prodname_enterprise %} settings:
|
||||
- From the **Host** dropdown menu, choose **{% data variables.product.prodname_enterprise %}**.
|
||||
- In the **Team or User Account** field, type the name of your {% data variables.product.prodname_enterprise %} organization or personal account.
|
||||
- In the **OAuth Key** field, type the Client ID of your {% data variables.product.prodname_enterprise %} developer application.
|
||||
- In the **OAuth Secret** field, type the Client Secret for your {% data variables.product.prodname_enterprise %} developer application.
|
||||
- If you don't want to link new repositories owned by your {% data variables.product.prodname_enterprise %} organization or personal account, unselect **Auto Link New Repositories**.
|
||||
- If you don't want to enable smart commits, unselect **Enable Smart Commits**.
|
||||
- If you don't want to link new repositories owned by your {% data variables.product.prodname_enterprise %} organization or personal account, deselect **Auto Link New Repositories**.
|
||||
- If you don't want to enable smart commits, deselect **Enable Smart Commits**.
|
||||
- Click **Add**.
|
||||
1. Review the permissions you are granting to your {% data variables.product.prodname_enterprise %} account and click **Authorize application**.
|
||||
1. If necessary, type your password to continue.
|
||||
6. Review the permissions you are granting to your {% data variables.product.prodname_enterprise %} account and click **Authorize application**.
|
||||
7. If necessary, type your password to continue.
|
||||
|
||||
@@ -45,7 +45,7 @@ When {% data variables.product.prodname_secret_scanning %} detects a set of cred
|
||||
{% data variables.product.prodname_secret_scanning_caps %} is available on all organization-owned repositories as part of {% data variables.product.prodname_GH_advanced_security %}. It is not available on user-owned repositories.
|
||||
{% endif %}
|
||||
|
||||
If you're a repository administrator or an organization owner, you can enable {% data variables.product.prodname_secret_scanning %} for {% if currentVersion == "free-pro-team@latest" %} private{% endif %} repositories that are owned by organizations. You can enable {% data variables.product.prodname_secret_scanning %} for all your repositories, or for all new repositories within your organization.{% if currentVersion == "free-pro-team@latest" %} {% data variables.product.prodname_secret_scanning_caps %} is not available for user-owned private repositories.{% endif %} For more information, see "[Managing security and analysis settings for your repository](/github/administering-a-repository/managing-security-and-analysis-settings-for-your-repository)" and "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization)."
|
||||
If you're a repository administrator or an organization owner, you can enable {% data variables.product.prodname_secret_scanning %} for {% if currentVersion == "free-pro-team@latest" %} private{% endif %} repositories that are owned by organizations. You can enable {% data variables.product.prodname_secret_scanning %} for all your repositories, or for all new repositories within your organization.{% if currentVersion == "free-pro-team@latest" %} {% data variables.product.prodname_secret_scanning_caps %} is not available for user-owned private repositories.{% endif %} For more information, see "[Managing security and analysis settings for your repository](/github/administering-a-repository/managing-security-and-analysis-settings-for-your-repository)" and "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)."
|
||||
|
||||
When you push commits to a{% if currentVersion == "free-pro-team@latest" %} private{% endif %} repository with {% data variables.product.prodname_secret_scanning %} enabled, {% data variables.product.prodname_dotcom %} scans the contents of the commits for secrets.
|
||||
|
||||
|
||||
@@ -77,4 +77,4 @@ You can also ignore individual alerts from {% data variables.product.prodname_se
|
||||
|
||||
### Further reading
|
||||
|
||||
- "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization)"
|
||||
- "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Finding security vulnerabilities and errors in your code
|
||||
shortTitle: Secure coding
|
||||
intro: 'Keep your code secure by using secret scanning to identify and fix potential security vulnerabilities and other errors in your code.'
|
||||
intro: 'Keep your code secure by using {% data variables.product.prodname_code_scanning %} to identify and fix potential security vulnerabilities and other errors in your code.'
|
||||
product: '{% data reusables.gated-features.code-scanning %}'
|
||||
redirect_from:
|
||||
- /github/managing-security-vulnerabilities/finding-security-vulnerabilities-in-your-projects-code
|
||||
|
||||
@@ -32,7 +32,7 @@ You decide how to generate {% data variables.product.prodname_code_scanning %} a
|
||||
|
||||
{% data reusables.repositories.navigate-to-repo %}
|
||||
{% data reusables.repositories.sidebar-security %}
|
||||
3. To the right of "{% data variables.product.prodname_code_scanning_capc %} alerts", click **Set up {% data variables.product.prodname_code_scanning %}**. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}If {% data variables.product.prodname_code_scanning %} is missing, you need to ask an organization owner or repository administrator to enable {% data variables.product.prodname_GH_advanced_security %}. For more information, see "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization)" or "[Managing security and analysis settings for your repository](/github/administering-a-repository/managing-security-and-analysis-settings-for-your-repository)."{% endif %}
|
||||
3. To the right of "{% data variables.product.prodname_code_scanning_capc %} alerts", click **Set up {% data variables.product.prodname_code_scanning %}**. {% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}If {% data variables.product.prodname_code_scanning %} is missing, you need to ask an organization owner or repository administrator to enable {% data variables.product.prodname_GH_advanced_security %}. For more information, see "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)" or "[Managing security and analysis settings for your repository](/github/administering-a-repository/managing-security-and-analysis-settings-for-your-repository)."{% endif %}
|
||||

|
||||
4. Under "Get started with {% data variables.product.prodname_code_scanning %}", click **Set up this workflow** on the {% data variables.product.prodname_codeql_workflow %} or on a third-party workflow.
|
||||
{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.22" %}Workflows are only displayed if they are relevant for the programming languages detected in the repository. The {% data variables.product.prodname_codeql_workflow %} is always displayed, but the "Set up this workflow" button is only enabled if {% data variables.product.prodname_codeql %} analysis supports the languages present in the repository.{% endif %}
|
||||
|
||||
@@ -17,6 +17,8 @@ You can credit people who helped discover, report, or fix a security vulnerabili
|
||||
|
||||
If someone accepts credit, the person's username appears in the "Credits" section of the security advisory. Anyone with read access to the repository can see the advisory and the people who accepted credit for it.
|
||||
|
||||
If you believe you should be credited for a security advisory, please contact the person who created the advisory and ask them to edit the advisory to include your credit. Only the creator of the advisory can credit you, so please don't contact GitHub Support about credits for security advisories.
|
||||
|
||||
### Editing a security advisory
|
||||
|
||||
{% data reusables.repositories.navigate-to-repo %}
|
||||
|
||||
@@ -11,7 +11,7 @@ versions:
|
||||
|
||||
### About the security overview
|
||||
|
||||
You can use the security overview for a high-level view of the security status of your organization or to identify problematic repositories that require intervention. At the organization-level, the security overview displays aggregate and repository-specific security information for repositories owned by your organization. At the team-level, the security overview displays repository-specific security information for repositories that the team has admin privileges for. For more information, see "[Managing team access to an organization repository](/github/setting-up-and-managing-organizations-and-teams/managing-team-access-to-an-organization-repository)."
|
||||
You can use the security overview for a high-level view of the security status of your organization or to identify problematic repositories that require intervention. At the organization-level, the security overview displays aggregate and repository-specific security information for repositories owned by your organization. At the team-level, the security overview displays repository-specific security information for repositories that the team has admin privileges for. For more information, see "[Managing team access to an organization repository](/organizations/managing-access-to-your-organizations-repositories/managing-team-access-to-an-organization-repository)."
|
||||
|
||||
The security overview indicates whether {% data variables.product.prodname_GH_advanced_security %} features are enabled for repositories owned by your organization and consolidates alerts from {% data variables.product.prodname_advanced_security %} features, including {% data variables.product.prodname_code_scanning %} alerts, {% data variables.product.prodname_dependabot_alerts %}, and {% data variables.product.prodname_secret_scanning %} alerts. For more information, see "[About securing your repository](/code-security/getting-started/about-securing-your-repository)."
|
||||
|
||||
|
||||
@@ -48,9 +48,9 @@ For a list of the ecosystems that {% data variables.product.product_name %} can
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" %}{% data variables.product.prodname_dotcom %} detects vulnerable dependencies in _public_ repositories and generates {% data variables.product.prodname_dependabot_alerts %} by default. Owners of private repositories, or people with admin access, can enable {% data variables.product.prodname_dependabot_alerts %} by enabling the dependency graph and {% data variables.product.prodname_dependabot_alerts %} for their repositories.
|
||||
|
||||
You can also enable or disable {% data variables.product.prodname_dependabot_alerts %} for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/github/setting-up-and-managing-your-github-user-account/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization)."
|
||||
You can also enable or disable {% data variables.product.prodname_dependabot_alerts %} for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/github/setting-up-and-managing-your-github-user-account/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)."
|
||||
|
||||
For information about permission requirements for actions related to {% data variables.product.prodname_dependabot_alerts %}, see "[Repository permission levels for an organization](/github/setting-up-and-managing-organizations-and-teams/repository-permission-levels-for-an-organization#permission-requirements-for-security-features)."
|
||||
For information about permission requirements for actions related to {% data variables.product.prodname_dependabot_alerts %}, see "[Repository permission levels for an organization](/organizations/managing-access-to-your-organizations-repositories/repository-permission-levels-for-an-organization#permission-requirements-for-security-features)."
|
||||
|
||||
{% data variables.product.product_name %} starts generating the dependency graph immediately and generates alerts for any vulnerable dependencies as soon as they are identified. The graph is usually populated within minutes but this may take longer for repositories with many dependencies. For more information, see "[Managing data use settings for your private repository](/github/understanding-how-github-uses-and-protects-your-data/managing-data-use-settings-for-your-private-repository)."
|
||||
{% endif %}
|
||||
|
||||
@@ -89,6 +89,6 @@ The recommended formats explicitly define which versions are used for all direct
|
||||
|
||||
- "[Dependency graph](https://en.wikipedia.org/wiki/Dependency_graph)" on Wikipedia
|
||||
- "[Exploring the dependencies of a repository](/github/visualizing-repository-data-with-graphs/exploring-the-dependencies-of-a-repository)"{% if currentVersion == "free-pro-team@latest" %}
|
||||
- "[Viewing insights for your organization](/github/setting-up-and-managing-organizations-and-teams/viewing-insights-for-your-organization)"
|
||||
- "[Viewing insights for your organization](/organizations/collaborating-with-groups-in-organizations/viewing-insights-for-your-organization)"
|
||||
- "[Viewing and updating vulnerable dependencies in your repository](/github/managing-security-vulnerabilities/viewing-and-updating-vulnerable-dependencies-in-your-repository)"
|
||||
- "[Troubleshooting the detection of vulnerable dependencies](/github/managing-security-vulnerabilities/troubleshooting-the-detection-of-vulnerable-dependencies)"{% endif %}
|
||||
|
||||
@@ -321,7 +321,7 @@ updates:
|
||||
|
||||
{% note %}
|
||||
|
||||
**Note**: {% data variables.product.prodname_dependabot %} can only run version updates on manifest or lock files if it can access all of the dependencies in the file, even if you add inaccessible dependencies to the `ignore` option of your configuration file. For more information, see "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization#allowing-dependabot-to-access-private-dependencies)" and "[Troubleshooting {% data variables.product.prodname_dependabot %} errors](/github/managing-security-vulnerabilities/troubleshooting-dependabot-errors#dependabot-cant-resolve-your-dependency-files)."
|
||||
**Note**: {% data variables.product.prodname_dependabot %} can only run version updates on manifest or lock files if it can access all of the dependencies in the file, even if you add inaccessible dependencies to the `ignore` option of your configuration file. For more information, see "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization#allowing-dependabot-to-access-private-dependencies)" and "[Troubleshooting {% data variables.product.prodname_dependabot %} errors](/github/managing-security-vulnerabilities/troubleshooting-dependabot-errors#dependabot-cant-resolve-your-dependency-files)."
|
||||
|
||||
|
||||
{% endnote %}
|
||||
|
||||
@@ -48,7 +48,7 @@ If security updates are not enabled for your repository and you don't know why,
|
||||
|
||||
You can enable or disable {% data variables.product.prodname_dependabot_security_updates %} for an individual repository (see below).
|
||||
|
||||
You can also enable or disable {% data variables.product.prodname_dependabot_security_updates %} for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/github/setting-up-and-managing-your-github-user-account/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization)."
|
||||
You can also enable or disable {% data variables.product.prodname_dependabot_security_updates %} for all repositories owned by your user account or organization. For more information, see "[Managing security and analysis settings for your user account](/github/setting-up-and-managing-your-github-user-account/managing-security-and-analysis-settings-for-your-user-account)" or "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization)."
|
||||
|
||||
{% data variables.product.prodname_dependabot_security_updates %} require specific repository settings. For more information, see "[Supported repositories](#supported-repositories)."
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ topics:
|
||||
{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@2.21" %}When {% data variables.product.prodname_dependabot %} detects vulnerable dependencies in your repositories, we generate a {% data variables.product.prodname_dependabot %} alert and display it on the Security tab for the repository. {% data variables.product.product_name %} notifies the maintainers of affected repositories about the new alert according to their notification preferences.{% else %}When {% data variables.product.product_name %} detects vulnerable dependencies in your repositories, it sends security alerts.{% endif %}{% if currentVersion == "free-pro-team@latest" %} {% data variables.product.prodname_dependabot %} is enabled by default on all public repositories. For {% data variables.product.prodname_dependabot_alerts %}, by default, you will receive {% data variables.product.prodname_dependabot_alerts %} by email, grouped by the specific vulnerability.
|
||||
{% endif %}
|
||||
|
||||
{% if currentVersion == "free-pro-team@latest" %}If you're an organization owner, you can enable or disable {% data variables.product.prodname_dependabot_alerts %} for all repositories in your organization with one click. You can also set whether the detection of vulnerable dependencies will be enabled or disabled for newly-created repositories. For more information, see "[Managing security and analysis settings for your organization](/github/setting-up-and-managing-organizations-and-teams/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-new-repositories-when-they-are-added)."
|
||||
{% if currentVersion == "free-pro-team@latest" %}If you're an organization owner, you can enable or disable {% data variables.product.prodname_dependabot_alerts %} for all repositories in your organization with one click. You can also set whether the detection of vulnerable dependencies will be enabled or disabled for newly-created repositories. For more information, see "[Managing security and analysis settings for your organization](/organizations/keeping-your-organization-secure/managing-security-and-analysis-settings-for-your-organization#enabling-or-disabling-a-feature-for-all-new-repositories-when-they-are-added)."
|
||||
{% endif %}
|
||||
|
||||
{% if enterpriseServerVersions contains currentVersion and currentVersion == "enterprise-server@2.21" %}
|
||||
|
||||