make test takes about 35 seconds, over the 20-second target #118

Closed
opened 2026-10-07 13:10:02 +02:00 by clawbot · 6 comments
Collaborator

make test takes about 35 seconds on the shared build host (34 to 46 seconds over four runs under heavy load), over the 20-second target in REPO_POLICIES.md. It became an uncached build of the test phase of Dockerfile in #115.

Where the time goes: every run downloads the Go modules and compiles the standard library and every dependency with the race detector from nothing, about 25 to 30 seconds in one step; the tests themselves take a few seconds. Alongside it, the frontend stage installs its yarn packages (10 to 20 seconds) and also runs yarn build, which the tests do not need.

What could bring it down: a Go build cache kept between runs (a BuildKit cache mount) with -count=1 on go test, so code is not recompiled but every test still runs; this is a policy question, since the policy wants each check build to start from nothing. Short of that, a pinned test base image with the race-compiled standard library already in it.

Model: opus-5-5

`make test` takes about 35 seconds on the shared build host (34 to 46 seconds over four runs under heavy load), over the 20-second target in `REPO_POLICIES.md`. It became an uncached build of the `test` phase of `Dockerfile` in https://git.eeqj.de/sneak/netwatch/pulls/115. Where the time goes: every run downloads the Go modules and compiles the standard library and every dependency with the race detector from nothing, about 25 to 30 seconds in one step; the tests themselves take a few seconds. Alongside it, the `frontend` stage installs its yarn packages (10 to 20 seconds) and also runs `yarn build`, which the tests do not need. What could bring it down: a Go build cache kept between runs (a BuildKit cache mount) with `-count=1` on `go test`, so code is not recompiled but every test still runs; this is a policy question, since the policy wants each check build to start from nothing. Short of that, a pinned test base image with the race-compiled standard library already in it. Model: opus-5-5
clawbot self-assigned this 2026-10-07 13:10:02 +02:00
Author
Collaborator

This waits on sneak/prompts#113, which asks sneak the same question for every Go repository: whether the time limits on make test count compiling, or whether test builds may keep Go's compiled packages between runs. The no-caching ruling on sneak/prompts#40 stands until then, so netwatch keeps its uncached test build at about 35 seconds, green under the 60-second cap, and follows that ruling when it comes.

Model: opus-5-5

This waits on https://git.eeqj.de/sneak/prompts/issues/113, which asks sneak the same question for every Go repository: whether the time limits on `make test` count compiling, or whether test builds may keep Go's compiled packages between runs. The no-caching ruling on https://git.eeqj.de/sneak/prompts/issues/40 stands until then, so netwatch keeps its uncached test build at about 35 seconds, green under the 60-second cap, and follows that ruling when it comes. Model: opus-5-5
clawbot removed their assignment 2026-10-07 13:42:57 +02:00
sneak was assigned by clawbot 2026-10-07 13:42:57 +02:00
sneak was unassigned by clawbot 2026-10-07 13:59:31 +02:00
clawbot self-assigned this 2026-10-07 13:59:31 +02:00
Author
Collaborator

Built now, as it does not depend on sneak/prompts#113: make test stops running yarn build, which the tests do not need. The production build moves to a stage of its own, which the runtime stage copies dist/ from and which still cannot run unless the tests passed. No build cache is added; the Go compile follows the ruling on that issue when it comes. Starts once #30 has moved the files, since both change Dockerfile throughout.

Model: opus-5-5

Built now, as it does not depend on https://git.eeqj.de/sneak/prompts/issues/113: `make test` stops running `yarn build`, which the tests do not need. The production build moves to a stage of its own, which the runtime stage copies `dist/` from and which still cannot run unless the tests passed. No build cache is added; the Go compile follows the ruling on that issue when it comes. Starts once https://git.eeqj.de/sneak/netwatch/issues/30 has moved the files, since both change `Dockerfile` throughout. Model: opus-5-5
Author
Collaborator

Built in #137: make test no longer runs yarn build. The production build is now a frontend-build stage that waits on the lint and test phases, and the runtime stage copies dist/ from it. The Go compile is unchanged and waits on sneak/prompts#113, so this issue stays open.

Model: opus-5-5

Built in https://git.eeqj.de/sneak/netwatch/pulls/137: `make test` no longer runs `yarn build`. The production build is now a `frontend-build` stage that waits on the lint and test phases, and the runtime stage copies `dist/` from it. The Go compile is unchanged and waits on https://git.eeqj.de/sneak/prompts/issues/113, so this issue stays open. Model: opus-5-5
Author
Collaborator

Plan, on sneak's rulings in sneak/prompts#113 and sneak/prompts#130, merged in sneak/prompts as 0653579 on its next: one PR on next that re-vendors REPO_POLICIES.md from that commit and makes the Dockerfile and script/ follow it. Check builds get a new CACHEBUST value instead of --no-cache; in each Go stage the module download comes above ARG CACHEBUST, Go's build cache and golangci-lint's cache are kept as cache mounts, and every step that lints, tests or compiles stays below the line, with go test -count=1. The node stages' yarn install stays below the line, as the ruling does not cover node packages. Then make test is measured on a fresh clone and the result is said here, against the 20-second target.

Model: opus-5-5

Plan, on sneak's rulings in https://git.eeqj.de/sneak/prompts/issues/113 and https://git.eeqj.de/sneak/prompts/issues/130, merged in sneak/prompts as `0653579` on its `next`: one PR on `next` that re-vendors `REPO_POLICIES.md` from that commit and makes the `Dockerfile` and `script/` follow it. Check builds get a new `CACHEBUST` value instead of `--no-cache`; in each Go stage the module download comes above `ARG CACHEBUST`, Go's build cache and golangci-lint's cache are kept as cache mounts, and every step that lints, tests or compiles stays below the line, with `go test -count=1`. The node stages' `yarn install` stays below the line, as the ruling does not cover node packages. Then `make test` is measured on a fresh clone and the result is said here, against the 20-second target. Model: opus-5-5
Author
Collaborator

Built in #171: check builds pass a new CACHEBUST value instead of --no-cache, keep the Go modules in a layer and Go's and golangci-lint's caches as cache mounts, and run both go test runs with -count=1. The issue stays open until make test is measured after the merge.

Model: opus-5-5

Built in https://git.eeqj.de/sneak/netwatch/pulls/171: check builds pass a new `CACHEBUST` value instead of `--no-cache`, keep the Go modules in a layer and Go's and golangci-lint's caches as cache mounts, and run both `go test` runs with `-count=1`. The issue stays open until `make test` is measured after the merge. Model: opus-5-5
Author
Collaborator

Within the target: with #171 on next (4e3943f), make test on a fresh clone takes 8 to 14 seconds on the shared build host under heavy load, every Go and page test running each time. Closed.

Model: opus-5-5

Within the target: with https://git.eeqj.de/sneak/netwatch/pulls/171 on `next` (`4e3943f`), `make test` on a fresh clone takes 8 to 14 seconds on the shared build host under heavy load, every Go and page test running each time. Closed. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/netwatch#118