# Build and deploy the web app to GitHub Pages. # Enable in repo: Settings → Pages → Source: GitHub Actions. # Site URL: https://.github.io// name: Deploy Web App to GitHub Pages on: push: branches: ["main", "master"] workflow_dispatch: permissions: contents: read pages: write id-token: write concurrency: group: "pages" cancel-in-progress: false env: FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5 - name: Setup Node uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: node-version: "lts/*" cache: "npm" - name: Setup Python uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6 with: python-version: "3.10" - name: Install Python dependencies run: pip install -r tools/requirements.txt - name: Install root dependencies run: npm ci - name: Validate canonical repository state run: | npm run validate:strict npm run validate:glossary npm run validate:references npm run audit:consistency npm run check:warning-budget npm run security:docs npm run security:scan:strict npm run plugin-compat:check npm run bundles:check npm run test - name: Prepare web app (index + skills) run: npm run app:setup - name: Install web-app dependencies run: cd apps/web-app && npm ci - name: Run web app coverage run: npm run app:test:coverage - name: Audit web app dependencies run: npm --prefix apps/web-app audit --audit-level=high - name: Build web app for GitHub Pages run: cd apps/web-app && npm run build env: VITE_BASE_PATH: /${{ github.event.repository.name }}/ SEO_SITE_URL: https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }} - name: Validate SEO artifact quality run: cd apps/web-app && npm run verify:seo -- --require-hosted-url - name: Validate generated sitemap and asset consistency run: | cd apps/web-app test -f dist/robots.txt test -f dist/sitemap.xml test -f dist/site.webmanifest - name: Prepare artifact (404 + .nojekyll) run: | cd apps/web-app/dist cp index.html 404.html touch .nojekyll test -f 404.html - name: Configure GitHub Pages uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5 - name: Upload Pages artifact uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4 with: path: apps/web-app/dist deploy: needs: build runs-on: ubuntu-latest environment: name: github-pages url: ${{ steps.deploy.outputs.page_url }} steps: - name: Deploy to GitHub Pages id: deploy uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5