M3/E5/#17 — SoLEXS parsers #54
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
| # CI for the AdityaNet web platform. Spec §13.3. | |
| # | |
| # Three gates run in parallel. The `e2e` gate is added in the sprint that ships the | |
| # first persona journey — a gate with zero tests is not a gate, it is a slow no-op. | |
| # | |
| # Target wall time is under 12 minutes (§13.3): a pipeline slower than that gets | |
| # bypassed, and a bypassed gate is not a gate. | |
| # | |
| # TOOLCHAIN RESOLUTION — the reason each setup step names an explicit file. | |
| # | |
| # `defaults.run.working-directory` applies ONLY to `run:` steps, never to `uses:` | |
| # steps. Every action below therefore executes at the REPOSITORY ROOT, where this | |
| # project has no package.json — the web app lives in web/. Left implicit, | |
| # pnpm/action-setup found no `packageManager` field and failed the job before a | |
| # single gate ran: | |
| # | |
| # Error: No pnpm version is specified. | |
| # | |
| # So the pnpm version is read from web/package.json (`packageManager`), and Node is | |
| # read from web/.node-version — the SAME file the Render deploy reads, so CI cannot | |
| # pass on a Node version that production does not use. | |
| name: web | |
| # GATE RELIABILITY — why `push` to main carries no path filter. | |
| # | |
| # GitHub truncates the file list it evaluates for `paths:` on very large diffs. A | |
| # 3,231-file restructure changed two files under web/ and this workflow did not run: | |
| # the gate was skipped silently, which is the one failure mode a gate must not have. | |
| # Pull requests carry no filter either, for a second and independent reason recorded | |
| # at the `pull_request` trigger below. The job takes well under a minute. | |
| on: | |
| push: | |
| branches: [main] | |
| # NO `paths:` FILTER ON PULL REQUESTS — a required check that never runs is a | |
| # permanent block, not a skipped one. | |
| # | |
| # `main` requires all four checks (verify, test, budget, lint-and-test) before a merge. | |
| # GitHub reports a required check that was never triggered as "Expected — waiting for | |
| # status to be reported", and the pull request can never be merged. With a path filter, | |
| # a PR touching only web/ would deadlock on lint-and-test, and a PR touching only docs/ | |
| # would deadlock on all four. | |
| # | |
| # Both jobs finish in well under a minute. Running them on every pull request costs | |
| # less than one afternoon spent working out why a green branch will not merge. | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| defaults: | |
| run: | |
| working-directory: web | |
| jobs: | |
| verify: | |
| # Generated-code drift, type errors, and architecture-boundary violations. | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: web/package.json | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: web/.node-version | |
| cache: pnpm | |
| cache-dependency-path: web/pnpm-lock.yaml | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm verify | |
| test: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: web/package.json | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: web/.node-version | |
| cache: pnpm | |
| cache-dependency-path: web/pnpm-lock.yaml | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm test | |
| budget: | |
| # Performance, accessibility, and evidence-consistency budgets are measured | |
| # against real build output, so this gate must build first (§11.6). It also | |
| # re-reads the committed artifacts under artifacts/ — which is why this | |
| # workflow triggers on changes there as well as under web/. | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| package_json_file: web/package.json | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: web/.node-version | |
| cache: pnpm | |
| cache-dependency-path: web/pnpm-lock.yaml | |
| - run: pnpm install --frozen-lockfile | |
| - run: pnpm build | |
| - run: pnpm budget | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: build-output | |
| path: web/dist | |
| retention-days: 7 |