name: Deploy GitHub Pages on: push: branches: [main, feat/cloud-sync-mvp] paths: - 'apps/dashboard/**' - '.github/workflows/pages.yml' workflow_dispatch: permissions: contents: read pages: write id-token: write # Allow one concurrent deployment; let an in-progress run finish. concurrency: group: pages cancel-in-progress: false jobs: deploy: runs-on: ubuntu-latest environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} env: # GitHub Pages serves this project repo from the /vestige/ subpath. # The dashboard must be built with a matching base so every _app/ asset # resolves instead of 404ing. VESTIGE_BASE_PATH: /vestige steps: - uses: actions/checkout@v5 - uses: pnpm/action-setup@v4 with: version: 10 - uses: actions/setup-node@v5 with: node-version: 24 cache: pnpm - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build dashboard run: pnpm --filter @vestige/dashboard build - name: Assemble site root run: | rm -rf _site mkdir -p _site/vestige # Publish the dashboard under /vestige/ (matches VESTIGE_BASE_PATH). cp -r apps/dashboard/build/* _site/vestige/ # Root-level redirect so visitors hitting the bare Pages URL land # on the dashboard instead of a 404. cat > _site/index.html <<'HTML' Vestige

Redirecting to the Vestige dashboard

HTML - uses: actions/configure-pages@v5 - uses: actions/upload-pages-artifact@v3 with: path: _site - id: deployment uses: actions/deploy-pages@v4