feat(deploy): runbook/ledger templates + bridge schemas + gitignore transient state
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ho5EQCFTSvYamuRtVZpp2d
This commit is contained in:
parent
24e6b84add
commit
1c5c85e422
4
.gitignore
vendored
4
.gitignore
vendored
@ -132,3 +132,7 @@ skills-external/frontend-design/
|
|||||||
# pollution dir is ignored.
|
# pollution dir is ignored.
|
||||||
/.agents/
|
/.agents/
|
||||||
/skills-lock.json
|
/skills-lock.json
|
||||||
|
|
||||||
|
# deploy: transient per-deploy state (the runbook/ledger/oracle ARE committed)
|
||||||
|
.claude/deploy/NEXT.sh
|
||||||
|
.claude/deploy/PENDING.json
|
||||||
|
|||||||
10
templates/deploy/INCIDENTS.md
Normal file
10
templates/deploy/INCIDENTS.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Deploy incidents (append-only) — DEP-NNN
|
||||||
|
|
||||||
|
<!-- One entry per incident. Next ID = grep '^## DEP-' | max+1. Mirrors blockers.md. -->
|
||||||
|
<!-- ## DEP-NNN — <step> failed
|
||||||
|
- date: YYYY-MM-DD
|
||||||
|
- step: <runbook step + label>
|
||||||
|
- error: `<verbatim error>`
|
||||||
|
- cause: <root cause>
|
||||||
|
- fix: <what changed in PROCEDURE.md>
|
||||||
|
- resolved-by: <commit sha> -->
|
||||||
25
templates/deploy/PROCEDURE.md
Normal file
25
templates/deploy/PROCEDURE.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# === deploy runbook (reference) — NOT run directly. Instantiated to NEXT.sh per delta. ===
|
||||||
|
# Fixed steps run every deploy; annotated steps (@delta lines) re-instantiate from the delta.
|
||||||
|
# @config push_deploy_tags=false
|
||||||
|
# NOTE grammar: glob=<pat>:each repeats the command per matching file (e.g. psql -f <each>);
|
||||||
|
# glob=<pat>:list runs once + lists matching files as VERIFY items; when=<pat,...> is conditional.
|
||||||
|
|
||||||
|
# 1) backup BEFORE any forward-only migration
|
||||||
|
ssh "$DEPLOY_HOST" 'pg_dump "$DB" > ~/backups/pre-deploy-$(date +%F-%H%M).sql' # VERIFY: dump size > 0
|
||||||
|
|
||||||
|
# @delta:migrations glob=supabase/migrations/*.sql:list
|
||||||
|
# 2) apply NEW migrations (one command; skill lists the delta migrations to VERIFY)
|
||||||
|
ssh "$DEPLOY_HOST" 'supabase migration up' # VERIFY: "Applied" for each
|
||||||
|
|
||||||
|
# @delta:rebuild when=docker-compose*.yml,Dockerfile,*.dockerfile
|
||||||
|
# 3) rebuild + restart services (only if build inputs changed)
|
||||||
|
ssh "$DEPLOY_HOST" 'docker compose up -d --build' # VERIFY: docker compose ps healthy
|
||||||
|
|
||||||
|
# @delta:deps when=package.json,*lock*,requirements.txt,pyproject.toml
|
||||||
|
# 4) install deps (only if manifests changed)
|
||||||
|
ssh "$DEPLOY_HOST" 'cd app && npm ci' # VERIFY: exit 0
|
||||||
|
|
||||||
|
# 5) reload cache + smoke test (fixed)
|
||||||
|
ssh "$DEPLOY_HOST" 'systemctl reload app'
|
||||||
|
curl -fsS https://$DEPLOY_HOST/health # VERIFY: HTTP 200
|
||||||
Loading…
Reference in New Issue
Block a user