Skip to main content

max / makenotwork

3.6 KB · 70 lines History Blame Raw
1 # How Bento releases pom. Lives here rather than in the daemon's config so it is
2 # versioned with the code it describes.
3 #
4 # A service, not an app or a library: pom is run rather than distributed. There
5 # is no bundle for a user to download and no crate to publish.
6 #
7 # The kind says what pom IS. Who delivers it is a separate question, and the
8 # answer changed: Bento used to install the binary and restart the unit itself
9 # (`[[deploy]]` tables, now gone). Under the Sando/Bento boundary Bento builds
10 # and packages, and Sando decides whether a thing advances a stage. So the
11 # release ends at `collect`, and the daemon's `[handoff.pom]` table carries the
12 # artifact to sandod, which verifies it against its record, gates it, and
13 # promotes it tier by tier.
14 #
15 # That is what pom gets out of the move: a content-addressed release history and
16 # a real rollback horizon, instead of the single `<install-path>.prev` file
17 # Bento's installer kept. pom had the worst deploy story of anything shipped
18 # purely because of its architecture; this is the fix.
19 #
20 # Bento refuses to start if this file and the daemon config disagree — a service
21 # must either deploy itself or hand off, never neither and never both.
22 kind = "service"
23
24 # Two arches, two machines, built natively on each. Sando cannot do this job:
25 # sando-daemon.toml sets build_host = "fw13" and build::run refuses to compile
26 # anywhere else, which is the never-build-on-prod invariant and also makes Sando
27 # single-architecture. pom needs an aarch64 binary for astra, so Sando could
28 # never build half of this release without breaking its own rule.
29 targets = ["linux/x86_64", "linux/aarch64"]
30
31 # Workspace root carries the version.
32 version_path = "Cargo.toml"
33
34 # MNW is one .git over the server, sando, multithreaded, pom and more, each
35 # versioned separately, so the default `v{version}` names no product in
36 # particular here. pom and multithreaded are both at 0.4.1 as it stands, which
37 # makes a bare `v0.4.1` ambiguous the day it is created rather than eventually.
38 tag_format = "pom-v{version}"
39
40 # Still not the both-or-neither gate it looks like: `require_all_targets` is
41 # consulted by `publish`, and pom does not publish. The 0.4.1 release showed what
42 # that costs -- x86_64 installed on the Hetzner box and restarted it while the
43 # aarch64 build was still failing its test gate, leaving the mesh split across
44 # two versions until the retry landed.
45 #
46 # What changes under the handoff is where the guarantee comes from. It is no
47 # longer Bento's to give: each arch is handed over as its own artifact with its
48 # own evidence, and Sando resolves BOTH bundles before it touches a node, so a
49 # version missing its x86_64 half fails the promote whole rather than halfway.
50 # The split-mesh failure moves from "possible, untracked" to "refused by the
51 # promote".
52 #
53 # Left on because it is the right intent and costs nothing.
54 require_all_targets = true
55
56 # No `[[deploy]]` tables. They are what a service that installs ITSELF declares,
57 # and pom no longer does -- the daemon's `[handoff.pom]` sends the collected
58 # artifact to sandod instead, and sandod owns install, restart, health and
59 # rollback from there.
60 #
61 # Kept here as the record of what the old path was, because the addresses moved
62 # to sando's topology rather than disappearing:
63 #
64 # linux/x86_64 root@100.120.174.96 (Tailscale SSH on 22, NOT 2200 -- 2200 is
65 # what the retired deploy.sh used and it refuses this machine's
66 # key for both root and max, which is why 0.4.0 was done by hand)
67 # linux/aarch64 astra
68 # both install_path /usr/local/bin/pom, unit pom.service,
69 # health http://<host>:9100/api/health
70