--- name: deploy description: Deploy, redeploy, or ship homelab services to a target node. Trigger on any request containing deploy / redeploy / wdróż / zredeployuj / ship for targets control-plane, vps, piha, solaria, or chelsty-infra. --- Always invoke `scripts/deploy/deploy.sh [--dry-run] [--no-gate]` as the **sole entry point**. Never call `deploy-control-plane.sh`, `deploy-node.sh`, or `deploy-local.sh` directly. ## Targets | Target | What it deploys | |---|---| | `control-plane` | observer, supervisor, executor, operator-ui on VPS | | `vps` | all VPS GitOps services (node-agent, npm, outline, joplin, ai-cluster, …) | | `piha` | PIHA services (ha-diag-agent, node-agent, redis, …) | | `solaria` | SOLARIA compute services | | `chelsty-infra` | CHELSTY LTE edge node (30 s SSH timeout) | ## Invocation ```bash scripts/deploy/deploy.sh # full pipeline scripts/deploy/deploy.sh --dry-run # preflight + gate only scripts/deploy/deploy.sh --no-gate # emergency: bypass tests ``` ## Exit Code Handling | Code | Meaning | Required action | |---|---|---| | 0 | Success | Report: target, commit hash, gate status, verify status, elapsed time | | 1 | Preflight failed | Fix the upstream issue (push commits, wake node, switch to master). Never bypass. | | 2 | Gate failed | Show exactly which test/build failed. Do **not** deploy. Fix the failure first. | | 3 | Execute failed | Show full deploy output. Ask user whether to investigate or rollback. | | 4 | Verify failed | Show docker ps output. Discuss rollback with the user. | | 5 | Sudo handoff | Print the exact manual command from stderr **verbatim** and stop. User must run it. | ## Rules - Never pass `--no-gate` unless the user explicitly requests emergency/bypass mode. - Never deploy uncommitted or unpushed code — preflight enforces this; do not help circumvent it. - Canonical branch is `master` — preflight enforces this. - For exit 5: reproduce the handoff command exactly as printed to stderr, then stop.