# Copyright 2025 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: Link Checker on: pull_request: jobs: link-check: runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 with: fetch-depth: 0 - name: Identify Changed Files id: changed-files shell: bash run: | git fetch origin main CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRT origin/main...HEAD) if [ -z "$CHANGED_FILES" ]; then echo "No markdown files changed. Skipping checks." echo "HAS_CHANGES=false" >> $GITHUB_ENV else echo "--- Changed Files to Scan ---" echo "$CHANGED_FILES" echo "-----------------------------" # Flatten newlines to spaces for the args list FILES_FLAT=$(echo "$CHANGED_FILES" | tr '\n' ' ') echo "CHECK_FILES=$FILES_FLAT" >> $GITHUB_ENV echo "HAS_CHANGES=true" >> $GITHUB_ENV fi - name: Restore lychee cache if: env.HAS_CHANGES == 'true' uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5 with: path: .lycheecache key: cache-lychee-${{ github.sha }} restore-keys: cache-lychee- - name: Link Checker id: lychee-check if: env.HAS_CHANGES == 'true' uses: lycheeverse/lychee-action@a8c4c7cb88f0c7386610c35eb25108e448569cb0 # v2 continue-on-error: true with: args: > --quiet --no-progress --cache --max-cache-age 1d --exclude '^neo4j\+.*' --exclude '^bolt://.*' ${{ env.CHECK_FILES }} output: lychee-report.md format: markdown fail: true jobSummary: false debug: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Display Failure Report # Run this ONLY if the link checker failed if: steps.lychee-check.outcome == 'failure' run: | echo "## Link Resolution Note" >> $GITHUB_STEP_SUMMARY echo "Local links and directory changes work differently on GitHub than on the docsite." >> $GITHUB_STEP_SUMMARY echo "You must ensure fixes pass the **GitHub check** and also work with **\`hugo server\`**." >> $GITHUB_STEP_SUMMARY echo "See [Link Checking and Fixing with Lychee](https://github.com/googleapis/genai-toolbox/blob/main/DEVELOPER.md#link-checking-and-fixing-with-lychee) for more details." >> $GITHUB_STEP_SUMMARY echo "---" >> $GITHUB_STEP_SUMMARY echo "### Broken Links Found" >> $GITHUB_STEP_SUMMARY cat ./lychee-report.md >> $GITHUB_STEP_SUMMARY exit 1