Code → test → ship
Execute from: 1 · Ship — code → test → deploy (WF-SHIP playbook step). This runbook is the command card when you already know the drill.
Any feature, fix, or config change — daily develop → test → deploy loop.
Pick a pattern
Section titled “Pick a pattern”flowchart TD start["Local change ready"] --> first{"First launch<br/>pre-stable?"} first -->|yes| A["Pattern A — quick SSH / rsync"] first -->|no| B["Pattern B — staging → production"] start --> series{"Multi-commit<br/>feature series?"} series -->|yes| C["Pattern C — batch deploy + tag"] broken{"Deploy broke prod?"} --> D["Pattern D — revert / rollback"]| Pattern | When | Core commands |
|---|---|---|
| A | Pre-stable, rapid iteration | git push origin develop + SSH pull or scoped rsync |
| B | Post-launch, real users | dep deploy staging → test → merge → dep deploy production |
| C | Multi-commit feature | Push all commits → single dep deploy → tag |
| D | Broken production | git revert + redeploy or dep rollback production |
Step 0 — always first
Section titled “Step 0 — always first”# Local site upherd startopen http://<PROJECT>.test
# DB-dependent work only — sync prod → local, then:php artisan migrate --pretend # Expected: SQL preview onlyphp artisan migrate # Expected: migrations apply cleanlyPattern B (default post-launch)
Section titled “Pattern B (default post-launch)”git add . && git commit -m "🔨 🟪 T3 Add-Feature: <description>"git push origin developdep deploy staging# 👤 Test staging URL — then:git checkout production && git merge staging && git push origin productiondep deploy productionPost-deploy smoke
Section titled “Post-deploy smoke”curl -sI https://<YOUR_DOMAIN> | head -1 # Expected: HTTP/2 200curl -s https://<YOUR_DOMAIN>/health | head -c 80 # Expected: {"status":"healthy"ssh <SSH_ALIAS> "tail -20 storage/logs/laravel.log | grep -i error || true"ssh <SSH_ALIAS> "cd <DEPLOY_PATH> && php artisan queue:restart"Abort if
Section titled “Abort if”Friday after 3 PM · destructive migration without backup · tests failing locally · you cannot monitor for 2+ hours.