Merge branch 'main' into desktop-fork-flow

This commit is contained in:
Chiedo John 2021-02-01 10:09:27 -05:00 коммит произвёл GitHub
Родитель 506a2c41c6 e12b83297c
Коммит fcb8c99be4
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
325 изменённых файлов: 310273 добавлений и 5621 удалений

4
.github/allowed-actions.js поставляемый
Просмотреть файл

@ -8,11 +8,11 @@ module.exports = [
'actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f', //actions/checkout@v2.3.4
'actions/github-script@626af12fe9a53dc2972b48385e7fe7dec79145c9', //actions/script@v3.0.0
'actions/labeler@5f867a63be70efff62b767459b009290364495eb', //actions/labeler@v2.2.0
'actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d', //actions/setup-node@v1.4.4
'actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e', //actions/setup-node@v2.1.4
'actions/setup-ruby@5f29a1cd8dfebf420691c4c9a0e832e2fae5a526', //actions/setup-ruby@v1.1.2
'actions/stale@af4072615903a8b031f986d25b1ae3bf45ec44d4', //actions/stale@v3.0.13
'crowdin/github-action@fd9429dd63d6c0f8a8cb4b93ad8076990bd6e688',
'crykn/copy_folder_to_another_repo_action@abc264e1c16eb3d7b1f7763bfdb0e1699ad43120',
'crykn/copy_folder_to_another_repo_action@0282e8b9fef06de92ddcae9fe6cb44df6226646c',
'cschleiden/actions-linter@43fd4e08e52ed40c0e2782dc2425694388851576',
'dawidd6/action-delete-branch@47743101a121ad657031e6704086271ca81b1911',
'docker://chinthakagodawita/autoupdate-action:v1',

62
.github/workflows/check-for-spammy-issues.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,62 @@
name: Check for Spammy Issues
on:
issues:
types: [opened]
jobs:
spammy-title-check:
name: Remove issues with spammy titles
if: github.repository == 'github/docs'
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 issue = context.payload.issue
const owner = 'github'
const repo = 'docs'
const titleWordCount = issue.title.trim().split(' ').length
const titleWordCountMin = 2
try {
await github.teams.getMembershipForUserInOrg({
org: 'github',
team_slug: 'employees',
username: context.payload.sender.login,
});
// Do not perform this workflow with GitHub employees. This return
// statement only gets hit if the user is a GitHub employee
return
} catch(err) {
// An error will be thrown if the user is not a GitHub employee
// If a user is not a GitHub employee, we should check to see if title has at least the minimum required number of words in it and if it does, we can exit the workflow
if(titleWordCount > titleWordCountMin) {
return
}
}
//
// Assuming the user is not a GitHub employee and the issue title
// has the minimum number of words required, proceed.
//
// Close the issue and add the invalid label
await github.issues.update({
owner: owner,
repo: repo,
issue_number: issue.number,
labels: ['invalid'],
state: 'closed'
});
// Comment on the issue
await github.issues.createComment({
owner: owner,
repo: repo,
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)!"
});

Просмотреть файл

@ -11,7 +11,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
- uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
- name: cache node modules

2
.github/workflows/js-lint.yml поставляемый
Просмотреть файл

@ -17,7 +17,7 @@ jobs:
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x

57
.github/workflows/link-check-dotcom.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,57 @@
name: 'Link Checker: Dotcom'
on:
workflow_dispatch:
push:
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
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
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
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.ref }}
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: Build
run: npm run build
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: 'Link check: Dotcom'
env:
DOCS_VERSION: 'dotcom'
run: npm run link-check

57
.github/workflows/link-check-ghae.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,57 @@
name: 'Link Checker: GitHub AE'
on:
workflow_dispatch:
push:
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
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
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
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.ref }}
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: Build
run: npm run build
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: 'Link check: GitHub AE'
env:
DOCS_VERSION: 'github-ae'
run: npm run link-check

57
.github/workflows/link-check-ghes.yml поставляемый Normal file
Просмотреть файл

@ -0,0 +1,57 @@
name: 'Link Checker: Enterprise Server'
on:
workflow_dispatch:
push:
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
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
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
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.ref }}
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: Build
run: npm run build
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: 'Link check: Enterprise Server'
env:
DOCS_VERSION: 'enterprise-server'
run: npm run link-check

5
.github/workflows/site-policy-sync.yml поставляемый
Просмотреть файл

@ -29,13 +29,14 @@ jobs:
# Pushes to other repo
- name: Push folder to another repository
uses: crykn/copy_folder_to_another_repo_action@abc264e1c16eb3d7b1f7763bfdb0e1699ad43120
uses: crykn/copy_folder_to_another_repo_action@0282e8b9fef06de92ddcae9fe6cb44df6226646c
env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_SITEPOLICY }}
with:
source_folder: 'content/github/site-policy'
destination_repo: 'github/site-policy'
destination_branch: 'repo-sync'
destination_branch: 'main'
destination_branch_create: 'repo-sync'
destination_folder: 'Policies'
user_email: 'pcihon@users.noreply.github.com'
user_name: 'pcihon'

Просмотреть файл

@ -14,7 +14,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
- uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
- name: cache node modules

Просмотреть файл

@ -20,7 +20,7 @@ jobs:
steps:
- name: checkout
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
- uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
- name: cache node modules

8
.github/workflows/test-translations.yml поставляемый
Просмотреть файл

@ -3,6 +3,7 @@
name: Node.js Tests - Translations
on:
workflow_dispatch:
schedule:
- cron: '10 20 * * *' # once a day at 20:10 UTC / 12:10 PST
@ -17,7 +18,7 @@ jobs:
ref: translations # check out the 'translations' branch
- name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
@ -55,7 +56,7 @@ jobs:
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
@ -75,6 +76,9 @@ jobs:
- name: Install dependencies
run: npm ci
- name: Run build script
run: npm run build
- name: Run tests
run: npx jest tests/${{ matrix.test-group }}/
env:

4
.github/workflows/test-windows.yml поставляемый
Просмотреть файл

@ -15,13 +15,13 @@ jobs:
strategy:
fail-fast: false
matrix:
test-group: [content, meta, rendering, routing, unit, links-and-images]
test-group: [content, meta, rendering, routing, unit]
steps:
- name: Check out repo
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x

17
.github/workflows/test.yml поставляемый
Просмотреть файл

@ -31,13 +31,14 @@ jobs:
test:
needs: see_if_should_skip
runs-on: ubuntu-latest
# 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'] }}
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
test-group:
[content, meta, rendering, routing, unit, links-and-images, graphql]
test-group: [content, meta, rendering, routing, unit, graphql]
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
@ -50,7 +51,7 @@ jobs:
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}
name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x
@ -73,15 +74,15 @@ jobs:
name: Install dependencies
run: npm ci
- name: Clone early access
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository == 'github/docs-internal' }}
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && 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.ref }}
- name: Run build script
if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository != 'github/docs-internal' }}
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && github.repository != 'github/docs-internal' }}
name: Run build script
run: npm run build
- if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }}

Просмотреть файл

