Commit 5b0b085f73

5b0b085f733dfc9ea07726c92c1c170d84617345

parent: 99de33111e

Verified · cmc ci/build: success ci/test: error ci/vuln: success

cmc <hello@cleberg.net> · 2026-09-02 04:13 UTC

CHANGELOG: v1.5.0 and v1.6.0

Layout: unified · split

CHANGELOG.org +74
@@ -4,6 +4,80 @@ Versioning follows semver from v0.1.0. Database migrations run
44automatically on daemon start; upgrade notes appear per release when
55anything beyond "replace the binary and restart" is needed.
66
7* v1.6.0 — 2026-09-02
8
9The v1.4.0 admin surface answered questions about accounts. This one
10answers questions about the machinery: which runner is alive, what is
11stuck, whether last night's backup exists, and it lets an operator stop
12a build instead of waiting it out.
13
14- A build a runner claimed and never reported is failed by the
15 scheduler's minute tick, with no runner involved. It used to happen
16 only when some runner polled again, so a dead sole runner left its
17 builds running forever. =GITBAY_STALE_BUILD_DEADLINE= shortens the
18 deadline for tests. #75
19- Runners are visible. Migration 0030 adds =runner_seen=: one row per
20 runner account with its last poll, the =-repos= scope it asked for,
21 and the build it holds. =admin runners= lists them, over SSH and on
22 the host. #76
23- =GET /healthz=: whether the database answers and which commit serves,
24 no auth, no repository data, 503 when the database does not answer.
25 =healthz= joins the reserved names. #77
26- The host monitor's hourly reading carries the age of the newest full
27 backup and database snapshot, alerting at 25 and 2 hours, and the
28 daemon's own =/healthz= answer read through =site_url=. Both ride the
29 journald line and the webhook body. #78
30- =admin stats= reports =lfs_bytes=. =admin gc --lfs= scans every
31 repository's objects for LFS pointers and removes stored objects none
32 names, keeping anything younger than a day since git lfs uploads
33 before it pushes. #79
34- =admin backup --verify <archive>= reads an archive back: SQLite's
35 integrity check on the snapshot, and the repositories it names against
36 the archive's. A database-only archive says so. Damage or a missing
37 repository exits non-zero. #80
38- A commit that already passed a job on another branch is not built
39 again when a fast-forward lands it. Merging the six-layer v1.6.0 stack
40 had queued eighteen jobs for commits that had each just gone green.
41 Failed or abandoned builds still re-queue. #90
42- =build cancel <owner/name> <n>= withdraws a queued build or ends a
43 running one. For a running build the server closes the runner's log
44 session, the runner kills the step within seconds, and its late report
45 changes nothing. The commit status goes back to the passed result from
46 another build of the same commit when one exists, else reads
47 =cancelled=. Needs write access.
48- Deploys copy with =rsync --partial=, so a transfer the host's load
49 stalled resumes, and =make deploy-runner= installs a systemd drop-in
50 (=Nice=10=, =CPUWeight=30=, =IOWeight=30=) so a build never starves the
51 host's sshd again.
52
53Replace both binaries and restart: =make deploy= for the daemon, then
54=make deploy-runner= for the runner, which carries its half of running-
55build cancellation and installs the drop-in. Migration 0030 adds the
56=runner_seen= table on start. The monitor change ships in
57=deploy/cloud-init.yaml=; an existing host takes it by hand.
58
59* v1.5.0 — 2026-09-02
60
61Merge requests stack.
62
63- A merge request whose target is the source branch of another open
64 merge request in the same repository is stacked on it. Nothing is
65 stored and no flag exists; the forge reads the stack from the
66 branches. =mr create= says =stacked on !A= when it applies, =mr show=
67 carries =stacked_on= and =stacked=, =mr list= rows carry =stacked_on=,
68 and the page says both directions in the header. #87
69- When the lower merge request merges, everything stacked on it is
70 retargeted onto what it merged into, with a system comment naming the
71 merge and its reviews kept: after a fast-forward or merge commit the
72 diff against the new target is the diff they were of. A squash or
73 rebase merge under a stack is refused, naming the stack, since it
74 would rewrite the commits the stack builds on.
75- The first stack merged on gitbay.org was the six merge requests of
76 v1.6.0, bottom-up, with no =mr retarget= typed. The wiki's
77 Stacked-MRs page walks through it.
78
79Replace the binary and restart. No migration.
80
781* v1.4.0 — 2026-09-01
882
983Until now the instance had one operator surface: root on the host. Every