Commit 5b0b085f73
Verified · cmc ci/build: success ci/test: error ci/vuln: success
Layout: unified · split
CHANGELOG.org +74
| @@ -4,6 +4,80 @@ Versioning follows semver from v0.1.0. Database migrations run | |||
| 4 | automatically on daemon start; upgrade notes appear per release when | 4 | automatically on daemon start; upgrade notes appear per release when |
| 5 | anything beyond "replace the binary and restart" is needed. | 5 | anything beyond "replace the binary and restart" is needed. |
| 6 | 6 | ||
| 7 | * v1.6.0 — 2026-09-02 | ||
| 8 | |||
| 9 | The v1.4.0 admin surface answered questions about accounts. This one | ||
| 10 | answers questions about the machinery: which runner is alive, what is | ||
| 11 | stuck, whether last night's backup exists, and it lets an operator stop | ||
| 12 | a 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 | |||
| 53 | Replace both binaries and restart: =make deploy= for the daemon, then | ||
| 54 | =make deploy-runner= for the runner, which carries its half of running- | ||
| 55 | build 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 | |||
| 61 | Merge 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 | |||
| 79 | Replace the binary and restart. No migration. | ||
| 80 | |||
| 7 | * v1.4.0 — 2026-09-01 | 81 | * v1.4.0 — 2026-09-01 |
| 8 | 82 | ||
| 9 | Until now the instance had one operator surface: root on the host. Every | 83 | Until now the instance had one operator surface: root on the host. Every |