Skip to content

Validate github/github docs URLs #2

Validate github/github docs URLs

Validate github/github docs URLs #2

name: Validate github/github docs URLs
# **What it does**: Checks the URLs in docs-urls.json in github/github
# **Why we have it**: To ensure the values in docs-urls.json are perfect.
# **Who does it impact**: Docs content.
on:
workflow_dispatch:
schedule:
- cron: '20 16 * * 1' # Run every Monday at 16:20 UTC / 8:20 PST
# See https://gh.io/AAsyyao before uncommenting:
# pull_request:
# paths:
# - 'content/**'
# # In case a relevant dependency changes
# - 'package*.json'
# # The scripts
# - 'src/links/scripts/validate-github-github-docs-urls/**'
# # The workflow
# - .github/workflows/validate-github-github-docs-urls.yml
permissions:
contents: read
issues: write
pull-requests: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
validate_github_github_docs_urls:
name: Validate github/github docs URLs
if: github.repository == 'github/docs-internal'
runs-on: ubuntu-20.04-xl
steps:
- name: Check out repo's default branch
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
# Picking this number is a "best guess". If we make it too large,
# the checkout will take potentially unnecessariily long.
# This reduces the chance that tj-actions/changed-files has to
# fetch deeper history. But if it needs to, it will.
fetch-depth: 10
- uses: ./.github/actions/node-npm-setup
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
token: ${{ secrets.DOCS_BOT_PAT_READPUBLICKEY }}
repository: github/github
ref: master
path: github
- name: Run validation
run: |
# This will generate a .json file which we can use to
# do other things in other steps.
npm run validate-github-github-docs-urls -- validate \
--output checks.json \
github/config/docs-urls.json
- name: Update config/docs-urls.json in github/github (possibly)
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
env:
GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WRITEORG_PROJECT }}
run: |
npm run validate-github-github-docs-urls -- generate-new-json checks.json github/config/docs-urls.json
cd github
git status
git diff
changes=$(git diff --name-only | wc -l)
if [[ $changes -eq 0 ]]; then
echo "There are no changes to commit after running generate-new-json. Exiting this step"
exit 0
fi
current_timestamp=$(date '+%Y-%m-%d-%H%M%S')
branch_name="update-docs-urls-$current_timestamp"
git checkout -b "$branch_name"
current_daystamp=$(date '+%Y-%m-%d')
git commit -a -m "Update Docs URLs from automation ($current_daystamp)"
git push origin "$branch_name"
# XXX TODO
# Perhaps post an issue somewhere, about that the fact that this
# branch has been created and now needs to be turned into a PR
# that some human can take responsibility for.
- name: Clean up old branches in github/github
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
env:
GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WRITEORG_PROJECT }}
run: |
npm run validate-github-github-docs-urls -- clean-up-old-branches --prefix update-docs-urls
echo "To see them all, go to:"
echo "https://github.com/github/github/branches/all?query=update-docs-urls-"
# If a PR comes along to github/docs-internal that causes some
# URLs in docs-urls.json (in github/github) to now fail, then
# we'll want to make the PR author+reviewer aware of this.
# For example, you moved a page without setting up a redirect.
# Or you edited a heading that now breaks a URL with fragment.
# In the latter case, you might want to update the URL in docs-urls.json
# after this PR has landed, or consider using `<a name="..."></a>` as a
# workaround for the time being.
# First, gather the URLs that were relevant
- name: Get changed content/data files
if: ${{ github.event_name == 'pull_request' }}
id: changed-files
uses: tj-actions/changed-files@40853de9f8ce2d6cfdc73c1b96f14e22ba44aec4 # v45.0.0
with:
# No need to escape the file names because we make the output of
# tj-actions/changed-files be set as an environment variable. Not
# as a direct input to the line of bash that uses it.
safe_output: false
files: |
content/**
- name: Generate PR comment
if: ${{ github.event_name == 'pull_request' && steps.changed-files.outputs.any_changed == 'true' }}
env:
# Make it an environment variable so that its value doesn't need to be escaped.
# See https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions#using-an-intermediate-environment-variable
CHANGED_FILES: |-
${{ steps.changed-files.outputs.all_changed_files }}
GITHUB_TOKEN: ${{ secrets.DOCS_BOT_PAT_WRITEORG_PROJECT }}
ISSUE_NUMBER: ${{ github.event.pull_request.number }}
REPOSITORY: ${{ github.repository }}
run: npm run validate-github-github-docs-urls -- post-pr-comment checks.json --changed-files $CHANGED_FILES
- uses: ./.github/actions/slack-alert
if: ${{ failure() && github.event_name == 'schedule' }}
with:
slack_channel_id: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
slack_token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}