ci: speed up pipeline — NuGet cache + prebuilt Playwright image #74

Merged
not merged 2 commits from chore/73-ci-speedups into main 2026-07-13 13:59:16 +00:00
Contributor

What & why

Two low-risk, no-infra CI speedups (issue #73). Keeps the serial single-runner layout; parallelism is deferred as a separate infra decision.

  • Cache the NuGet package store across the four .NET jobs (lint, build, unit, mutation) — each previously restored from the network. No lock files exist, so setup-dotnet's built-in cache doesn't apply; use actions/cache@v3 (dodges the @v4 GHES guard) keyed on **/*.csproj. Best-effort: a miss just restores from the network.
  • Prebuilt Playwright image for the e2e lane — run-e2e-check.sh downloaded ~150 MB of Chromium every verify-stack run. Switch to mcr.microsoft.com/playwright:v1.61.1-noble (browsers baked; tag kept in lockstep with tests/e2e/package.json).

Verification

  • ci.yaml valid YAML; run-e2e-check.sh passes bash -n.
  • Smoke-tested the exact docker create -w /e2e + docker cp + docker start flow on the new image: npm install && npx playwright test launches the baked Chromium (via channel: 'chromium') with no browser download.
  • NuGet cache is a workflow-only change; effect visible from the 2nd run onward (1st populates the cache).

Expected impact

Trims the e2e browser download (~30–90s) and NuGet restore across the .NET jobs (~40–120s) off the ~17 min serial wall-clock. The larger win (parallelism) is tracked separately.

closes #73

## What & why Two low-risk, no-infra CI speedups (issue #73). Keeps the serial single-runner layout; parallelism is deferred as a separate infra decision. - **Cache the NuGet package store** across the four .NET jobs (lint, build, unit, mutation) — each previously restored from the network. No lock files exist, so `setup-dotnet`'s built-in cache doesn't apply; use `actions/cache@v3` (dodges the @v4 GHES guard) keyed on `**/*.csproj`. Best-effort: a miss just restores from the network. - **Prebuilt Playwright image** for the e2e lane — `run-e2e-check.sh` downloaded ~150 MB of Chromium every `verify-stack` run. Switch to `mcr.microsoft.com/playwright:v1.61.1-noble` (browsers baked; tag kept in lockstep with `tests/e2e/package.json`). ## Verification - `ci.yaml` valid YAML; `run-e2e-check.sh` passes `bash -n`. - Smoke-tested the exact `docker create -w /e2e` + `docker cp` + `docker start` flow on the new image: `npm install && npx playwright test` launches the baked Chromium (via `channel: 'chromium'`) with **no** browser download. - NuGet cache is a workflow-only change; effect visible from the 2nd run onward (1st populates the cache). ## Expected impact Trims the e2e browser download (~30–90s) and NuGet restore across the .NET jobs (~40–120s) off the ~17 min serial wall-clock. The larger win (parallelism) is tracked separately. closes #73
not added 2 commits 2026-07-13 13:29:31 +00:00
lint, build, unit and mutation each restored packages from the network on every
run. There are no lock files (so setup-dotnet's built-in cache doesn't apply), so
cache ~/.nuget/packages keyed on the project files via actions/cache. Pinned @v3
to avoid the GHES guard that breaks @v4 on Gitea (gitea-actions-gotchas.md); the
cache is best-effort, so a miss simply restores from the network.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ci(e2e): run Playwright from the prebuilt image instead of downloading browsers (refs #73)
All checks were successful
CI / build (pull_request) Successful in 56s
CI / mutation (pull_request) Successful in 4m6s
CI / verify-stack (pull_request) Successful in 7m3s
CI / lint (pull_request) Successful in 5m43s
CI / unit (pull_request) Successful in 1m0s
CI / frontend (pull_request) Successful in 1m50s
2b9eb5eb41
The verify-e2e lane downloaded ~150 MB of Chromium (npx playwright install) on
every verify-stack run. Use the official mcr.microsoft.com/playwright image with
browsers pre-baked; npm install still pins @playwright/test from tests/e2e, and
the image tag is kept in lockstep with that version. Verified the exact
create + docker cp + start flow launches the baked browser with no download.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
not merged commit 7e8c5d7b51 into main 2026-07-13 13:59:16 +00:00
Sign in to join this conversation.