Build and Deploy Pages #24
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: Build and Deploy Pages | |
| on: | |
| push: | |
| pull_request: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| concurrency: | |
| group: pages-${{ github.event_name }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| - name: Setup Node | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 24 | |
| cache: npm | |
| - name: Install Node dependencies | |
| run: npm ci | |
| - name: Check executable bits | |
| run: npm run check:mode | |
| - name: Validate documentation hosting tools | |
| run: npm run check:docs-hosting | |
| - name: Build site | |
| run: npm run build:pages | |
| - name: Validate generated HTML | |
| run: npm run check:html | |
| - name: Validate canonical URLs | |
| run: npm run check:canonical-urls | |
| - name: Validate rendered content and metadata | |
| run: npm run check:site-semantics && npm run test:content | |
| - name: Validate classic URL redirects | |
| run: npm run test:redirect-worker && npm run check:redirect-worker | |
| - name: Validate email routing | |
| run: npm run test:email-worker && npm run check:email-worker | |
| - name: Collect active HTML pages | |
| id: active_pages | |
| run: | | |
| pages="$(./scripts/list-active-html.sh _site | tr '\n' ' ')" | |
| echo "pages=$pages" >> "$GITHUB_OUTPUT" | |
| - name: Accessibility smoke check (Lighthouse) | |
| uses: treosh/lighthouse-ci-action@v12 | |
| with: | |
| configPath: ./lighthouserc.json | |
| uploadArtifacts: true | |
| - name: Check internal links | |
| uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 | |
| with: | |
| args: >- | |
| --verbose --no-progress --offline --exclude-mail | |
| --root-dir '${{ github.workspace }}/_site' | |
| --exclude '^file://.*/_site/doc(-latest)?(/|$)' | |
| ${{ steps.active_pages.outputs.pages }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Check external links | |
| continue-on-error: true | |
| uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 | |
| with: | |
| args: >- | |
| --verbose --no-progress --exclude-mail | |
| --root-dir '${{ github.workspace }}/_site' | |
| --exclude '^file://.*/_site/doc(-latest)?(/|$)' | |
| ${{ steps.active_pages.outputs.pages }} | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Configure Pages | |
| uses: actions/configure-pages@v5 | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v4 | |
| with: | |
| path: ./_site | |
| retention-days: 30 | |
| deploy: | |
| # Keep production deployment manual until the Astro cutover is complete. | |
| # Pushes and pull requests still build and validate the full Pages artifact. | |
| if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' | |
| concurrency: | |
| group: pages-production | |
| cancel-in-progress: false | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v5 |