|
```yaml{:copy}
name: Check all English links
```
|
{% data reusables.actions.explanation-name-key %}
|
|
```yaml{:copy}
on:
workflow_dispatch:
schedule:
- cron: '40 20 * * *' # once a day at 20:40 UTC / 12:40 PST
```
|
Определяет `workflow_dispatch` и `scheduled` как триггеры рабочего процесса:
* `workflow_dispatch` позволяет вам вручную запустить рабочий процесс из пользовательского интерфейса. Дополнительные сведения см. на веб-сайте [`workflow_dispatch`](/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch).
* Событие `schedule` позволяет использовать синтаксис `cron`, чтобы определить регулярный интервал для автоматического запуска рабочего процесса. Дополнительные сведения см. на веб-сайте [`schedule`](/actions/reference/events-that-trigger-workflows#schedule).
|
|
```yaml{:copy}
permissions:
contents: read
issues: write
```
|
Изменяет разрешения по умолчанию, предоставленные `GITHUB_TOKEN`. Зависит от потребностей рабочего процесса. Дополнительные сведения см. в статье [Назначение разрешений заданиям](/actions/using-jobs/assigning-permissions-to-jobs).
|
|
```yaml{:copy}
jobs:
```
|
Объединяет все задания, выполняемые в файле рабочего процесса.
|
|
```yaml{:copy}
check_all_english_links:
name: Check all links
```
|
Определяет задание с идентификатором `check_all_english_links` и именем `Check all links`, которое хранится в ключе `jobs`.
|
|
```yaml{:copy}
if: github.repository == 'github/docs-internal'
```
|
Задание `check_all_english_links` можно выполнять только в том случае, если репозиторий имеет имя `docs-internal` и находится в организации `github`. В противном случае задание будет отмечено как _пропущенное_.
|
|
```yaml{:copy}
runs-on: ubuntu-latest
```
|
Настраивает задание для выполнения в последней версии средства выполнения Ubuntu Linux. Это означает, что задание будет выполняться на новой виртуальной машине, размещенной в {% data variables.product.prodname_dotcom %}. Примеры синтаксиса, где используются другие средства выполнения тестов, см. в статье «[Синтаксис рабочего процесса для {% data variables.product.prodname_actions %}](/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)».
|
|
```yaml{:copy}
env:
GITHUB_TOKEN: {% raw %}${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }}{% endraw %}
REPORT_AUTHOR: docubot
REPORT_LABEL: broken link report
REPORT_REPOSITORY: github/docs-content
```
|
Создает пользовательские переменные среды и переопределяет встроенную переменную `GITHUB_TOKEN` для использования пользовательского [секрета](/actions/security-guides/encrypted-secrets). На эти переменные будут использоваться ссылки позже в рабочем процессе.
|
|
```yaml{:copy}
steps:
```
|
Группируют все шаги, которые будут выполняться в рамках задания `check_all_english_links`. Каждое задание в рабочем процессе имеет собственный раздел `steps`.
|
|
```yaml{:copy}
- name: Check out repo's default branch
uses: {% data reusables.actions.action-checkout %}
```
|
Ключевое слово `uses` сообщает заданию, что нужно получить действие с именем `actions/checkout`. Это действие, которое извлекает репозиторий и загружает его в средство выполнения, позволяя выполнять действия в коде (например, средства тестирования). Действие оформления заказа необходимо использовать в любой момент, когда рабочий процесс будет выполняться в коде репозитория или если вы используете действие, определенное в репозитории.
|
|
```yaml{:copy}
- name: Setup Node
uses: {% data reusables.actions.action-setup-node %}
with:
node-version: 16.8.x
cache: npm
```
|
На этом шаге используется действие `actions/setup-node` для установки указанной версии пакета программного обеспечения `node` в средстве выполнения, которое предоставляет доступ к команде `npm`.
|
|
```yaml{:copy}
- name: Run the "npm ci" command
run: npm ci
- name: Run the "npm run build" command
run: npm run build
```
|
Ключевое слово `run` указывает заданию выполнить команду в средстве выполнения. В этом случае команды `npm ci` и `npm run build` выполняются в виде отдельных шагов для установки и сборки приложения Node.js в репозитории.
|
|
```yaml{:copy}
- name: Run script
run: |
script/check-english-links.js > broken_links.md
```
|
Эта команда `run` выполняет скрипт, хранящийся в репозитории в `script/check-english-links.js`, и передает выходные данные в файл с именем `broken_links.md`.
|
|
```yaml{:copy}
- if: {% raw %}${{ failure() }}{% endraw %}
name: Get title for issue
id: check
{%- ifversion actions-save-state-set-output-envs %}
run: echo "title=$(head -1 broken_links.md)" >> $GITHUB_OUTPUT
{%- else %}
run: echo "::set-output name=title::$(head -1 broken_links.md)"
{%- endif %}
```
|
Если скрипт `check-english-links.js` обнаруживает неработающие ссылки и возвращает состояние выхода, отличное от нуля (сбой), используйте [команду рабочего процесса](/actions/using-workflows/workflow-commands-for-github-actions#setting-an-output-parameter), чтобы задать выходные данные, имеющие значение первой строки файла `broken_links.md` (используется в следующем шаге).
|
|
```yaml{:copy}
- if: {% raw %}${{ failure() }}{% endraw %}
name: Create issue from file
id: broken-link-report
uses: peter-evans/create-issue-from-file@b4f9ee0a9d4abbfc6986601d9b1a4f8f8e74c77e
with:
token: {% raw %}${{ env.GITHUB_TOKEN }}{% endraw %}
title: {% raw %}${{ steps.check.outputs.title }}{% endraw %}
content-filepath: ./broken_links.md
repository: {% raw %}${{ env.REPORT_REPOSITORY }}{% endraw %}
labels: {% raw %}${{ env.REPORT_LABEL }}{% endraw %}
```
|
Использует действие `peter-evans/create-issue-from-file`, чтобы создать новую проблему {% data variables.product.prodname_dotcom %}. Этот пример закреплен к определенной версии действия с помощью SHA `b4f9ee0a9d4abbfc6986601d9b1a4f8f8e74c77e`.
|
|
```yaml{:copy}
- if: {% raw %}${{ failure() }}{% endraw %}
name: Close and/or comment on old issues
env:
NEW_REPORT_URL: 'https://github.com/{% raw %}${{ env.REPORT_REPOSITORY }}{% endraw %}/issues/{% raw %}${{ steps.broken-link-report.outputs.issue-number }}{% endraw %}'
run: |
gh alias set list-reports "issue list \
--repo {% raw %}${{ env.REPORT_REPOSITORY }}{% endraw %} \
--author {% raw %}${{ env.REPORT_AUTHOR }}{% endraw %} \
--label '{% raw %}${{ env.REPORT_LABEL }}{% endraw %}'"
previous_report_url=$(gh list-reports \
--state all \
--limit 2 \
--json url \
--jq '.[].url' \
| grep -v {% raw %}${{ env.NEW_REPORT_URL }}{% endraw %} | head -1)
gh issue comment {% raw %}${{ env.NEW_REPORT_URL }}{% endraw %} --body "⬅️ [Previous report]($previous_report_url)"
```
|
Использует [`gh issue list`](https://cli.github.com/manual/gh_issue_list) для поиска ранее созданной проблемы из предыдущих запусков. Используется [псевдоним](https://cli.github.com/manual/gh_alias_set) `gh list-reports` для более простой обработки на последующих шагах. Чтобы получить URL-адрес проблемы, выражение `jq` обрабатывает полученные выходные данные JSON.
Затем используется [`gh issue comment`](https://cli.github.com/manual/gh_issue_comment), чтобы добавить комментарий к новой проблеме, которая ссылается на предыдущую.
|
|
```yaml{:copy}
for issue_url in $(gh list-reports \
--json assignees,url \
--jq '.[] | select (.assignees != []) | .url'); do
if [ "$issue_url" != "${{ env.NEW_REPORT_URL }}" ]; then
gh issue comment $issue_url --body "➡️ [Newer report](${{ env.NEW_REPORT_URL }})"
fi
done
```
|
Если проблема из предыдущего запуска открыта и назначена кому-либо, используйте для [`gh issue comment`](https://cli.github.com/manual/gh_issue_comment), чтобы добавить комментарий со ссылкой на новую проблему.
|
|
```yaml{:copy}
for issue_url in $(gh list-reports \
--search 'no:assignee' \
--json url \
--jq '.[].url'); do
if [ "$issue_url" != "{% raw %}${{ env.NEW_REPORT_URL }}{% endraw %}" ]; then
gh issue comment $issue_url --body "➡️ [Newer report]({% raw %}${{ env.NEW_REPORT_URL }}{% endraw %})"
gh issue close $issue_url
gh issue edit $issue_url --remove-project "{% raw %}${{ env.FIRST_RESPONDER_PROJECT }}{% endraw %}"
fi
done
```
|
Если проблема из предыдущего запуска открыта и не назначена, выполните указанные ниже действия.
* Используйте [`gh issue comment`](https://cli.github.com/manual/gh_issue_comment), чтобы добавить комментарий со ссылкой на новую проблему.
* Используйте [`gh issue close`](https://cli.github.com/manual/gh_issue_close), чтобы закрыть старую проблему.
* Используйте [`gh issue edit`](https://cli.github.com/manual/gh_issue_edit), чтобы изменить старую проблему и удалить ее из определенной доски проекта {% data variables.product.prodname_dotcom %}.
|