feat(testforge): #677 throwaway-forge test harness, tested at baseline and latest #729

Merged
hexajon merged 2 commits from issue-677-forge-test-harness-matrix into main 2026-10-06 16:52:30 +00:00
Owner

Summary

Add the forge-test harness (ADR 0052): it downloads pinned, checksum-verified Forgejo, Gitea and Traefik binaries, starts a throwaway forge behind a rate-limited Traefik proxy as a non-root user, and gives a test a client to talk to it through the proxy.

Each forge is pinned at two versions and every forge test runs against both: a fixed baseline (Forgejo 15.0.1, Gitea 1.26.1, the versions the compatibility specs and the gap list target) and the latest release. The baseline version is authored in forge-pins.json; the forge-pins bump command fills every checksum and tracks the latest, so no version is hand-edited or hardcoded.

Acceptance, all verified against the real throwaway servers: a client reads each forge's version through the proxy; a fast request stream gets the proxy's rate-limit refusal; a stopped forge surfaces a client error; an unchecked binary fails the run and names the file; the bump writes the pin file and a second run with no new release changes nothing.

Refs #677

## Summary Add the forge-test harness (ADR 0052): it downloads pinned, checksum-verified Forgejo, Gitea and Traefik binaries, starts a throwaway forge behind a rate-limited Traefik proxy as a non-root user, and gives a test a client to talk to it through the proxy. Each forge is pinned at two versions and every forge test runs against both: a fixed baseline (Forgejo 15.0.1, Gitea 1.26.1, the versions the compatibility specs and the gap list target) and the latest release. The baseline version is authored in forge-pins.json; the forge-pins bump command fills every checksum and tracks the latest, so no version is hand-edited or hardcoded. Acceptance, all verified against the real throwaway servers: a client reads each forge's version through the proxy; a fast request stream gets the proxy's rate-limit refusal; a stopped forge surfaces a client error; an unchecked binary fails the run and names the file; the bump writes the pin file and a second run with no new release changes nothing. Refs #677
Initial internal/testforge harness and the madtea-dev forge-pins command:
pinned forge binaries with checksum verification and a checksum-keyed cache,
free-port selection, a Traefik reverse-proxy front, Forgejo and Gitea starters,
acceptance tests behind the forge build tag, and the pin-bump command. Incomplete
and not yet compiling; committed to preserve the work. Refs #677.
feat(testforge): #677 test each forge at a baseline and latest version
All checks were successful
ci / mcp-conformance (pull_request) Successful in 1m32s
drift / govulncheck (pull_request) Has been skipped
drift / forgejo-smoke (pull_request) Has been skipped
drift / surface-diff (pull_request) Successful in 40s
ci / mcp-conformance (push) Successful in -18s
drift / govulncheck (push) Has been skipped
drift / surface-diff (push) Successful in -24s
drift / forgejo-smoke (push) Has been skipped
ci / gate (push) Successful in 9m42s
ci / gate (pull_request) Successful in 18m57s
4c28163967
Grow the pin schema to a baseline+latest pair per forge, with the baseline
version authored in forge-pins.json and the bump filling both checksums. The
harness and its acceptance tests run against both, so the compat-stamped
baseline (Forgejo 15.0.1, Gitea 1.26.1) stays under test while the latest
major is also exercised. Traefik stays a single pin. Record the matrix in
ADR 0052.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
sixfold-space/madtea!729
No description provided.