fix(tui): Work summary lifecycle, actionable title, and top-area hierarchy #572
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: Web Frontend | |
| on: | |
| push: | |
| branches: [master, main] | |
| pull_request: | |
| branches: [master, main] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| lint: | |
| name: Lint & Type Check | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: web | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v7 | |
| with: | |
| node-version: 22 | |
| cache: 'npm' | |
| cache-dependency-path: web/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Check facts drift | |
| # facts.generated.ts is TRACKED (committed), so verify the committed | |
| # copy matches the workspace BEFORE regenerating. Running prebuild first | |
| # would self-heal the working tree and let a stale committed file pass | |
| # (#3771). check:facts ignores the volatile generatedAt/latestRelease | |
| # fields by design, so it is safe to run against the committed copy that | |
| # exists at checkout. | |
| run: npm run check:facts | |
| - name: Generate derived facts | |
| # Regenerate after the drift gate so tsc --noEmit (TS2307 without it) and | |
| # the build use a current facts.generated.ts. When the gate passes this | |
| # only refreshes the generatedAt timestamp. | |
| run: npm run prebuild | |
| - name: Check docs parity | |
| # Fails CI when docs-map.ts references non-existent repo files or | |
| # when website version / command snippets are stale. | |
| run: npm run check:docs | |
| - name: Run tests | |
| run: npm test | |
| - name: Run ESLint | |
| run: npm run lint | |
| - name: TypeScript type check | |
| run: npx tsc --noEmit | |
| - name: Build production site | |
| run: npm run build | |
| deploy: | |
| name: Deploy to Cloudflare | |
| runs-on: ubuntu-latest | |
| needs: lint | |
| if: github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main' | |
| defaults: | |
| run: | |
| working-directory: web | |
| env: | |
| CLOUDFLARE_ACCOUNT_ID: ${{ vars.CLOUDFLARE_ACCOUNT_ID }} | |
| CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: actions/setup-node@v7 | |
| with: | |
| node-version: 22 | |
| cache: 'npm' | |
| cache-dependency-path: web/package-lock.json | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Record deployed/source drift | |
| # Read-only and credential-free. A mismatch is expected before a | |
| # maintainer-approved deployment, so this step reports without gating. | |
| run: npm run compare:deployed-facts -- --expected-revision "$GITHUB_SHA" | |
| - name: Check Cloudflare deploy environment | |
| run: npm run check:deploy-env | |
| - name: Build OpenNext bundle | |
| run: npm run build && npx opennextjs-cloudflare build | |
| - name: Deploy | |
| run: npm run deploy | |
| - name: Verify exact deployed revision | |
| # The public /api/facts receipt must identify this workflow's exact | |
| # checkout before the manual deployment run can finish green. | |
| run: npm run check:deployed-facts -- --expected-revision "$GITHUB_SHA" --attempts 10 --retry-delay-ms 3000 |