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