| 1 |
# How Bento releases mnw-cli. Lives here rather than in the daemon's config so |
| 2 |
# it is versioned with the code it describes. |
| 3 |
# |
| 4 |
# A service, not an app or a library: mnw-cli is run rather than distributed. |
| 5 |
# There is no bundle for a user to download and no crate to publish. |
| 6 |
# |
| 7 |
# WHY THIS FILE EXISTS AT ALL, which is the whole point of it. Until 2026-08-23 |
| 8 |
# astra's mnw-cli was a binary somebody had placed there by hand in April, with |
| 9 |
# no release history, no rollback and no way to ask it what it was -- the only |
| 10 |
# handle was the file's mtime. It was four months old against a source tree that |
| 11 |
# had moved on, and nothing could have noticed, because a service outside the |
| 12 |
# pipeline has no release history to be stale against. Infra `e6acf532`. |
| 13 |
kind = "service" |
| 14 |
|
| 15 |
# aarch64 only, and the asymmetry is deliberate rather than an omission. |
| 16 |
# |
| 17 |
# The Hetzner box already gets this binary, but it gets it INSIDE the MNW server |
| 18 |
# release: Sando ships it as a companion to `/opt/mnw/current/companions/mnw-cli`, |
| 19 |
# so prod's copy is pipelined already and building a second x86_64 one here would |
| 20 |
# be two delivery stories for one binary on one machine. astra's copy is the one |
| 21 |
# with no pipeline, and astra is aarch64. |
| 22 |
# |
| 23 |
# If prod ever stops carrying it as a companion, add `linux/x86_64` here and a |
| 24 |
# second `[[deploy]]` -- do not hand-place it. |
| 25 |
targets = ["linux/aarch64"] |
| 26 |
|
| 27 |
version_path = "Cargo.toml" |
| 28 |
|
| 29 |
# MNW is one .git over the server, sando, multithreaded, pom, wam, magicmirror |
| 30 |
# and mnw-cli, each versioned separately, so the default `v{version}` names no |
| 31 |
# product in particular here. |
| 32 |
tag_format = "mnw-cli-v{version}" |
| 33 |
|
| 34 |
# One target, so this is inert either way. Stated rather than omitted so the |
| 35 |
# answer does not have to be worked out from first principles if a second |
| 36 |
# target is ever added. |
| 37 |
require_all_targets = true |
| 38 |
|
| 39 |
# The service host. A deploy destination is deliberately NOT a `[[host]]` in the |
| 40 |
# daemon config: a build host is granted build/package, a service host |
| 41 |
# deploy/restart, and neither is granted the other's. |
| 42 |
# |
| 43 |
# install_path is /usr/local/bin/mnw-cli, which is a MOVE: the running binary |
| 44 |
# was at /opt/mnw-cli/mnw-cli, placed there by hand in April. install-service.sh |
| 45 |
# refuses any dst outside /usr/local/bin, and that guard is the only thing |
| 46 |
# bounding a NOPASSWD sudo grant, so the binary moves rather than the guard |
| 47 |
# widening. That is the same call wam made on 2026-08-15 and for the same |
| 48 |
# reason. The unit's ExecStart moves with it; WorkingDirectory stays |
| 49 |
# /opt/mnw-cli, which is its state directory (.env, HOME, ReadWritePaths) and |
| 50 |
# not where the binary lives. |
| 51 |
# |
| 52 |
# No `health_url`: mnw-cli speaks SSH, not HTTP. The recipe asserts the unit is |
| 53 |
# active and that the port answers with an SSH banner instead, which is the same |
| 54 |
# question in this service's own vocabulary. |
| 55 |
[[deploy]] |
| 56 |
target = "linux/aarch64" |
| 57 |
host = "astra" |
| 58 |
install_path = "/usr/local/bin/mnw-cli" |
| 59 |
service = "mnw-cli.service" |
| 60 |
|