generated from json-schema-org/repo-template
-
-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Link Checker Report Github Action (#94)
* add link checker workflow * fix cron syntax * update packageManager from yarn to pnpm * add --frozen-lockfile flag * update url in args in link-checker.yaml
- Loading branch information
Showing
1 changed file
with
93 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
name: Link Checker | ||
|
||
on: | ||
repository_dispatch: | ||
workflow_dispatch: | ||
schedule: | ||
- cron: '0 0 1 * *' # Run at midnight on the first of every month | ||
|
||
jobs: | ||
linkChecker: | ||
name: Check and report broken links | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v4 | ||
with: | ||
submodules: 'recursive' | ||
|
||
- name: Corepack enable | ||
run: corepack enable | ||
|
||
- name: Set up Node.js | ||
uses: actions/setup-node@v4 | ||
with: | ||
node-version: '20' | ||
|
||
- name: Get Token | ||
uses: actions/create-github-app-token@v1 | ||
id: get_workflow_token | ||
with: | ||
app-id: ${{ vars.APP_ID }} | ||
private-key: ${{ secrets.PRIVATE_KEY }} | ||
|
||
- name: Install Dependencies | ||
run: pnpm install --frozen-lockfile | ||
|
||
- name: Serve App Locally | ||
run: pnpm run dev & | ||
|
||
- name: Wait for App to Start | ||
run: sleep 20 | ||
|
||
# This will restore the lychee cache | ||
- name: Restore lychee cache | ||
uses: actions/cache@v4 | ||
with: | ||
path: .lycheecache | ||
key: cache-lychee-${{ github.sha }} | ||
restore-keys: cache-lychee- | ||
|
||
# This will run the link checker on all markdown files in the pages directory | ||
- name: Link Checker | ||
id: lychee | ||
uses: lycheeverse/lychee-action@v1 | ||
with: | ||
args: --base https://tour.json-schema.org --verbose --no-progress --accept 200,204,429,403 './content/**/*.mdx' --cache --max-cache-age 1d https://tour.json-schema.org | ||
token: ${{secrets.GITHUB_TOKEN}} | ||
|
||
- name: Install Octokit | ||
run: pnpm add @octokit/[email protected] | ||
|
||
# This will create an issue with the link checker report if it does not exist, otherwise it will update the existing issue. | ||
|
||
- name: Create Issue | ||
if: env.lychee_exit_code != 0 | ||
uses: actions/github-script@v7 | ||
env: | ||
AUTH_TOKEN: ${{ steps.get_workflow_token.outputs.token }} | ||
with: | ||
script: | | ||
const { Octokit } = require("@octokit/core"); | ||
const octokit = new Octokit({ auth: process.env.AUTH_TOKEN }); | ||
const allIssues = await octokit.request('GET /repos/{owner}/{repo}/issues', { | ||
owner: context.repo.owner, | ||
repo: context.repo.repo | ||
}); | ||
const existingIssue = allIssues.data.find(issue => issue.title === 'Link Checker Report'); | ||
if (existingIssue) { | ||
await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', { | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
issue_number: existingIssue.number, | ||
body: '## Link Checker Report\n\n' + require('fs').readFileSync('./lychee/out.md', 'utf8') | ||
}); | ||
} else { | ||
await octokit.request('POST /repos/{owner}/{repo}/issues', { | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
title: 'Link Checker Report', | ||
body: '## Link Checker Report\n\n' + require('fs').readFileSync('./lychee/out.md', 'utf8') | ||
}); | ||
} |