deploy foundation: push-based deploy.sh, spec-007, v3.0.0
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# SPEC-007 — Deploy + hosts
|
||||
|
||||
Two uberspace hosts, one release: **fjerkroa** (service `kroa`,
|
||||
config `kroa.toml`) and **ggg** (service `luma`, config `ggg.toml`).
|
||||
Deploys are push-based from the dev machine — `git archive <tag>`
|
||||
over ssh, no repo credentials on the hosts (D-015). Coverage here is
|
||||
`manual`: rows in `manual-verification.md` with date + result.
|
||||
|
||||
### DEP-01 — Deploys go by tag, in place, configs survive (coverage: manual)
|
||||
|
||||
`deploy/deploy.sh <host> <tag>` refuses unknown hosts and refs that
|
||||
are not tags. The tag's tree is extracted over `~/fjerkroa_bot` —
|
||||
untracked files (live TOML config, `history/`, news snapshot) are
|
||||
never touched. Dev-on-host drift ends here: hosts run tag content
|
||||
only.
|
||||
|
||||
### DEP-02 — Per-host service map (coverage: manual)
|
||||
|
||||
fjerkroa → supervisord program `kroa`, config `kroa.toml`; ggg →
|
||||
program `luma`, config `ggg.toml`. The script owns this map; restart
|
||||
via `supervisorctl restart <service>`.
|
||||
|
||||
### DEP-03 — Pre-deploy state backup (coverage: manual)
|
||||
|
||||
Before the restart, every `bot.db` under `~/fjerkroa_bot` is copied
|
||||
to `bot.db.pre-<tag>` on the host. Schema migrations are
|
||||
forward-only (PER-06) — rolling back past a schema bump means
|
||||
restoring this backup.
|
||||
|
||||
### DEP-04 — Smoke test gates the deploy (coverage: manual)
|
||||
|
||||
After restart the script fails loudly unless the service reports
|
||||
RUNNING and the log shows a fresh Discord login line. On failure the
|
||||
operator instruction is printed: deploy the previous tag (DEP-06).
|
||||
|
||||
### DEP-05 — No kroa deploys during service hours (coverage: manual)
|
||||
|
||||
Deploys to fjerkroa between 11:00 and 22:00 Europe/Oslo are refused
|
||||
unless `DEPLOY_FORCE=1` is set. The restaurant does not beta-test
|
||||
during dinner.
|
||||
|
||||
### DEP-06 — Rollback is a deploy of an older tag (coverage: manual)
|
||||
|
||||
`deploy.sh <host> <previous-tag>` is the rollback path; when the
|
||||
schema version moved, restore the DEP-03 backup first. Venv is
|
||||
rebuilt from the tag's pyproject either way.
|
||||
Reference in New Issue
Block a user