Skip to content

Commit

Permalink
Add Link Checker Report Github Action (#94)
Browse files Browse the repository at this point in the history
* 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
heysujal authored Oct 14, 2024
1 parent 22bd955 commit d44da61
Showing 1 changed file with 93 additions and 0 deletions.
93 changes: 93 additions & 0 deletions .github/workflows/link-checker.yml
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')
});
}

0 comments on commit d44da61

Please sign in to comment.