max / makenotwork
- Co-Authored-By
- Claude Opus 5 (1M context) <noreply@anthropic.com>
1 file changed,
+32 insertions,
-6 deletions
| @@ -16,6 +16,7 @@ | |||
| 16 | 16 | | `bentod.service` | `~/.config/systemd/user/` | The user service unit. | | |
| 17 | 17 | | `bento-daemon.toml.example` | `~/.config/bento/bento-daemon.toml` | Daemon-local config (paths + listen). Absolute paths only — no shell expansion. | | |
| 18 | 18 | | `bento.toml.example` | `~/.config/bento/bento.toml` | Build topology (hosts + apps). `repo` paths are tilde-expanded. | | |
| 19 | + | | (none, hand-written 0600) | `~/.config/bento/bento.env` | `BENTO_API_TOKEN=...` for a tailnet bind. Read by the unit's `EnvironmentFile=-`, so a loopback install can leave it absent. No example file ships: it holds a secret. | | |
| 19 | 20 | ||
| 20 | 21 | ## Stand-up (no root except enable-linger) | |
| 21 | 22 | ||
| @@ -37,17 +38,33 @@ | |||
| 37 | 38 | systemctl --user daemon-reload | |
| 38 | 39 | systemctl --user enable --now bentod | |
| 39 | 40 | ||
| 40 | - | # 4. Verify | |
| 41 | + | # 4. Verify (address must match `listen` in bento-daemon.toml, see Auth below) | |
| 41 | 42 | curl -s http://127.0.0.1:8765/state | python3 -m json.tool | |
| 42 | 43 | ``` | |
| 43 | 44 | ||
| 44 | 45 | ## Auth (CF2) | |
| 45 | 46 | ||
| 46 | - | On the loopback bind above, build triggers are reachable only from fw13, so no | |
| 47 | - | token is required. To operate bentod over the tailnet, bind the tailnet IP in | |
| 48 | - | `bento-daemon.toml` and set `BENTO_API_TOKEN` via an `EnvironmentFile` in the | |
| 49 | - | unit — bentod refuses to start on a non-loopback bind without it (same posture | |
| 50 | - | as Sando's `SANDO_API_TOKEN`). | |
| 47 | + | On a loopback bind, build triggers are reachable only from the daemon's own | |
| 48 | + | host, so no token is required. To operate bentod over the tailnet, bind the | |
| 49 | + | tailnet IP in `bento-daemon.toml` and set `BENTO_API_TOKEN` via an | |
| 50 | + | `EnvironmentFile` in the unit. bentod refuses to start on a non-loopback bind | |
| 51 | + | without it (same posture as Sando's `SANDO_API_TOKEN`). | |
| 52 | + | ||
| 53 | + | **fw13 runs the second form**, not the loopback default the example config | |
| 54 | + | ships. `listen` is the tailnet address and `/build` and `/retry` require the | |
| 55 | + | bearer token, so a `127.0.0.1` curl gets no answer at all rather than an auth | |
| 56 | + | error. Read the address out of the config and the token out of its own file | |
| 57 | + | rather than passing either on a command line: | |
| 58 | + | ||
| 59 | + | ```sh | |
| 60 | + | set -a; . ~/.config/bento/bento.env; set +a | |
| 61 | + | curl -s -X POST http://$(grep -oP '(?<=^listen = ")[^"]+' ~/.config/bento/bento-daemon.toml)/build \ | |
| 62 | + | -H "authorization: Bearer $BENTO_API_TOKEN" -H 'content-type: application/json' \ | |
| 63 | + | -d '{"app":"makeover-webview","version":"0.5.1"}' | |
| 64 | + | ``` | |
| 65 | + | ||
| 66 | + | `/state`, `/status.json` and the log endpoints are read-only and unauthed, so | |
| 67 | + | watching a run needs the address but not the token. | |
| 51 | 68 | ||
| 52 | 69 | ## Recipes | |
| 53 | 70 | ||
| @@ -63,6 +80,15 @@ | |||
| 63 | 80 | ¹ BB has no Developer ID signing / notarization infra or iOS project yet, so its | |
| 64 | 81 | macOS/iOS recipes are deferred until that lands. BB ships in a later wave. | |
| 65 | 82 | ||
| 83 | + | A library crate (`kind = "library"` in its own `bento.toml`) has no per-platform | |
| 84 | + | artifact, so the runner reads a single `publish.rhai` instead of the table above. | |
| 85 | + | Every library configured in the topology now carries one: `makeover`, | |
| 86 | + | `makeover-geometry`, `makeover-build`, `makeover-webview`, `makeover-layout`, | |
| 87 | + | `pter`, `everycycle`, `supernote-push`, `alloy_tui`. That recipe asserts HEAD is | |
| 88 | + | exactly a tag before it uploads, so a release wants `git tag -a v<version>` | |
| 89 | + | first; a crate published by hand before it was wired up has no such tag, and its | |
| 90 | + | next release is the one that gets one. | |
| 91 | + | ||
| 66 | 92 | A `linux.rhai` serves both arches — `build_host()` resolves to the native host | |
| 67 | 93 | the topology assigns the target (`linux/x86_64` → fw13, `linux/aarch64` → astra), | |
| 68 | 94 | so there is no cross-compilation and no hard-coded host name. macOS/iOS recipes |