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).
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.
## 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
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>
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 main2026-07-13 13:59:16 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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.
setup-dotnet's built-in cache doesn't apply; useactions/cache@v3(dodges the @v4 GHES guard) keyed on**/*.csproj. Best-effort: a miss just restores from the network.run-e2e-check.shdownloaded ~150 MB of Chromium everyverify-stackrun. Switch tomcr.microsoft.com/playwright:v1.61.1-noble(browsers baked; tag kept in lockstep withtests/e2e/package.json).Verification
ci.yamlvalid YAML;run-e2e-check.shpassesbash -n.docker create -w /e2e+docker cp+docker startflow on the new image:npm install && npx playwright testlaunches the baked Chromium (viachannel: 'chromium') with no browser download.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