carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1# platform's CI on amadan
2
3`ci.d/` is this repo's gate, running on a self-hosted amadan runner.
4**It is the only one.** `.github/workflows/ci.yml` was deleted on
52026-08-24; nothing stands behind these three steps. A green run here
6is the whole of what "green" means for this repo, and a red one is not
7a discrepancy to reconcile against a more official run somewhere else.
8
9The workflow went for two reasons that arrived together. The steps here
10had caught up with it and then gone past it — the last gap, `gofmt`,
11closed by *widening*, so this gate is now strictly the tighter of the
12two (see below). And GitHub Actions on the `carlosframework` account
13had stopped starting jobs at all over billing, so the "required check"
14had been gating nothing for some time before anyone removed it. The
15evidence for the first half is the run on `cd47f38`, green on the real
16arm64 worker with all four sections in the log: `=== gate ===`
17including `gofmt -l .: clean`, `=== cross ===` with all five targets,
18and `=== minio-contract ===` with `--- PASS: TestDeliveredContractMinio`
19and its five subtests.
20
21## Where each step came from
22
23This table is provenance, not a checklist against a live file. Every
24step here is shaped the way it is because of the job it descends from,
25and dropping that history makes the scripts read as arbitrary choices
26rather than as ported ones. The left column names a job in a file that
27no longer exists.
28
29| descended from | here | |
30|---|---|---|
31| `gate` | `10-gate` | build · vet · `go test ./... -count=1` |
32| `cross` | `20-cross@5` | one target per shard, all five |
33| `minio-contract` | `30-minio-contract` | MinIO on loopback, no container |
34| `gofmt` | `10-gate` | repo-wide, via `make test` — see below |
35
36## `gofmt`: ported by widening it, not by reproducing it
37
38This section is the reason it was safe to delete the workflow, so it is
39worth keeping even now that the comparison is with a dead file. The
40whole risk in a `ci.d/` that covers *less* than what it replaces is
41that it invites people to read a green run as meaning more than it
42does — and that risk did not end when the other gate did. It moved:
43there is nothing left to compare against, so a gap here is now a gap
44full stop. This file is the check on that, and it has to stay true.
45
46**`gofmt`** was the last gap, and it closed by widening rather than by
47imitation. The workflow checked only the files a PR changed, because it
48needed a **base SHA** — a GitHub concept. amadan CI hands a job its
49commit and its branch and has no notion of what it is a pull request
50against, so that job could not be reproduced faithfully here.
51
52It did not need to be. The scoping existed to protect three
53pre-existing unformatted files, and those are gone: `gofmt -l .` over
54the whole tree is clean today. So `10-gate` runs `make test`, whose
55recipe already contains a **repo-wide** gofmt check — strictly stronger
56than the job it replaced, and one definition shared with what a
57developer runs locally rather than a second list that can drift.
58
59The rule that survives from the old scoping is the one worth keeping:
60if a repo-wide check ever starts failing on arrival, fix the tree
61rather than narrowing the check, because a gate people learn to ignore
62is not a gate.
63
64## `minio-contract`, and why it turned out to be portable
65
66It was listed here as impossible: it started MinIO in Docker, and amadan
67jobs get no container runtime. That conflated the job with its
68packaging. MinIO and `mc` are single static Go binaries, and
69`TestDeliveredContractMinio` only wants an endpoint and credentials over
70HTTP — it has no opinion about what is serving. So `30-minio-contract`
71downloads both binaries at pinned versions, verifies them against pinned
72sha256 digests, and runs the server on loopback inside the job's
73existing bubblewrap sandbox. Nothing persists on the box.
74
75The test **skips itself** unless `CARLOS_MINIO_TEST=1`, and a skipped
76test exits 0. The step therefore requires the parent's `--- PASS:` line
77to appear in the output and fails without it, so a dropped env var
78cannot turn this into a green step that exercised nothing.
79