@ -78,25 +78,23 @@ jobs:
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const changedFiles = ${{steps.filter.outputs.notAllowed_files}}
const restFiles = ${{steps.filter.outputs.openapi_files}}
const translationFiles = ${{steps.filter.outputs.translation_files}}
const markdownFiles = changedFiles.map(file => `- \`${file}\`\n`).join('')
constFilesArr = [
'translations/**',
'lib/rest/static/**',
'.github/workflows/**',
'.github/CODEOWNERS',
'translations/**',
'assets/fonts/**',
'data/graphql/**',
'lib/graphql/**',
'lib/redirects/**',
'lib/rest/**',
'lib/webhooks/**'
]
let reviewMessage = `👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions.\n${markdownFiles}\n\nYou'll need to revert all of these ☝️ files using [GitHub Desktop](https://docs.github.com/en/free-pro-team@latest/desktop/contributing-and-collaborating-using-github-desktop/reverting-a-commit) or \`git checkout origin/main <file name>\`. Once you get those files reverted, we can continue with the review process. :octocat:`
const badFiles = badFilesArr.join('\n')
if (restFiles.length > 0) {
reviewMessage += "\n\nIt looks like you've modified the OpenAPI schema (`lib/rest/static/**`). While we aren't accepting changes to the schema directly, you can open an issue for any updates to the REST API docs. Head on over to the [`github/rest-api-description`](https://github.com/github/rest-api-description/issues/new?assignees=&labels=Inaccuracy&template=schema-inaccuracy.md&title=%5BSchema+Inaccuracy%5D+%3CDescribe+Problem%3E) repository to open an issue. ⚡"
}
if (translationFiles.length > 0) {
await github.issues.addLabels({
...context.repo,
issue_number: context.payload.number,
labels: ['localization']
})
reviewMessage += "\n\nIt looks like you've modified translated content. Unfortunately, we are not able to accept pull requests for translated content. Our translation process involves an integration with an external service at crowdin.com, where all translation activity happens. We hope to eventually open up the translation process to the open source community, but we're not there yet. See https://github.com/github/docs/blob/main/CONTRIBUTING.md#earth_asia-translations for more details."
}
let reviewMessage = `👋 Hey there spelunker. It looks like you've modified some files that we can't accept as contributions. The complete list of files we can't accept are:\n${badFiles}\n\nYou'll need to revert all of the files you changed in that list using [GitHub Desktop](https://docs.github.com/en/free-pro-team@latest/desktop/contributing-and-collaborating-using-github-desktop/reverting-a-commit) or \`git checkout origin/main <file name>\`. Once you get those files reverted, we can continue with the review process. :octocat:`
await github.pulls.createReview({
...context.repo,

2
.github/workflows/yml-lint.yml поставляемый
Просмотреть файл

@ -17,7 +17,7 @@ jobs:
uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f
- name: Setup node
uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d
uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
with:
node-version: 14.x

Двоичные данные
assets/images/help/desktop/delete-tag-multiple.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 69 KiB

Двоичные данные
assets/images/help/desktop/select-delete-tag.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 67 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 14 KiB

После

Ширина:  |  Высота:  |  Размер: 11 KiB

Двоичные данные
assets/images/help/settings/email_services_approved_header.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 16 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 13 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 11 KiB

Двоичные данные
assets/images/help/settings/setup_notifications_settings.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 8.5 KiB

Двоичные данные
assets/images/lynn_hashimoto.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.6 KiB

Двоичные данные
assets/images/marketplace/accept-marketplace-terms.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 112 KiB

Двоичные данные
assets/images/marketplace/apps-with-verified-creator-badges.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

Двоичные данные
assets/images/marketplace/apps-with-verified-publisher-badge.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 25 KiB

Двоичные данные
assets/images/marketplace/developer-settings-in-org-settings.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 6.6 KiB

Двоичные данные
assets/images/marketplace/edit-marketplace-listing-overview.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 31 KiB

Двоичный файл не отображается.

До

Ширина:  |  Высота:  |  Размер: 25 KiB

После

Ширина:  |  Высота:  |  Размер: 96 KiB

Двоичные данные
assets/images/marketplace/paid-plan-checklist.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 63 KiB

Двоичные данные
assets/images/marketplace/publish-this-plan-button.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 24 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 90 KiB

Двоичные данные
assets/images/marketplace/publisher-verification-checklist.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 114 KiB

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 7.9 KiB

Двоичные данные
assets/images/marketplace/publisher-verification.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 161 KiB

Двоичные данные
assets/images/marketplace/request-verification-process-starter.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 29 KiB

Двоичные данные
assets/images/marketplace/verified-creator-badge-for-actions.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 22 KiB

Двоичные данные
assets/images/site/labtocat.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 39 KiB

Двоичные данные
assets/images/site/waldocat.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 36 KiB

Просмотреть файл

@ -21,6 +21,10 @@ See the [contributing docs](/CONTRIBUTING.md) for general information about work
- [`miniTocMaxHeadingLevel`](#minitocmaxheadinglevel)
- [`allowTitleToDifferFromFilename`](#allowtitletodifferfromfilename)
- [`defaultPlatform`](#defaultplatform)
- [`learningTracks`](#learningTracks)
- [`includeGuides`](#includeGuides)
- [`type`](#type)
- [`topics`](#topics)
- [Escaping single quotes](#escaping-single-quotes)
- [Autogenerated mini TOCs](#autogenerated-mini-tocs)
- [Versioning](#versioning)
@ -29,6 +33,7 @@ See the [contributing docs](/CONTRIBUTING.md) for general information about work
- [Whitespace control](#whitespace-control)
- [Links and image paths](#links-and-image-paths)
- [Preventing transformations](#preventing-transformations)
- [Creating new sublanding pages](#creating-new-sublanding-pages)
## Frontmatter
@ -186,6 +191,39 @@ Example:
defaultPlatform: linux
```
### `learningTracks`
- Purpose: Render a list of learning tracks on a product's sub-landing page.
- type: `String`. This should reference learning tracks' names defined in [`data/learning-tracks/*.yml`](../data/learning-tracks/README.md).
- Optional
**Note: the first learning track is by-default the featured track.*
### `includeGuides`
- Purpose: Render a list of articles, filterable by `type` and `topics`. Only applicable when used with `layout: product-sublanding`.
- Type: `Array`
- Optional.
Example:
```yml
includeGuides:
- /actions/guides/about-continuous-integration
- /actions/guides/setting-up-continuous-integration-using-workflow-templates
- /actions/guides/building-and-testing-nodejs
- /actions/guides/building-and-testing-powershell
```
### `type`
- Purpose: Indicate the type of article.
- Type: `String`, one of the `overview`, `quick_start`, `tutorial`, `how_to`, `reference`.
- Optional.
### `topics`
- Purpose: Indicate the topics covered by the article.
- Type: `String`
- Optional.
### Escaping single quotes
If you see two single quotes in a row (`''`) in YML frontmatter where you might expect to see one (`'`), this is the YML-preferred way to escape a single quote. From [the YAML spec](https://yaml.org/spec/history/2001-12-10.html):
@ -274,3 +312,15 @@ Sometimes you want to link to a Dotcom-only article in Enterprise content and yo
```
Sometimes the canonical home of content moves outside the docs site. None of the links included in [`lib/redirects/external-sites.json`](/lib/redirects/external-sites.json) get rewritten. See [`contributing/redirects.md`](/contributing/redirects.md) for more info about this type of redirect.
### Creating new sublanding pages
To create a sublanding page (e.g. [Actions' Guide page](https://docs.github.com/en/actions/guides)), create or modify an existing markdown file with these specific frontmatter values:
1. Use the sublanding page template by referencing it `layout: product-sublanding`
2. (optional) Include the learning tracks in [`learningTracks`](#learningTracks)
3. (optional) Define which articles to include with [`includeGuides`](#includeGuides).
If using learning tracks, they need to be defined in [`data/learning-tracks/*.yml`](../data/learning-tracks/README.md).
If using `includeGuides`, make sure each of the articles in this list has [`topics`](#topics) and [`type`](#type) in its frontmatter.

Просмотреть файл

@ -11,6 +11,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Action development'
- 'Fundamentals'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -6,6 +6,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Action development'
---
{% data reusables.actions.enterprise-beta %}
@ -32,7 +34,7 @@ Before you begin, you'll create a {% data variables.product.product_name %} repo
```
2. In the `hello-world-composite-run-steps-action` repository, create a new file called `goodbye.sh`, and add the following example code:
```bash
echo "Goodbye"
```
@ -65,12 +67,12 @@ Before you begin, you'll create a {% data variables.product.product_name %} repo
required: true
default: 'World'
outputs:
random-number:
random-number:
description: "Random number"
value: ${{ steps.random-number-generator.outputs.random-id }}
runs:
using: "composite"
steps:
steps:
- run: echo Hello ${{ inputs.who-to-greet }}.
shell: bash
- id: random-number-generator
@ -82,7 +84,7 @@ Before you begin, you'll create a {% data variables.product.product_name %} repo
{% endraw %}
This file defines the `who-to-greet` input, maps the random generated number to the `random-number` output variable, and runs the `goodbye.sh` script. It also tells the runner how to execute the composite run steps action.
For more information about managing outputs, see "[`outputs` for a composite run steps](/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-composite-run-steps-actions)".
For more information about managing outputs, see "[`outputs` for a composite run steps](/actions/creating-actions/metadata-syntax-for-github-actions#outputs-for-composite-run-steps-actions)".
For more information about how to use `github.action_path`, see "[`github context`](/actions/reference/context-and-expression-syntax-for-github-actions#github-context)".
@ -122,7 +124,7 @@ jobs:
uses: actions/hello-world-composite-run-steps-action@v1
with:
who-to-greet: 'Mona the Octocat'
- run: echo random-number ${{ steps.foo.outputs.random-number }}
- run: echo random-number ${{ steps.foo.outputs.random-number }}
shell: bash
```
{% endraw %}

Просмотреть файл

@ -11,6 +11,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Action development'
- 'Docker'
---
{% data reusables.actions.enterprise-beta %}
@ -93,7 +96,7 @@ This metadata defines one `who-to-greet` input and one `time` output parameter.
You can choose any base Docker image and, therefore, any language for your action. The following shell script example uses the `who-to-greet` input variable to print "Hello [who-to-greet]" in the log file.
Next, the script gets the current time and sets it as an output variable that actions running later in a job can use. In order for {% data variables.product.prodname_dotcom %} to recognize output variables, you must use a workflow command in a specific syntax: `echo "::set-output name=<output name>::<value>"`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/reference/workflow-commands-for-github-actions#setting-an-output-parameter)."
Next, the script gets the current time and sets it as an output variable that actions running later in a job can use. In order for {% data variables.product.prodname_dotcom %} to recognize output variables, you must use a workflow command in a specific syntax: `echo "::set-output name=<output name>::<value>"`. For more information, see "[Workflow commands for {% data variables.product.prodname_actions %}](/actions/reference/workflow-commands-for-github-actions#setting-an-output-parameter)."
1. Create a new `entrypoint.sh` file in the `hello-world-docker-action` directory.
@ -102,7 +105,7 @@ Next, the script gets the current time and sets it as an output variable that ac
**entrypoint.sh**
```shell{:copy}
#!/bin/sh -l
echo "Hello $1"
time=$(date)
echo "::set-output name=time::$time"

Просмотреть файл

@ -11,6 +11,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Action development'
- 'JavaScript'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -11,11 +11,14 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'CI'
- 'CD'
---
{% data reusables.actions.enterprise-beta %}
{% data reusables.actions.enterprise-github-hosted-runners %}
### About continuous integration
Continuous integration (CI) is a software practice that requires frequently committing code to a shared repository. Committing code more often detects errors sooner and reduces the amount of code a developer needs to debug when finding the source of an error. Frequent code updates also make it easier to merge changes from different members of a software development team. This is great for developers, who can spend more time writing code and less time debugging errors or resolving merge conflicts.

Просмотреть файл

@ -9,6 +9,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Packaging'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -9,6 +9,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Containers'
- 'Docker'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -8,6 +8,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Java'
- 'Ant'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -8,6 +8,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Java'
- 'Gradle'
---
{% data reusables.actions.enterprise-beta %}
@ -113,6 +117,12 @@ steps:
${{ runner.os }}-gradle-
- name: Build with Gradle
run: ./gradlew build
- name: Cleanup Gradle Cache
# Remove some files from the Gradle cache, so they aren't cached by GitHub Actions.
# Restoring these files from a GitHub Actions cache might cause problems for future builds.
run: |
rm -f ~/.gradle/caches/modules-2/modules-2.lock
rm -f ~/.gradle/caches/modules-2/gc.properties
```
{% endraw %}

Просмотреть файл

@ -8,6 +8,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Java'
- 'Maven'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -58,7 +58,7 @@ jobs:
To use a preinstalled version of the .NET Core SDK on a {% data variables.product.prodname_dotcom %}-hosted runner, use the `setup-dotnet` action. This action finds a specific version of .NET from the tools cache on each runner, and adds the necessary binaries to `PATH`. These changes will persist for the remainder of the job.
The `setup-dotnet` action is the recommended way of using .NET with {% data variables.product.prodname_actions %}, because it ensures consistent behavior across different runners and different versions of .NET. If you are using a self-hosted runner, you must install .NET and add it to `PATH`. For more information, see the [`setup-dotnet`](https://github.com/marketplace/actions/setup-dotnet).
The `setup-dotnet` action is the recommended way of using .NET with {% data variables.product.prodname_actions %}, because it ensures consistent behavior across different runners and different versions of .NET. If you are using a self-hosted runner, you must install .NET and add it to `PATH`. For more information, see the [`setup-dotnet`](https://github.com/marketplace/actions/setup-net-core-sdk) action.
#### Using multiple .NET versions

Просмотреть файл

@ -9,6 +9,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Node'
- 'JavaScript'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -8,6 +8,9 @@ versions:
authors:
- potatoqualitee
type: 'tutorial'
topics:
- 'CI'
- 'Powershell'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -8,6 +8,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Python'
---
{% data reusables.actions.enterprise-beta %}
@ -365,26 +368,26 @@ jobs:
matrix:
python-version: [2.7, 3.5, 3.6, 3.7, 3.8]
steps:
- uses: actions/checkout@v2
- name: Setup Python # Set Python version
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
# Install pip and pytest
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest
- name: Test with pytest
run: pytest tests.py --doctest-modules --junitxml=junit/test-results-${{ matrix.python-version }}.xml
- name: Upload pytest test results
uses: actions/upload-artifact@v2
with:
name: pytest-results-${{ matrix.python-version }}
path: junit/test-results-${{ matrix.python-version }}.xml
# Use always() to always run this step to publish test results when there are test failures
if: ${{ always() }}
steps:
- uses: actions/checkout@v2
- name: Setup Python # Set Python version
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
# Install pip and pytest
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest
- name: Test with pytest
run: pytest tests.py --doctest-modules --junitxml=junit/test-results-${{ matrix.python-version }}.xml
- name: Upload pytest test results
uses: actions/upload-artifact@v2
with:
name: pytest-results-${{ matrix.python-version }}
path: junit/test-results-${{ matrix.python-version }}.xml
# Use always() to always run this step to publish test results when there are test failures
if: ${{ always() }}
```
{% endraw %}

Просмотреть файл

@ -6,6 +6,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CI'
- 'Ruby'
---
{% data reusables.actions.enterprise-beta %}
@ -46,10 +49,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Ruby
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
# change this to (see https://github.com/ruby/setup-ruby#versioning):
# uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6
- name: Install dependencies
@ -63,7 +63,7 @@ jobs:
The easiest way to specify a Ruby version is by using the `ruby/setup-ruby` action provided by the Ruby organization on GitHub. The action adds any supported Ruby version to `PATH` for each job run in a workflow. For more information see, the [`ruby/setup-ruby`](https://github.com/ruby/setup-ruby).
Using either Ruby's `ruby/setup-ruby` action or GitHub's `actions/setup-ruby` action is the recommended way of using Ruby with GitHub Actions because it ensures consistent behavior across different runners and different versions of Ruby.
Using Ruby's `ruby/setup-ruby` action is the recommended way of using Ruby with GitHub Actions because it ensures consistent behavior across different runners and different versions of Ruby.
The `setup-ruby` action takes a Ruby version as an input and configures that version on the runner.
@ -83,7 +83,7 @@ Alternatively, you can check a `.ruby-version` file into the root of your repos
### Testing with multiple versions of Ruby
You can add a matrix strategy to run your workflow with more than one version of Ruby. For example, you can test your code against the latest patch releases of versions 2.7, 2.6, and 2.5. The 'x' is a wildcard character that matches the latest patch release available for a version.
You can add a matrix strategy to run your workflow with more than one version of Ruby. For example, you can test your code against the latest patch releases of versions 2.7, 2.6, and 2.5. The 'x' is a wildcard character that matches the latest patch release available for a version.
{% raw %}
```yaml
@ -119,10 +119,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Set up Ruby ${{ matrix.ruby-version }}
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
# change this to (see https://github.com/ruby/setup-ruby#versioning):
# uses: ruby/setup-ruby@v1
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
- name: Install dependencies
@ -316,4 +313,3 @@ jobs:
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
```
{% endraw %}

Просмотреть файл

@ -10,6 +10,8 @@ redirect_from:
versions:
free-pro-team: '*'
type: 'tutorial'
topics:
- 'Workflows'
---
### About caching workflow dependencies

Просмотреть файл

@ -10,6 +10,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Containers'
- 'Docker'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -10,6 +10,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Containers'
- 'Docker'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -6,6 +6,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CD'
- 'Containers'
- 'Amazon ECS'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -6,6 +6,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CD'
- 'Containers'
- 'Azure App Service'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -6,6 +6,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CD'
- 'Containers'
- 'Google Kubernetes Engine'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -21,9 +21,47 @@ learningTracks:
- getting_started
- continuous_integration
- continuous_deployment
- deploy_to_the_cloud
- hosting_your_own_runners
- create_actions
layout: product-sublanding
includeGuides:
- /actions/quickstart
- /actions/learn-github-actions/introduction-to-github-actions
- /actions/creating-actions/creating-a-docker-container-action
- /actions/guides/setting-up-continuous-integration-using-workflow-templates
- /actions/guides/building-and-testing-python
- /actions/guides/building-and-testing-nodejs
- /actions/guides/about-packaging-with-github-actions
- /actions/guides/publishing-docker-images
- /actions/guides/caching-dependencies-to-speed-up-workflows
- /actions/guides/about-continuous-integration
- /actions/guides/building-and-testing-powershell
- /actions/guides/building-and-testing-ruby
- /actions/guides/building-and-testing-java-with-maven
- /actions/guides/building-and-testing-java-with-gradle
- /actions/guides/building-and-testing-java-with-ant
- /actions/guides/publishing-nodejs-packages
- /actions/guides/publishing-java-packages-with-maven
- /actions/guides/publishing-java-packages-with-gradle
- /actions/guides/storing-workflow-data-as-artifacts
- /actions/guides/about-service-containers
- /actions/guides/creating-redis-service-containers
- /actions/guides/creating-postgresql-service-containers
- /actions/guides/deploying-to-amazon-elastic-container-service
- /actions/guides/deploying-to-azure-app-service
- /actions/guides/deploying-to-google-kubernetes-engine
- /actions/learn-github-actions/essential-features-of-github-actions
- /actions/learn-github-actions/security-hardening-for-github-actions
- /actions/creating-actions/about-actions
- /actions/creating-actions/creating-a-javascript-action
- /actions/creating-actions/creating-a-composite-run-steps-action
- /actions/learn-github-actions/migrating-from-azure-pipelines-to-github-actions
- /actions/learn-github-actions/migrating-from-circleci-to-github-actions
- /actions/learn-github-actions/migrating-from-gitlab-cicd-to-github-actions
- /actions/learn-github-actions/migrating-from-jenkins-to-github-actions
- /actions/learn-github-actions/migrating-from-travis-ci-to-github-actions
---
<!-- {% link_in_list /about-continuous-integration %} -->
<!-- {% link_in_list /setting-up-continuous-integration-using-workflow-templates %} -->

Просмотреть файл

@ -8,6 +8,10 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Packaging'
- 'Publishing'
- 'Docker'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -8,6 +8,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Packaging'
- 'Publishing'
- 'Java'
- 'Gradle'
---
{% data reusables.actions.enterprise-beta %}
@ -148,7 +153,7 @@ jobs:
{% data reusables.github-actions.gradle-workflow-steps %}
1. Runs the `gradle publish` command to publish to {% data variables.product.prodname_registry %}. The `GITHUB_TOKEN` environment variable will be set with the content of the `GITHUB_TOKEN` secret.
For more information about using secrets in your workflow, see "[Creating and using encrypted secrets](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)."
### Publishing packages to the Maven Central Repository and {% data variables.product.prodname_registry %}

Просмотреть файл

@ -8,6 +8,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Packaging'
- 'Publishing'
- 'Java'
- 'Maven'
---
{% data reusables.actions.enterprise-beta %}
@ -155,7 +160,7 @@ This workflow performs the following steps:
1. Checks out a copy of project's repository.
1. Sets up the Java JDK, and also automatically configures the Maven _settings.xml_ file to add authentication for the `github` Maven repository to use the `GITHUB_TOKEN` environment variable.
1. {% data reusables.github-actions.publish-to-packages-workflow-step %}
For more information about using secrets in your workflow, see "[Creating and using encrypted secrets](/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)."
### Publishing packages to the Maven Central Repository and {% data variables.product.prodname_registry %}

Просмотреть файл

@ -9,6 +9,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Packaging'
- 'Publishing'
- 'Node'
- 'JavaScript'
---
{% data reusables.actions.enterprise-beta %}
@ -167,7 +172,7 @@ jobs:
node-version: '12.x'
registry-url: 'https://registry.npmjs.org'
# Defaults to the user or organization that owns the workflow file
scope: '@octocat'
scope: '@octocat'
- run: yarn
- run: yarn publish
env:

Просмотреть файл

@ -12,6 +12,9 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Workflows'
- 'CI'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -12,6 +12,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Workflows'
---
{% data reusables.actions.enterprise-beta %}
@ -19,7 +21,7 @@ type: 'tutorial'
### About workflow artifacts
Artifacts allow you to persist data after a job has completed, and share that data with another job in the same workflow. An artifact is a file or collection of files produced during a workflow run. For example, you can use artifacts to save your build and test output after a workflow run has ended.
Artifacts allow you to persist data after a job has completed, and share that data with another job in the same workflow. An artifact is a file or collection of files produced during a workflow run. For example, you can use artifacts to save your build and test output after a workflow run has ended.
{% data reusables.github-actions.artifact-log-retention-statement %} The retention period for a pull request restarts each time someone pushes a new commit to the pull request.
@ -128,7 +130,7 @@ The `retention-days` value cannot exceed the retention limit set by the reposito
### Downloading or deleting artifacts
During a workflow run, you can use the [`download-artifact`](https://github.com/actions/download-artifact)action to download artifacts that were previously uploaded in the same workflow run.
During a workflow run, you can use the [`download-artifact`](https://github.com/actions/download-artifact)action to download artifacts that were previously uploaded in the same workflow run.
After a workflow run has been completed, you can download or delete artifacts on {% data variables.product.prodname_dotcom %} or using the REST API. For more information, see "[Downloading workflow artifacts](/actions/managing-workflow-runs/downloading-workflow-artifacts)," "[Removing workflow artifacts](/actions/managing-workflow-runs/removing-workflow-artifacts)," and the "[Artifacts REST API](/rest/reference/actions#artifacts)."

Просмотреть файл

@ -64,8 +64,11 @@ These labels operate cumulatively, so a self-hosted runners labels must match
### Routing precedence for self-hosted runners
If you use both repository-level and organization-level runners, {% data variables.product.prodname_dotcom %} follows an order of precedence when routing jobs to self-hosted runners:
When routing a job to a self-hosted runner, {% data variables.product.prodname_dotcom %} looks for a runner that matches the job's `runs-on` labels:
1. The job's `runs-on` labels are processed. {% data variables.product.prodname_dotcom %} then attempts to locate a runner that matches the label requirements:
2. The job is sent to a repository-level runner that matches the job labels. If no repository-level runner is available (either busy, offline, or no matching labels):
3. The job is sent to an organization-level runner that matches the job labels. If no organization-level runner is available, the job request fails with an error.
1. {% data variables.product.prodname_dotcom %} first searches for a runner at the repository level, then at the organization level{% if currentVersion ver_gt "enterprise-server@2.21" %}, then at the enterprise level{% endif %}.
2. The job is then sent to the first matching runner that is online and idle.
- If all matching online runners are busy, the job will queue at the level with the highest number of matching online runners.
- If all matching runners are offline, the job will queue at the level with the highest number of matching offline runners.
- If there are no matching runners at any level, the job will fail.
- If the job remains queued for more than 24 hours, the job will fail.

Просмотреть файл

@ -6,6 +6,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Fundamentals'
---
{% data reusables.actions.enterprise-beta %}
@ -43,7 +45,7 @@ jobs:
- run: npm install -g bats
```
For example, to run a script as an action, you can store the script in your repository and supply the path and shell type.
For example, to run a script as an action, you can store the script in your repository and supply the path and shell type.
```yaml
jobs:

Просмотреть файл

@ -11,6 +11,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'how_to'
topics:
- 'Fundamentals'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -10,6 +10,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Fundamentals'
---
{% data reusables.actions.enterprise-beta %}
@ -39,7 +41,7 @@ An event is a specific activity that triggers a workflow. For example, activity
#### Jobs
A job is a set of steps that execute on the same runner. By default, a workflow with multiple jobs will run those jobs in parallel. You can also configure a workflow to run jobs sequentially. For example, a workflow can have two sequential jobs that build and test code, where the test job is dependent on the status of the build job. If the build job fails, the test job will not run.
A job is a set of steps that execute on the same runner. By default, a workflow with multiple jobs will run those jobs in parallel. You can also configure a workflow to run jobs sequentially. For example, a workflow can have two sequential jobs that build and test code, where the test job is dependent on the status of the build job. If the build job fails, the test job will not run.
#### Steps
@ -180,7 +182,7 @@ To help you understand how YAML syntax is used to create a workflow file, this s
```
</td>
<td>
The <code>run</code> keyword tells the job to execute a command on the runner. In this case, you are using <code>npm</code> to install the <code>bats</code> software testing package.
The <code>run</code> keyword tells the job to execute a command on the runner. In this case, you are using <code>npm</code> to install the <code>bats</code> software testing package.
</td>
</tr>
<tr>

Просмотреть файл

@ -6,6 +6,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'how_to'
topics:
- 'Workflows'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -7,6 +7,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Azure Pipelines'
- 'Migration'
- 'CI'
- 'CD'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -7,6 +7,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'CircleCI'
- 'Migration'
- 'CI'
- 'CD'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -5,6 +5,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'GitLab'
- 'Migration'
- 'CI'
- 'CD'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -7,6 +7,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Jenkins'
- 'Migration'
- 'CI'
- 'CD'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -7,6 +7,11 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'tutorial'
topics:
- 'Travis CI'
- 'Migration'
- 'CI'
- 'CD'
---
### Introduction

Просмотреть файл

@ -9,6 +9,8 @@ versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'overview'
topics:
- 'Security'
---
{% data reusables.actions.enterprise-beta %}
@ -22,7 +24,7 @@ This guide explains how to configure security hardening for certain {% data vari
Sensitive values should never be stored as plaintext in workflow files, but rather as secrets. [Secrets](/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets) can be configured at the organization{% if currentVersion == "free-pro-team@latest" or currentVersion ver_gt "enterprise-server@3.0" %}, repository, or environment{% else %} or repository{% endif %} level, and allow you to store sensitive information in {% data variables.product.product_name %}.
Secrets use [Libsodium sealed boxes](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes), so that they are encrypted before reaching {% data variables.product.product_name %}. This occurs when the secret is submitted [using the UI](/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository) or through the [REST API](/rest/reference/actions#secrets). This client-side encryption helps the minimize risks related to accidental logging (for example, exception logs and request logs, among others) within {% data variables.product.product_name %}'s infrastructure. Once the secret is uploaded, {% data variables.product.product_name %} is then able to decrypt it so that it can be injected into the workflow runtime.
Secrets use [Libsodium sealed boxes](https://libsodium.gitbook.io/doc/public-key_cryptography/sealed_boxes), so that they are encrypted before reaching {% data variables.product.product_name %}. This occurs when the secret is submitted [using the UI](/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets#creating-encrypted-secrets-for-a-repository) or through the [REST API](/rest/reference/actions#secrets). This client-side encryption helps the minimize risks related to accidental logging (for example, exception logs and request logs, among others) within {% data variables.product.product_name %}'s infrastructure. Once the secret is uploaded, {% data variables.product.product_name %} is then able to decrypt it so that it can be injected into the workflow runtime.
To help prevent accidental disclosure, {% data variables.product.product_name %} uses a mechanism that attempts to redact any secrets that appear in run logs. This redaction looks for exact matches of any configured secrets, as well as common encodings of the values, such as Base64. However, because there are multiple ways a secret value can be transformed, this redaction is not guaranteed. As a result, there are certain proactive steps and good practices you should follow to help ensure secrets are redacted, and to limit other risks associated with secrets:
@ -56,7 +58,7 @@ This means that a compromise of a single action within a workflow can be very si
{% if currentVersion ver_lt "enterprise-server@3.1" %}
{% warning %}
**Warning:** The short version of the commit SHA is insecure and should never be used for specifying an action's Git reference. Because of how repository networks work, any user can fork the repository and push a crafted commit to it that collides with the short SHA. This causes subsequent clones at that SHA to fail because it becomes an ambiguous commit. As a result, any workflows that use the shortened SHA will immediately fail.
{% endwarning %}
@ -104,7 +106,7 @@ As a result, self-hosted runners should almost [never be used for public reposit
When a self-hosted runner is defined at the organization or enterprise level, {% data variables.product.product_name %} can schedule workflows from multiple repositories onto the same runner. Consequently, a security compromise of these environments can result in a wide impact. To help reduce the scope of a compromise, you can create boundaries by organizing your self-hosted runners into separate groups. For more information, see "[Managing access to self-hosted runners using groups](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups)."
You should also consider the environment of the self-hosted runner machines:
- What sensitive information resides on the machine configured as a self-hosted runner? For example, private SSH keys, API access tokens, among others.
- What sensitive information resides on the machine configured as a self-hosted runner? For example, private SSH keys, API access tokens, among others.
- Does the machine have network access to sensitive services? For example, Azure or AWS metadata services. The amount of sensitive information in this environment should be kept to a minimum, and you should always be mindful that any user capable of invoking workflows has access to this environment.
Some customers might attempt to partially mitigate these risks by implementing systems that automatically destroy the self-hosted runner after each job execution. However, this approach might not be as effective as intended, as there is no way to guarantee that a self-hosted runner only runs one job.
@ -116,7 +118,7 @@ You can use the audit log to monitor administrative tasks in an organization. Th
For example, you can use the audit log to track the `action:org.update_actions_secret` event, which tracks changes to organization secrets:
![Audit log entries](/assets/images/help/repository/audit-log-entries.png)
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
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)."
#### Events for secret management
@ -134,14 +136,14 @@ The following tables describe the {% data variables.product.prodname_actions %}
|------------------|-------------------
| `action:org.register_self_hosted_runner` | Triggered when an organization owner [registers a new self-hosted runner](/actions/hosting-your-own-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-an-organization).
| `action:org.remove_self_hosted_runner` | Triggered when an organization owner [removes a self-hosted runner](/actions/hosting-your-own-runners/removing-self-hosted-runners#removing-a-runner-from-an-organization).
| `action:repo.register_self_hosted_runner` | Triggered when a repository admin [registers a new self-hosted runner](/actions/hosting-your-own-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository).
| `action:repo.remove_self_hosted_runner` | Triggered when a repository admin [removes a self-hosted runner](/actions/hosting-your-own-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository).
| `action:repo.register_self_hosted_runner` | Triggered when a repository admin [registers a new self-hosted runner](/actions/hosting-your-own-runners/adding-self-hosted-runners#adding-a-self-hosted-runner-to-a-repository).
| `action:repo.remove_self_hosted_runner` | Triggered when a repository admin [removes a self-hosted runner](/actions/hosting-your-own-runners/removing-self-hosted-runners#removing-a-runner-from-a-repository).
#### Events for self-hosted runner groups
| Action | Description
|------------------|-------------------
| `action:org.runner_group_created` | Triggered when an organization admin [creates a self-hosted runner group](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups#creating-a-self-hosted-runner-group-for-an-organization).
| `action:org.runner_group_removed` | Triggered when an organization admin removes a self-hosted runner group.
| `action:org.runner_group_renamed` | Triggered when an organization admin renames a self-hosted runner group.
| `action:org.runner_group_runners_added` | Triggered when an organization admin [adds a self-hosted runner to a group](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group).
| `action:org.runner_group_runners_removed` | Triggered when an organization admin removes a self-hosted runner from a group.
| `action:org.runner_group_created` | Triggered when an organization admin [creates a self-hosted runner group](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups#creating-a-self-hosted-runner-group-for-an-organization).
| `action:org.runner_group_removed` | Triggered when an organization admin removes a self-hosted runner group.
| `action:org.runner_group_renamed` | Triggered when an organization admin renames a self-hosted runner group.
| `action:org.runner_group_runners_added` | Triggered when an organization admin [adds a self-hosted runner to a group](/actions/hosting-your-own-runners/managing-access-to-self-hosted-runners-using-groups#moving-a-self-hosted-runner-to-a-group).
| `action:org.runner_group_runners_removed` | Triggered when an organization admin removes a self-hosted runner from a group.

Просмотреть файл

@ -7,6 +7,9 @@ redirect_from:
versions:
free-pro-team: '*'
enterprise-server: '>=2.22'
type: 'quick_start'
topics:
- 'Fundamentals'
---
{% data reusables.actions.enterprise-beta %}

Просмотреть файл

@ -268,11 +268,19 @@ Creates or updates an environment variable for any actions running next in a job
#### Example
```bash
echo "action_state=yellow" >> $GITHUB_ENV
{% raw %}
```
Running `$action_state` in a future step will now return `yellow`
steps:
- name: Set the value
id: step_one
run: |
echo "action_state=yellow" >> $GITHUB_ENV
- name: Use the value
id: step_two
run: |
echo "${{ env.action_state }}" # This will output 'yellow'
```
{% endraw %}
#### Multiline strings

Просмотреть файл

@ -27,7 +27,7 @@ The name of your workflow. {% data variables.product.prodname_dotcom %} displays
### `on`
**Required** The name of the {% data variables.product.prodname_dotcom %} event that triggers the workflow. You can provide a single event `string`, `array` of events, `array` of event `types`, or an event configuration `map` that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see "[Events that trigger workflows](/articles/events-that-trigger-workflows)."
**Required**. The name of the {% data variables.product.prodname_dotcom %} event that triggers the workflow. You can provide a single event `string`, `array` of events, `array` of event `types`, or an event configuration `map` that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see "[Events that trigger workflows](/articles/events-that-trigger-workflows)."
{% data reusables.github-actions.actions-on-examples %}
@ -286,7 +286,7 @@ In this example, `job3` uses the `always()` conditional expression so that it al
### `jobs.<job_id>.runs-on`
**Required** The type of machine to run the job on. The machine can be either a {% data variables.product.prodname_dotcom %}-hosted runner or a self-hosted runner.
**Required**. The type of machine to run the job on. The machine can be either a {% data variables.product.prodname_dotcom %}-hosted runner or a self-hosted runner.
{% data reusables.actions.enterprise-github-hosted-runners %}
@ -701,6 +701,18 @@ steps:
You can set the `shell` value to a template string using `command […options] {0} [..more_options]`. {% data variables.product.prodname_dotcom %} interprets the first whitespace-delimited word of the string as the command, and inserts the file name for the temporary script at `{0}`.
For example:
```yaml
steps:
- name: Display the environment variables and their values
run: |
print %ENV
shell: perl {0}
```
The command used, `perl` in this example, must be installed on the runner. For information about the software included on GitHub-hosted runners, see "[Specifications for GitHub-hosted runners](/actions/reference/specifications-for-github-hosted-runners#supported-software)."
#### Exit codes and error action preference
For built-in shell keywords, we provide the following defaults that are executed by {% data variables.product.prodname_dotcom %}-hosted runners. You should use these guidelines when running shell scripts.
@ -1187,7 +1199,7 @@ For more information about branch, tag, and path filter syntax, see "[`on.<push|
| `'**'` | Matches all branch and tag names. This is the default behavior when you don't use a `branches` or `tags` filter. | `all/the/branches`<br/><br/>`every/tag` |
| `'*feature'` | The `*` character is a special character in YAML. When you start a pattern with `*`, you must use quotes. | `mona-feature`<br/><br/>`feature`<br/><br/>`ver-10-feature` |
| `v2*` | Matches branch and tag names that start with `v2`. | `v2`<br/><br/>`v2.0`<br/><br/>`v2.9` |
| `v[12].[0-9]+.[0-9]+` | Matches all semantic versioning tags with major version 1 or 2 | `v1.10.1`<br/><br/>`v2.0.0` |
| `v[12].[0-9]+.[0-9]+` | Matches all semantic versioning branches and tags with major version 1 or 2 | `v1.10.1`<br/><br/>`v2.0.0` |
#### Patterns to match file paths

Просмотреть файл

@ -74,8 +74,8 @@ $ ghe-config -l
```
Allows you to find the uuid of your node in `cluster.conf`.
``` shell
$ ghe-config _hostname_.uuid
```shell
$ ghe-config <em>HOSTNAME</em>.uuid
```
{% if currentVersion ver_gt "enterprise-server@2.21" %}
@ -543,8 +543,8 @@ ghe-dpages status
```
To evacuate a {% data variables.product.prodname_pages %} storage service before evacuating a cluster node:
``` shell
ghe-dpages evacuate pages-server-<uuid>
```shell
ghe-dpages evacuate pages-server-<em>UUID</em>
```
#### ghe-spokes
@ -569,16 +569,16 @@ ghe-spokes route
To evacuate storage services on a cluster node:
``` shell
ghe-spokes server evacuate git-server-<uuid>
```shell
ghe-spokes server evacuate git-server-<em>UUID</em>
```
#### ghe-storage
This utility allows you to evacuate all storage services before evacuating a cluster node.
``` shell
ghe-storage evacuate storage-server-<uuid>
```shell
ghe-storage evacuate storage-server-<em>UUID</em>
```
### Git

Просмотреть файл

@ -44,12 +44,6 @@ settings to allow incoming emails](#configuring-dns-and-firewall-settings-to-all
- In the **Authentication** dropdown, choose the type of encryption used by your SMTP server.
- In the **No-reply email address** field, type the email address to use in the From and To fields for all notification emails.
{% note %}
**Note:** If you select the **Send from author** checkbox in a repositorys **Services** email webhook, outbound email for that repository will send from the author and not from the no-reply email address. For more information, see "[About email notifications for pushes to your repository](/github/administering-a-repository/about-email-notifications-for-pushes-to-your-repository)."
{% endnote %}
6. If you want to discard all incoming emails that are addressed to the no-reply email address, select **Discard email addressed to the no-reply email address**.
![Checkbox to discard emails addressed to the no-reply email address](/assets/images/enterprise/management-console/discard-noreply-emails.png)
7. Under **Support**, choose a type of link to offer additional support to your users:
@ -165,8 +159,7 @@ You'll notice that `metroplex` catches the inbound message, processes it, then m
#### Verify your DNS settings
In order to properly process inbound emails, you must configure a valid A Record (or CNAME), as well as an MX Record. For more information, see "[Configuring DNS and firewall settings to allow incom
emails](#configuring-dns-and-firewall-settings-to-allow-incoming-emails)."
In order to properly process inbound emails, you must configure a valid A Record (or CNAME), as well as an MX Record. For more information, see "[Configuring DNS and firewall settings to allow incoming emails](#configuring-dns-and-firewall-settings-to-allow-incoming-emails)."
#### Check firewall or AWS Security Group settings

Просмотреть файл

@ -10,7 +10,7 @@ versions:
### About high availability replication for clusters
You can configure a cluster deployment of {% data variables.product.prodname_ghe_server %} for high availability, where an identical set of passive nodes sync with the nodes in your active cluster. If hardware or software failures affect the datacenter with your active cluster, you can manually fail over to the replica nodes and continue processing user requests without data loss.
You can configure a cluster deployment of {% data variables.product.prodname_ghe_server %} for high availability, where an identical set of passive nodes sync with the nodes in your active cluster. If hardware or software failures affect the datacenter with your active cluster, you can manually fail over to the replica nodes and continue processing user requests, minimizing the impact of the outage.
In high availability mode, each active node syncs regularly with a corresponding passive node. The passive node runs in standby and does not serve applications or process user requests.

Просмотреть файл

@ -122,7 +122,6 @@ When you contact {% data variables.contact.enterprise_support %}, you can choose
### Further reading
{% if enterpriseServerVersions contains currentVersion %}
- [Frequently asked questions about {% data variables.product.prodname_ghe_server %}](https://enterprise.github.com/faq)
- Section 10 on Support in the "[{% data variables.product.prodname_ghe_server %} License Agreement](https://enterprise.github.com/license)"{% endif %}
- "[Receiving help from {% data variables.contact.github_support %}](/admin/enterprise-support/receiving-help-from-github-support)"{% if enterpriseServerVersions contains currentVersion %}
- "[Preparing to submit a ticket](/enterprise/admin/guides/enterprise-support/preparing-to-submit-a-ticket)"{% endif %}

Просмотреть файл

@ -24,7 +24,7 @@ You can allocate the user licenses included in your {% data variables.product.pr
If your {% data variables.product.prodname_ghe_server %} license expires, you won't be able to access {% data variables.product.product_location_enterprise %} via a web browser or Git. If needed, you will be able to use command-line utilities to back up all your data. For more information, see "[Configuring backups on your appliance](/enterprise/admin/guides/installation/configuring-backups-on-your-appliance)." If you have any questions about renewing your license, contact {% data variables.contact.contact_enterprise_sales %}.
### Uploading a new license to {% data variables.product.prodname_ghe_server %}
### Uploading a new license to {% data variables.product.prodname_ghe_server %}
After you purchase a new license or upgrade an existing license from {% data variables.contact.contact_enterprise_sales %}, you must download your new license file, then upload the file to {% data variables.product.prodname_ghe_server %} to unlock your new user licenses.
@ -45,7 +45,9 @@ If you'd like to renew or add user licenses to {% data variables.product.prodnam
13. To select your license, click **License file**, or drag your license file onto **License file**.
![Upload license file](/assets/images/enterprise/management-console/upload-license.png)
14. Click **Upload**.
![Begin upgrade](/assets/images/enterprise/management-console/begin-upload.png)
![Begin upload](/assets/images/enterprise/management-console/begin-upload.png)
{% if enterpriseVersion ver_lt "enterprise-server@3.0" %}If the web UI for {% data variables.product.prodname_ghe_server %} doesn't reflect your updated license immediately, see "[Troubleshooting](#troubleshooting)."{% endif %}
### Viewing license usage
@ -77,3 +79,23 @@ You can download a JSON file from {% data variables.product.prodname_ghe_server
![Upload GitHub Enterprise Servers usage link](/assets/images/help/business-accounts/upload-ghe-server-usage-link.png)
11. Upload the JSON file you downloaded from {% data variables.product.prodname_ghe_server %}.
![Drag and drop or select a file to upload](/assets/images/help/business-accounts/upload-ghe-server-usage-file.png)
{% if currentVersion ver_lt "enterprise-server@3.0" %}
### Troubleshooting
In some scenarios, the web UI for {% data variables.product.prodname_ghe_server %} may not immediately reflect your new license. You can force the system to detect the license by restarting two system services.
{% data reusables.enterprise_installation.ssh-into-instance %}
1. Restart the services for Git authentication and the HTTP server.
{% warning %}
**Warning**: Running the following command will result in a few minutes of user-facing downtime for {% data variables.product.prodname_ghe_server %}. Run the command with care.
{% endwarning %}
sudo systemctl restart github-gitauth github-unicorn
1. After {% data variables.product.prodname_ghe_server %} returns you to a prompt, try accessing {% data variables.product.prodname_ghe_server %} via the command line or web UI again.
{% endif %}

Просмотреть файл

@ -86,7 +86,7 @@ Name | Description
Name | Description
---------------------:| -------------------------------------------------------
`repo.access` | The visibility of a repository changed to private{% if enterpriseServerVersions contains currentVersion %}, public,{% endif %} or internal.
`repo.archive` | A repository was archived. For more information, see "[Archiving a {% data variables.product.prodname_dotcom %} repository](/github/creating-cloning-and-archiving-repositories/archiving-a-github-repository)."
`repo.archived` | A repository was archived. For more information, see "[Archiving a {% data variables.product.prodname_dotcom %} repository](/github/creating-cloning-and-archiving-repositories/archiving-a-github-repository)."
`repo.add_member` | A collaborator was added to a repository.
`repo.config` | A site admin blocked force pushes. For more information, see [Blocking force pushes to a repository](/enterprise/{{ currentVersion }}/admin/guides/developer-workflow/blocking-force-pushes-to-a-repository/) to a repository.
`repo.create` | A repository was created.
@ -95,7 +95,7 @@ Name | Description
`repo.rename` | A repository was renamed.
`repo.transfer` | A user accepted a request to receive a transferred repository.
`repo.transfer_start` | A user sent a request to transfer a repository to another user or organization.
`repo.unarchive` | A repository was unarchived. For more information, see "[Archiving a {% data variables.product.prodname_dotcom %} repository](/github/creating-cloning-and-archiving-repositories/archiving-a-github-repository)."{% if enterpriseServerVersions contains currentVersion %}
`repo.unarchived` | A repository was unarchived. For more information, see "[Archiving a {% data variables.product.prodname_dotcom %} repository](/github/creating-cloning-and-archiving-repositories/archiving-a-github-repository)."{% if enterpriseServerVersions contains currentVersion %}
`repo.config.disable_anonymous_git_access`| Anonymous Git read access is disabled for a repository. For more information, see "[Enabling anonymous Git read access for a repository](/enterprise/{{ currentVersion }}/user/articles/enabling-anonymous-git-read-access-for-a-repository)."
`repo.config.enable_anonymous_git_access` | Anonymous Git read access is enabled for a repository. For more information, see "[Enabling anonymous Git read access for a repository](/enterprise/{{ currentVersion }}/user/articles/enabling-anonymous-git-read-access-for-a-repository)."
`repo.config.lock_anonymous_git_access` | A repository's anonymous Git read access setting is locked, preventing repository administrators from changing (enabling or disabling) this setting. For more information, see "[Preventing users from changing anonymous Git read access](/enterprise/{{ currentVersion }}/admin/guides/user-management/preventing-users-from-changing-anonymous-git-read-access)."

Просмотреть файл

@ -22,8 +22,10 @@ Push log entries show:
### Viewing a repository's push logs
1. Sign into {% data variables.product.prodname_ghe_server %} as a site administrator.
1. Navigate to a repository.
{% data reusables.enterprise_site_admin_settings.access-settings %}
1. In the upper-right corner of the repository's page, click {% octicon "rocket" aria-label="The rocket ship" %}.
![Rocketship icon for accessing site admin settings](/assets/images/enterprise/site-admin-settings/access-new-settings.png)
{% data reusables.enterprise_site_admin_settings.security-tab %}
4. In the left sidebar, click **Push Log**.
![Push log tab](/assets/images/enterprise/site-admin-settings/push-log-tab.png)
@ -31,8 +33,8 @@ Push log entries show:
{% if enterpriseServerVersions contains currentVersion %}
### Viewing a repository's push logs on the command-line
1. SSH into your appliance. For more information, see "[Accessing the administrative shell (SSH)](/enterprise/{{ currentVersion }}/admin/guides/installation/accessing-the-administrative-shell-ssh/)."
2. In the appropriate Git repository, open the audit log file:
{% data reusables.enterprise_installation.ssh-into-instance %}
1. In the appropriate Git repository, open the audit log file:
```shell
ghe-repo <em>owner</em>/<em>repository</em> -c "less audit_log"
```

Просмотреть файл

@ -34,3 +34,14 @@ versions:
3. All tags associated with the commit are visible in that commit's metadata.
![Viewing a tag in the commit](/assets/images/help/desktop/viewing-tags-in-commit.png)
### Deleting tags
{% note %}
**Note**: You can only delete tags associated with commits that have not yet been pushed.
{% endnote %}
{% data reusables.desktop.history-tab %}
{% data reusables.desktop.delete-tag %}

Просмотреть файл

@ -435,7 +435,7 @@ The code above gets the full repository name and the head SHA of the commit from
### Step 2.3. Running RuboCop
Great! You're cloning the repository and creating check runs using your CI server. Now you'll get into the nitty gritty details of the [RuboCop linter](https://rubocop.readthedocs.io/en/latest/basic_usage/#rubocop-as-a-code-style-checker) and [Checks API annotations](/rest/reference/checks#create-a-check-run).
Great! You're cloning the repository and creating check runs using your CI server. Now you'll get into the nitty gritty details of the [RuboCop linter](https://docs.rubocop.org/rubocop/usage/basic_usage.html#code-style-checker) and [Checks API annotations](/rest/reference/checks#create-a-check-run).
The following code runs RuboCop and saves the style code errors in JSON format. Add this code below the call to `clone_repository` you added in the [previous step](#step-22-cloning-the-repository) and above the code that updates the check run to complete.
@ -447,7 +447,7 @@ logger.debug @report
@output = JSON.parse @report
```
The code above runs RuboCop on all files in the repository's directory. The option `--format json` is a handy way to save a copy of the linting results in a machine-parsable format. See the [RuboCop docs](https://rubocop.readthedocs.io/en/latest/formatters/#json-formatter) for details and an example of the JSON format.
The code above runs RuboCop on all files in the repository's directory. The option `--format json` is a handy way to save a copy of the linting results in a machine-parsable format. See the [RuboCop docs](https://docs.rubocop.org/rubocop/formatters.html#json-formatter) for details and an example of the JSON format.
Because this code stores the RuboCop results in a `@report` variable, it can safely remove the checkout of the repository. This code also parses the JSON so you can easily access the keys and values in your GitHub App using the `@output` variable.
@ -588,7 +588,7 @@ This code limits the total number of annotations to 50. But you can modify this
When the `offense_count` is zero, the CI test is a `success`. If there are errors, this code sets the conclusion to `neutral` in order to prevent strictly enforcing errors from code linters. But you can change the conclusion to `failure` if you would like to ensure that the check suite fails when there are linting errors.
When errors are reported, the code above iterates through the `files` array in the RuboCop report. For each file, it extracts the file path and sets the annotation level to `notice`. You could go even further and set specific warning levels for each type of [RuboCop Cop](https://rubocop.readthedocs.io/en/latest/cops/), but to keep things simpler in this quickstart, all errors are set to a level of `notice`.
When errors are reported, the code above iterates through the `files` array in the RuboCop report. For each file, it extracts the file path and sets the annotation level to `notice`. You could go even further and set specific warning levels for each type of [RuboCop Cop](https://docs.rubocop.org/rubocop/cops.html), but to keep things simpler in this quickstart, all errors are set to a level of `notice`.
This code also iterates through each error in the `offenses` array and collects the location of the offense and error message. After extracting the information needed, the code creates an annotation for each error and stores it in the `annotations` array. Because annotations only support start and end columns on the same line, `start_column` and `end_column` are only added to the `annotation` object if the start and end line values are the same.
@ -718,7 +718,7 @@ If the annotations are related to a file already included in the PR, the annotat
If you've made it this far, kudos! 👏 You've already created a CI test. In this section, you'll add one more feature that uses RuboCop to automatically fix the errors it finds. You already added the "Fix this" button in the [previous section](#step-25-updating-the-check-run-with-ci-test-results). Now you'll add the code to handle the `requested_action` check run event triggered when someone clicks the "Fix this" button.
The RuboCop tool [offers](https://rubocop.readthedocs.io/en/latest/basic_usage/#auto-correcting-offenses) the `--auto-correct` command-line option to automatically fix errors it finds. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to GitHub after RuboCop does its magic.
The RuboCop tool [offers](https://docs.rubocop.org/rubocop/usage/basic_usage.html#auto-correcting-offenses) the `--auto-correct` command-line option to automatically fix errors it finds. When you use the `--auto-correct` feature, the updates are applied to the local files on the server. You'll need to push the changes to GitHub after RuboCop does its magic.
To push to a repository, your app must have write permissions for "Repository contents." You set that permission back in [Step 2.2. Cloning the repository](#step-22-cloning-the-repository) to **Read & write**, so you're all set.

Просмотреть файл

@ -18,15 +18,23 @@ To learn about publishing {% data variables.product.prodname_actions %} in {% da
### Apps
Anyone can share their apps with other users on {% data variables.product.prodname_marketplace %} but only listings that are verified by {% data variables.product.company_short %} can include paid plans. For more information, see "[About verified creators](/developers/github-marketplace/about-verified-creators)."
Anyone can share their apps with other users for free on {% data variables.product.prodname_marketplace %} but only apps owned by organizations can sell their app.
If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} or {% data variables.product.prodname_oauth_app %}s, see "[Building {% data variables.product.prodname_github_apps %}](/developers/apps/building-github-apps)" or "[Building {% data variables.product.prodname_oauth_app %}s](/developers/apps/building-oauth-apps)."
To publish paid plans for your app and display a marketplace badge, you must complete the publisher verification process. For more information, see "[Applying for publisher verification for your organization](/developers/github-marketplace/applying-for-publisher-verification-for-your-organization)" or "[Requirements for listing an app](/developers/github-marketplace/requirements-for-listing-an-app)."
Once the organization meets the requirements, someone with owner permissions in the organization can publish paid plans for any of their apps. Each app with a paid plan also goes through a financial onboarding process to enable payments.
To publish apps with free plans, you only need to meet the general requirements for listing any app. For more information, see "[Requirements for all GitHub Marketplace listings](/developers/github-marketplace/requirements-for-listing-an-app#requirements-for-all-github-marketplace-listings)."
#### New to apps?
If you're interested in creating an app for {% data variables.product.prodname_marketplace %}, but you're new to {% data variables.product.prodname_github_apps %} or {% data variables.product.prodname_oauth_app %}s, see "[Building {% data variables.product.prodname_github_apps %}](/developers/apps/building-github-apps)" or "[Building {% data variables.product.prodname_oauth_app %}s](/developers/apps/building-oauth-apps)."
#### GitHub Apps vs. OAuth Apps
{% data reusables.marketplace.github_apps_preferred %}, although you can list both OAuth and {% data variables.product.prodname_github_app %}s in {% data variables.product.prodname_marketplace %}. For more information, see "[Differences between {% data variables.product.prodname_github_apps %} and {% data variables.product.prodname_oauth_app %}s](/apps/differences-between-apps/)" and "[Migrating {% data variables.product.prodname_oauth_app %}s to {% data variables.product.prodname_github_apps %}](/apps/migrating-oauth-apps-to-github-apps/)."
If you have questions about {% data variables.product.prodname_marketplace %}, please contact {% data variables.contact.contact_support %} directly.
### Publishing an app to {% data variables.product.prodname_marketplace %}
### Publishing an app to {% data variables.product.prodname_marketplace %} overview
When you have finished creating your app, you can share it with other users by publishing it to {% data variables.product.prodname_marketplace %}. In summary, the process is:
@ -38,13 +46,9 @@ When you have finished creating your app, you can share it with other users by p
1. Add a pricing plan. For more information, see "[Setting pricing plans for your listing](/developers/github-marketplace/setting-pricing-plans-for-your-listing)."
1. Check whether your app meets the requirements for listing on {% data variables.product.prodname_marketplace %} as a free or a paid app. For more information, see "[Requirements for listing an app](/developers/github-marketplace/requirements-for-listing-an-app)."
1. Read and accept the terms of the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)."
1. Submit your listing for publication in {% data variables.product.prodname_marketplace %}, requesting verification if you want to sell the app. For more information, see "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication)."
An onboarding expert will contact you with any questions or further steps. For example, if you have added a paid plan, you will need to complete the verification process and complete financial onboarding. As soon as your listing is approved the app is published to {% data variables.product.prodname_marketplace %}.
1. Submit your listing for publication in {% data variables.product.prodname_marketplace %}. For more information, see "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication)."
### Seeing how your app is performing
@ -52,3 +56,7 @@ You can access metrics and transactions for your listing. For more information,
- "[Viewing metrics for your listing](/developers/github-marketplace/viewing-metrics-for-your-listing)"
- "[Viewing transactions for your listing](/developers/github-marketplace/viewing-transactions-for-your-listing)"
### Contacting Support
If you have questions about {% data variables.product.prodname_marketplace %}, please contact {% data variables.contact.contact_support %} directly.

Просмотреть файл

@ -0,0 +1,43 @@
---
title: About marketplace badges
intro: 'Learn about the badges that you may see for some apps and actions listings on {% data variables.product.prodname_marketplace %}.'
redirect_from:
- /developers/github-marketplace/about-verified-creator-badges
versions:
free-pro-team: '*'
---
### For GitHub Apps
Apps with the {% octicon "verified" aria-label="The verified badge" %}, are owned by an organization that has:
- Confirmed their domain
- Confirmed their email address so {% data variables.product.prodname_dotcom %} Support can reach the organization
- Required two-factor authentication for their organization. For more information, see "[Requiring two-factor authentication in your organization](/github/setting-up-and-managing-organizations-and-teams/requiring-two-factor-authentication-in-your-organization)."
![Marketplace badge for GitHub Apps](/assets/images/marketplace/apps-with-verified-publisher-badge.png)
To learn how you can add this badge to your app, see "[Applying for publisher verification for your organization](/developers/github-marketplace/applying-for-publisher-verification-for-your-organization)."
For more information about the requirements for listing an app on {% data variables.product.prodname_marketplace %}, see "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)."
For information on finding apps to use, see "[Searching {% data variables.product.prodname_marketplace %}](/github/searching-for-information-on-github/searching-github-marketplace)."
### For GitHub actions
Actions with the {% octicon "verified" aria-label="The verified badge" %}, or verified creator badge, indicate that {% data variables.product.prodname_dotcom %} has verified the creator of the action as a partner organization.
![Verified creator badge for GitHub Actions](/assets/images/marketplace/verified-creator-badge-for-actions.png)
For information on how to publish a GitHub action to {% data variables.product.prodname_marketplace %}, see "[Publishing actions in GitHub Marketplace](/actions/creating-actions/publishing-actions-in-github-marketplace)."
### About the previous verification process for apps
In addition to the verified creator badge, you'll also see badges for unverified and verified apps. These apps were published using the old method for verifying individual apps.
![Green verified and grey unverified badge](/assets/images/marketplace/marketplace_verified_badges.png)
{% note %}
**Note:** The new publisher verification process for apps replaces the previous process where individual apps were verified. The new publisher verification process is similar to the verification process for actions. If you have apps that were verified under the old process, these will not be affected by the changes. The {% data variables.product.prodname_marketplace %} team will contact you with details of how to migrate to organization-based verification.
{% endnote %}

Просмотреть файл

@ -1,43 +0,0 @@
---
title: About verified creators
intro: 'Each organization that wants to sell apps on {% data variables.product.prodname_marketplace %} must follow a verification process. Their identity is checked and their billing process reviewed.'
versions:
free-pro-team: '*'
---
### About verified creators
A verified creator is an organization that {% data variables.product.company_short %} has checked. Anyone can share their apps with other users on {% data variables.product.prodname_marketplace %} but only organizations that are verified by {% data variables.product.company_short %} can sell apps. For more information about organizations, see "[About organizations](/github/setting-up-and-managing-organizations-and-teams/about-organizations)."
The verification process aims to protect users. For example, it verifies the seller's identity, checks that their {% data variables.product.product_name %} organization is set up securely, and that they can be contacted for support.
After passing the verification checks, any apps that the organization lists on {% data variables.product.prodname_marketplace %} are shown with a verified creator badge {% octicon "verified" aria-label="Verified creator badge" %}. The organization can now add paid plans to any of their apps. Each app with a paid plan also goes through a financial onboarding process to check that it's set up to handle billing correctly.
![verified creator badges](/assets/images/marketplace/marketplace_verified_creator_badges_apps.png)
In addition to the verified creator badge, you'll also see badges for unverified and verified apps. These apps were published using the old method for verifying individual apps.
![Green verified and grey unverified badge](/assets/images/marketplace/marketplace_verified_badges.png)
For information on finding apps to use, see "[Searching {% data variables.product.prodname_marketplace %}](/github/searching-for-information-on-github/searching-github-marketplace)."
### About the verification process
The first time you request verification for a listing of one of your apps, you will enter the verification process. An onboarding expert will guide you through the process. This includes checking:
- Profile information - The basic profile information is populated accurately and appropriately.
- Security - The organization has enabled two-factor authentication.
- Verified domain - The organization has verified the domain of the site URL.
- Purchase webhook event - The event is handled correctly by the app.
When your organization is verified, all your apps are shown with a verified creator badge. You are now able to offer paid plans for any of your apps.
For more information about the requirements for listing an app on {% data variables.product.prodname_marketplace %}, see "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)."
{% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)."
{% note %}
**Note:** This verification process for apps replaces the previous process where individual apps were verified. The current process is similar to the verification process for actions. If you have apps that were verified under the old process, these will not be affected by the changes. The {% data variables.product.prodname_marketplace %} team will contact you with details of how to migrate to organization-based verification.
{% endnote %}

Просмотреть файл

@ -0,0 +1,34 @@
---
title: Applying for publisher verification for your organization
intro: 'To offer paid plans for your app or to include a marketplace badge in your app listing, you must complete the publisher verification process for your organization.'
versions:
free-pro-team: '*'
---
Publisher verification ensures that {% data variables.product.prodname_dotcom %} has a way to contact you, that you've enabled two-factor authentication for your organization, and that your organization's domain has been verified.
Once your organization has been verified, you can publish paid plans for your app. For information, see "[Setting pricing plans for your listing](/developers/github-marketplace/setting-pricing-plans-for-your-listing)."
To offer paid plans for your app, the app must be owned by an organization and you must have owner permissions in the organization. If your app is currently owned by a user account, you'll need to transfer the ownership of the app to an organization. For more information, see "[Transferring ownership of a GitHub App](/developers/apps/transferring-ownership-of-a-github-app)" or "[Transferring ownership of an OAuth App](/developers/apps/transferring-ownership-of-an-oauth-app)."
### Requesting publisher verification
{% data reusables.profile.access_profile %}
{% data reusables.profile.access_org %}
{% data reusables.organizations.org_settings %}
1. In the left sidebar, click **Developer settings**.
![Developer settings option in the organization settings sidebar](/assets/images/marketplace/developer-settings-in-org-settings.png)
1. Under "Developer settings", click **Publisher Verification**.
![Publisher verification option in the organization settings sidebar](/assets/images/marketplace/publisher-verification-settings-option.png)
1. Under "Publisher Verification", complete the information in the checklist:
- Ensure that your basic profile information is present and accurate. Also, make sure that you've included the best email address for support and updates from {% data variables.product.company_short %}.
- Ensure that Two-factor authentication is enabled for your organization. For more information, see "[Requiring two-factor authentication in your organization](/github/setting-up-and-managing-organizations-and-teams/requiring-two-factor-authentication-in-your-organization)."
- Submit a verified domain. For related information, see "[Verifying your organization's domain](/github/setting-up-and-managing-organizations-and-teams/verifying-your-organizations-domain)."
![Publisher Verification checklist](/assets/images/marketplace/publisher-verification-checklist.png)
1. Click **Request Verification**. {% data variables.product.company_short %} will review your details and let you know once your publisher verification is complete.
### Further reading
For information about the process of publishing apps, see "[About GitHub Marketplace](/developers/github-marketplace/about-github-marketplace)."

Просмотреть файл

@ -59,7 +59,7 @@ Once you've created a {% data variables.product.prodname_marketplace %} draft li
### Submitting your app
Once you've completed your {% data variables.product.prodname_marketplace %} listing, you can submit your listing for review from the **Overview** page. You'll need to read and accept the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)," and then you can click **Submit for review**. After you submit your app for review, an onboarding expert will contact you with additional information about the onboarding process. You can learn more about the onboarding and security review process in "[Getting started with {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/)."
Once you've completed your {% data variables.product.prodname_marketplace %} listing, you can submit your listing for review from the **Overview** page. You'll need to read and accept the "[{% data variables.product.prodname_marketplace %} Developer Agreement](/articles/github-marketplace-developer-agreement/)," and then you can click **Submit for review**. After you submit your app for review, an onboarding expert will contact you with additional information about the onboarding process.
### Removing a {% data variables.product.prodname_marketplace %} listing

Просмотреть файл

@ -0,0 +1,9 @@
---
title: GitHub Marketplace Overview
intro: 'Learn how you can share your app or action with the {% data variables.product.company_short %} community on {% data variables.product.prodname_marketplace %}.'
mapTopic: true
versions:
free-pro-team: '*'
---

Просмотреть файл

@ -9,9 +9,12 @@ versions:
free-pro-team: '*'
---
{% topic_link_in_list /creating-apps-for-github-marketplace %}
{% topic_link_in_list /github-marketplace-overview %}
{% link_in_list /about-github-marketplace %}
{% link_in_list /about-verified-creators %}
{% link_in_list /about-marketplace-badges %}
{% link_in_list /applying-for-publisher-verification-for-your-organization %}
{% topic_link_in_list /creating-apps-for-github-marketplace %}
{% link_in_list /requirements-for-listing-an-app %}
{% link_in_list /security-best-practices-for-apps %}
{% link_in_list /customer-experience-best-practices-for-apps %}

Просмотреть файл

@ -48,18 +48,21 @@ To protect your customers, we recommend that you also follow security best pract
### Requirements for paid apps
In addition to the requirements for all apps above, each app that you offer as a paid service on {% data variables.product.prodname_marketplace %} must also meet the following requirements:
To publish a paid plan for your app on {% data variables.product.prodname_marketplace %}, your app must be owned by an organization that is a verified publisher. For more information about the verification process or transfering ownership of your app, see "[Applying for publisher verification for your organization](/developers/github-marketplace/applying-for-publisher-verification-for-your-organization)."
If your app is already published and you're a verified publisher, then you can publish a new paid plan from the pricing plan editor. For more information, see "[Setting pricing plans for your listing](/developers/github-marketplace/setting-pricing-plans-for-your-listing)."
To publish a paid app (or an app that offers a paid plan), you must also meet the following requirements:
- {% data variables.product.prodname_github_app %}s should have a minimum of 100 installations.
- {% data variables.product.prodname_oauth_app %}s should have a minimum of 200 users.
- All paid apps must handle {% data variables.product.prodname_marketplace %} purchase events for new purchases, upgrades, downgrades, cancellations, and free trials. For more information, see "[Billing requirements for paid apps](#billing-requirements-for-paid-apps)" below.
- Publishing organizations must have a verified domain and must enable two-factor authentication. For more information, see "[Requiring two-factor authentication in your organization](/github/setting-up-and-managing-organizations-and-teams/requiring-two-factor-authentication-in-your-organization)."
When you are ready to publish the app on {% data variables.product.prodname_marketplace %} you must request verification for the listing.
When you are ready to publish the app on {% data variables.product.prodname_marketplace %} you must request verification for the app listing.
{% note %}
The verification process is open to organizations. {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)."
**Note:** {% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to transfer an app to an organization, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)."
{% endnote %}

Просмотреть файл

@ -19,11 +19,13 @@ versions:
### About setting pricing plans
If you want to sell an app on {% data variables.product.prodname_marketplace %}, you need to request verification when you publish the listing for your app. During the verification process, an onboarding expert checks the organization's identity and security settings. The onboarding expert will also take the organization through financial onboarding. For more information, see: "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)."
{% data variables.product.prodname_marketplace %} offers several different types of pricing plans. For detailed information, see "[Pricing plans for {% data variables.product.prodname_marketplace %}](/developers/github-marketplace/pricing-plans-for-github-marketplace-apps)."
{% data reusables.marketplace.app-transfer-to-org-for-verification %} For information on how to do this, see: "[Submitting your listing for publication](/developers/github-marketplace/submitting-your-listing-for-publication#transferring-an-app-to-an-organization-before-you-submit)."
To offer a paid plan for your app, your app must be owned by an organization that has completed the publisher verification process and met certain criteria. For more information, see "[Applying for publisher verification for your organization](/developers/github-marketplace/applying-for-publisher-verification-for-your-organization)" and "[Requirements for listing an app on {% data variables.product.prodname_marketplace %}](/marketplace/getting-started/requirements-for-listing-an-app-on-github-marketplace/)."
{% data variables.product.prodname_marketplace %} offers several different types of pricing plan. For detailed information, see "[Pricing plans for {% data variables.product.prodname_marketplace %}](/developers/github-marketplace/pricing-plans-for-github-marketplace-apps)."
If your app is already published with a paid plan and you're a verified publisher, then you can publish a new paid plan from the "Edit a pricing plan" page in your Marketplace app listing settings.
![Publish this plan button](/assets/images/marketplace/publish-this-plan-button.png)
### About saving pricing plans

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше