зеркало из https://github.com/github/docs.git
118 строки
4.8 KiB
YAML
118 строки
4.8 KiB
YAML
name: Check all English links
|
|
|
|
# **What it does**: This script once a day checks all English links and reports in issues.
|
|
# **Why we have it**: We want to know if any links break.
|
|
# **Who does it impact**: Docs content.
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: '40 19 * * *' # once a day at 19:40 UTC / 11:40 PST
|
|
|
|
permissions:
|
|
contents: read
|
|
issues: write
|
|
|
|
jobs:
|
|
check_all_english_links:
|
|
name: Check all links
|
|
if: github.repository == 'github/docs-internal'
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.DOCUBOT_READORG_REPO_WORKFLOW_SCOPES }}
|
|
FIRST_RESPONDER_PROJECT: Docs content first responder
|
|
REPORT_AUTHOR: docubot
|
|
REPORT_LABEL: broken link report
|
|
REPORT_REPOSITORY: github/docs-content
|
|
steps:
|
|
- name: Check out repo's default branch
|
|
uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
|
|
- name: Setup Node
|
|
uses: actions/setup-node@1f8c6b94b26d0feae1e387ca63ccbdc44d27b561
|
|
with:
|
|
node-version: 16.14.x
|
|
cache: npm
|
|
- name: npm ci
|
|
run: npm ci
|
|
- name: Cache nextjs build
|
|
uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed
|
|
with:
|
|
path: .next/cache
|
|
key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }}
|
|
- name: npm run build
|
|
run: npm run build
|
|
- name: Run script
|
|
run: |
|
|
script/check-english-links.js > broken_links.md
|
|
|
|
# check-english-links.js returns 0 if no links are broken, and 1 if any links
|
|
# are broken. When an Actions step's exit code is 1, the action run's job status
|
|
# is failure and the run ends. The following steps create an issue for the
|
|
# broken link report only if any links are broken, so `if: ${{ failure() }}`
|
|
# ensures the steps run despite the previous step's failure of the job.
|
|
#
|
|
# https://docs.github.com/actions/reference/context-and-expression-syntax-for-github-actions#job-status-check-functions
|
|
|
|
- if: ${{ failure() }}
|
|
name: Get title for issue
|
|
id: check
|
|
run: echo "::set-output name=title::$(head -1 broken_links.md)"
|
|
- if: ${{ failure() }}
|
|
name: Create issue from file
|
|
id: broken-link-report
|
|
uses: peter-evans/create-issue-from-file@b4f9ee0a9d4abbfc6986601d9b1a4f8f8e74c77e
|
|
with:
|
|
token: ${{ env.GITHUB_TOKEN }}
|
|
|
|
title: ${{ steps.check.outputs.title }}
|
|
content-filepath: ./broken_links.md
|
|
repository: ${{ env.REPORT_REPOSITORY }}
|
|
labels: ${{ env.REPORT_LABEL }}
|
|
- if: ${{ failure() }}
|
|
name: Close and/or comment on old issues
|
|
env:
|
|
NEW_REPORT_URL: 'https://github.com/${{ env.REPORT_REPOSITORY }}/issues/${{ steps.broken-link-report.outputs.issue-number }}'
|
|
run: |
|
|
gh alias set list-reports "issue list \
|
|
--repo ${{ env.REPORT_REPOSITORY }} \
|
|
--author ${{ env.REPORT_AUTHOR }} \
|
|
--label '${{ env.REPORT_LABEL }}'"
|
|
|
|
# Link to the previous report from the new report that triggered this
|
|
# workflow run.
|
|
|
|
previous_report_url=$(gh list-reports \
|
|
--state all \
|
|
--limit 2 \
|
|
--json url \
|
|
--jq '.[].url' \
|
|
| grep -v ${{ env.NEW_REPORT_URL }} | head -1)
|
|
|
|
gh issue comment ${{ env.NEW_REPORT_URL }} --body "⬅️ [Previous report]($previous_report_url)"
|
|
|
|
# If an old report is open and assigned to someone, link to the newer
|
|
# report without closing the old report.
|
|
|
|
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
|
|
|
|
# Link to the newer report from any older report that is still open,
|
|
# then close the older report and remove it from the first responder's
|
|
# project board.
|
|
|
|
for issue_url in $(gh list-reports \
|
|
--search 'no:assignee' \
|
|
--json url \
|
|
--jq '.[].url'); do
|
|
if [ "$issue_url" != "${{ env.NEW_REPORT_URL }}" ]; then
|
|
gh issue comment $issue_url --body "➡️ [Newer report](${{ env.NEW_REPORT_URL }})"
|
|
gh issue close $issue_url
|
|
gh issue edit $issue_url --remove-project "${{ env.FIRST_RESPONDER_PROJECT }}"
|
|
fi
|
|
done
|