aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorAnders Betts <anders.betts@gmail.com>2026-09-18 10:35:11 +0200
committerAnders Betts <anders.betts@gmail.com>2026-09-18 10:35:11 +0200
commit1e5b4927e5ae1d542d51158eb995d4f4b5a8b1c5 (patch)
tree5d2b414abbe6550eaf403c6aa4b5f75eb703fa01 /docs
parent7a0771215d9bd52dc9d6913abee56a9f62893d3e (diff)
downloadbokf-1e5b4927e5ae1d542d51158eb995d4f4b5a8b1c5.tar.gz
bokf-1e5b4927e5ae1d542d51158eb995d4f4b5a8b1c5.zip
deploy: --dev hot-reloads the daemon via docker cp + SIGHUPv0.1.14
- bokfd re-execs its own binary on SIGHUP, closing listeners/db first - scripts/deploy.sh --dev cross-builds and copies binaries into the running container, then verifies the reported version
Diffstat (limited to 'docs')
-rw-r--r--docs/DEPLOY.md17
-rw-r--r--docs/PROTOCOL.md5
-rw-r--r--docs/STATE.md4
3 files changed, 24 insertions, 2 deletions
diff --git a/docs/DEPLOY.md b/docs/DEPLOY.md
index 8862fab..2964a19 100644
--- a/docs/DEPLOY.md
+++ b/docs/DEPLOY.md
@@ -50,6 +50,23 @@ to touch an already initialized database. Subsequent `scripts/deploy.sh`
runs update the image, tag and compose file, restart the daemon and wait for
the healthcheck.
+## Fast iteration (`--dev`)
+
+Normal deploys build an image and recreate the container. While developing,
+`scripts/deploy.sh --dev` skips the image entirely:
+
+- the gate (`make` + `make test`) still runs locally,
+- on an architecture mismatch the binaries are cross-compiled here
+ (`deploy/Dockerfile.cross`, ~20 s on a PC),
+- the binaries are copied into the running container with `docker cp`,
+- the daemon is reloaded with `SIGHUP`, which re-execs the binary in place
+ (in-memory sessions are lost, clients reconnect),
+- the version the daemon reports is verified against the tag.
+
+No image is built and the container is not recreated; a later normal deploy
+replaces the copied binaries. Use a descriptive tag, e.g.
+`scripts/deploy.sh --dev v0.2.0-rc1`.
+
## Deploying upgrades
```sh
diff --git a/docs/PROTOCOL.md b/docs/PROTOCOL.md
index f282691..1baf607 100644
--- a/docs/PROTOCOL.md
+++ b/docs/PROTOCOL.md
@@ -488,4 +488,7 @@ beyond the session and calls nothing but public commands.
| `allow_org_create` | `true` | any user may create an org |
Container deployments mount the socket directory, database directory, backup
-and export directories as volumes; the daemon is otherwise stateless.
+and export directories as volumes; the daemon is otherwise stateless. On
+`SIGHUP` the daemon closes its listeners and database and re-executes its own
+binary in place (used by `scripts/deploy.sh --dev`); in-memory sessions are
+reset and clients reconnect.
diff --git a/docs/STATE.md b/docs/STATE.md
index 3cbe448..458833e 100644
--- a/docs/STATE.md
+++ b/docs/STATE.md
@@ -65,7 +65,9 @@ server/protocol/ledger only.
come from a lego sidecar using INWX DNS-01 (`compose.yaml`). Externals
get accounts/roles/tokens, never VPN access. `scripts/deploy.sh` builds
locally and ships over SSH, or builds on the host when architectures
- differ.
+ differ. `scripts/deploy.sh --dev` cross-compiles the binaries here and
+ hot-reloads the daemon (SIGHUP re-exec via `docker cp`), skipping the
+ image build and container recreate.
## Pending decisions