chore(deps)(deps-dev): bump @boring-stack-pkg/eslint-plugin-i18n-keys from 0.1.1 to 0.1.2 in /apps/ui #161
Workflow file for this run
This file contains hidden or 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
| name: docs-linkcheck | |
| # Builds the BoringStack docs site and runs lychee against the built output. | |
| # Internal broken links fail the job; external 4xx/5xx are warnings only | |
| # (rate-limited APIs and intermittent third-party 503s are not the docs' | |
| # problem to solve at PR-review time). | |
| on: | |
| push: | |
| branches: [main] | |
| paths: | |
| - "apps/docs/src/**" | |
| - "apps/docs/scripts/**" | |
| - "apps/docs/astro.config.mjs" | |
| - "apps/docs/package.json" | |
| - "apps/docs/bun.lock" | |
| - ".github/workflows/apps-docs-linkcheck.yml" | |
| # PR trigger has NO `paths:` filter — the `linkcheck` check is in | |
| # branch protection's required-checks list, so the workflow must run | |
| # on every PR or branch protection will wait forever for a status | |
| # that never comes ("Expected — Waiting for status to be reported"). | |
| # The expensive build + lychee steps are gated on the internal | |
| # paths-filter below, so PRs that don't touch docs report green | |
| # without doing any real work. | |
| pull_request: {} | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: apps-docs-linkcheck-docs-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| linkcheck: | |
| defaults: | |
| run: | |
| working-directory: apps/docs | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 | |
| - name: Detect docs changes | |
| uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 | |
| id: filter | |
| with: | |
| filters: | | |
| docs: | |
| - 'apps/docs/src/**' | |
| - 'apps/docs/scripts/**' | |
| - 'apps/docs/astro.config.mjs' | |
| - 'apps/docs/package.json' | |
| - 'apps/docs/bun.lock' | |
| - '.github/workflows/apps-docs-linkcheck.yml' | |
| - name: No-op notice for non-docs PRs | |
| if: steps.filter.outputs.docs != 'true' | |
| run: echo "No docs files changed in this PR — link check skipped." | |
| - uses: oven-sh/setup-bun@0c5077e51419868618aeaa5fe8019c62421857d6 # v2.2.0 | |
| if: steps.filter.outputs.docs == 'true' | |
| with: | |
| bun-version: 1.3.14 | |
| - name: Install docs deps | |
| if: steps.filter.outputs.docs == 'true' | |
| run: bun install --frozen-lockfile | |
| - name: Install apps/ui deps for lint-meta export | |
| if: steps.filter.outputs.docs == 'true' | |
| working-directory: apps/ui | |
| run: bun install --frozen-lockfile | |
| - name: Install apps/api deps for lint-meta export | |
| if: steps.filter.outputs.docs == 'true' | |
| working-directory: apps/api | |
| run: bun install --frozen-lockfile | |
| - name: Verify generated docs data | |
| if: steps.filter.outputs.docs == 'true' | |
| env: | |
| BORINGSTACK_UI_DIR: ${{ github.workspace }}/apps/ui | |
| BORINGSTACK_API_DIR: ${{ github.workspace }}/apps/api | |
| run: bun run check:docs-data | |
| - name: Build docs site | |
| if: steps.filter.outputs.docs == 'true' | |
| env: | |
| BORINGSTACK_UI_DIR: ${{ github.workspace }}/apps/ui | |
| BORINGSTACK_API_DIR: ${{ github.workspace }}/apps/api | |
| run: bun run build:ci | |
| - name: Internal link check (fail on broken) | |
| if: steps.filter.outputs.docs == 'true' | |
| uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 | |
| with: | |
| args: >- | |
| --no-progress | |
| --offline | |
| --root-dir ${{ github.workspace }}/apps/docs/dist | |
| '${{ github.workspace }}/apps/docs/dist/**/*.html' | |
| fail: true | |
| - name: External link check (warning only) | |
| if: steps.filter.outputs.docs == 'true' | |
| uses: lycheeverse/lychee-action@8646ba30535128ac92d33dfc9133794bfdd9b411 # v2.8.0 | |
| continue-on-error: true | |
| with: | |
| args: >- | |
| --no-progress | |
| --root-dir ${{ github.workspace }}/apps/docs/dist | |
| --exclude-path './llms-full.txt' | |
| --exclude-path './llms-small.txt' | |
| --exclude '^https?://(localhost|127\.0\.0\.1|.*\.localhost)' | |
| --exclude 'github\.com/boringstack-xyz/.*/(blob|tree)/' | |
| '${{ github.workspace }}/apps/docs/dist/**/*.html' | |
| fail: false | |
| env: | |
| # Authenticate github.com link checks so lychee uses the GitHub API | |
| # (5000 req/h) instead of anonymous requests (60 req/h). Without this, | |
| # every github.com link hits the rate limit and lychee sits in a | |
| # multi-minute backoff — the "unexpectedly big rate limit backoff" warns | |
| # that dragged this step to ~4m. Needs only the default contents:read. | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |