bin/repo becomes a remote control: forward host-tree commands over ssh

With a repository host configured (OMARCHY_REPO_HOST / .repo-host), release,
build, sign, promote, update, clean, advance, bootstrap-rc, remove, sync, and
migrate exec on the host over ssh — same code, run where the published tree
lives, after sourcing the host credentials and a --ff-only pull. --local
forces local execution. list/push/deploy/setup never forward. The host itself
has no .repo-host, so ssh'd-in manual use is unchanged. omarchy-release's
advance now rides the same forwarding (one code path), and --host exports
OMARCHY_REPO_HOST so child bin/repo calls follow it.

This closes the gap where bootstrap-rc ran against a workstation's stale
local tree despite .repo-host being set.
This commit is contained in:
Ryan Hughes
2026-08-27 01:10:33 -04:00
parent 161eecd5ff
commit 49ca22fa9f
3 changed files with 75 additions and 17 deletions
+13 -6
View File
@@ -469,12 +469,19 @@ stable — promotion is always this explicit step.
### Build trigger and the build host
Release commands run from anywhere. When the machine you are on **is** the
build host (detected by the published database living in this checkout), host
operations — build triggers, `advance`, promotion — execute locally. From any
other machine they go over ssh to the configured host; without a configured
host, the exact commands to run are printed and the 6-hourly auto-release
timer serves as the backstop.
Release commands run from anywhere. `bin/repo` is a **remote control**: with a
repository host configured, every command that operates on the published tree
(`release`, `build`, `sign`, `promote`, `update`, `clean`, `advance`,
`bootstrap-rc`, `remove`, `sync`, `migrate`) executes ON the host over ssh —
the exact same code, run where the tree lives, so ssh'ing in and running the
same commands by hand behaves identically. Pass `--local` to force execution
on the current machine. `list`, `push`, `deploy`, and `setup` never forward
(`push`/`deploy` exist precisely to move local builds *to* the host).
Without a configured host, commands run locally — which on the build host
itself (no `.repo-host` there) is exactly right, and elsewhere the exact
commands to run are printed by the orchestrator, with the 6-hourly
auto-release timer as the backstop.
The host setting is any destination `ssh` accepts, resolved in this order: