name: verisure-deploy description: Full deploy pipeline — test, typecheck, deploy to HAOS, smoke test
Run the full deployment pipeline. Abort on any failure — never continue past a red gate.
Steps
- Test suite:
pytest tests/ -x -q— abort if any test fails. - Type check:
pyright verisure_italy/ custom_components/— abort if any new errors. - Lint:
ruff check verisure_italy/ tests/ custom_components/— abort on errors. - Deploy integration files: push all integration Python files +
manifest.jsonto HAOS via SSH pipe. Manifest is load-bearing — it carries the integration version + client library pin, so HACS and HA Dev Tools both show the deployed version correctly:for f in custom_components/verisure_italy/*.py custom_components/verisure_italy/manifest.json; do ssh root@homeassistant -p 22222 \ "cat > /mnt/data/supervisor/homeassistant/custom_components/verisure_italy/$(basename $f)" \ < "$f" done - Deploy client library: the
verisure_italy/package is pip-installed inside the HA Docker container. Must deploy it separately — the integration imports it at runtime:Note: The Python version path (3.14) may change with HA updates. If deploy fails with "No such file or directory", check the actual path with:for f in verisure_italy/*.py; do ssh root@homeassistant -p 22222 \ "docker exec -i homeassistant sh -c 'cat > /usr/local/lib/python3.14/site-packages/verisure_italy/$(basename $f)'" \ < "$f" donessh root@homeassistant -p 22222 "docker exec homeassistant python3 -c \"import verisure_italy; print(verisure_italy.__file__)\"" - Restart HA:
ssh root@homeassistant -p 22222 "ha core restart"— returns immediately once the restart is scheduled; core takes ~30-60s to come back up. - Wait until HA is up: do NOT hard-sleep. The Bash tool blocks long leading
sleep Ncommands.ha core inforeturns info even while core is restarting, so poll the HTTP API instead — it only answers 200 once HA is fully booted:Use this inside a plain Bash call (not Monitor) — it exits as soon as the API responds. You'll get a completion notification automatically.source .env until [ "$(curl -sf -o /dev/null -w '%{http_code}' \ http://homeassistant:8123/api/ -H "Authorization: Bearer $HA_TOKEN")" = "200" ]; do sleep 3 done - Smoke test:
./scripts/smoke_test.sh— abort if any entity/service missing. - Log check:
ssh root@homeassistant -p 22222 "docker logs homeassistant 2>&1 | grep -i verisure_italy | tail -20"— look for ERROR/WARNING.
On failure at any step: stop, show full error, do NOT proceed or auto-fix. On success: report all gates passed.
Deploy does NOT release. Releasing (PyPI + GitHub tag) is a separate manual step.
Live E2E cycle — state and automation restoration (MANDATORY)
If an end-to-end arm/disarm cycle is run against the live panel as
part of verification (either within this skill or downstream in a plan
like docs/plans/*.md), the panel's initial state and the user's
automations must be restored afterwards. This is a real home
alarm — leaving it in the wrong state is a security failure.
Protocol:
- Capture initial state before the first transition.
source .env INITIAL=$(curl -s http://homeassistant:8123/api/states/alarm_control_panel.verisure_alarm \ -H "Authorization: Bearer $HA_TOKEN" | python3 -c "import sys,json;print(json.load(sys.stdin)['state'])") echo "initial: $INITIAL" - Pause automations that would interfere with deliberate
mutations (auto-disarm, morning-disarm, actionable-disarm notification, etc.). List is in auto-memory
project_ha_automations.md. - Cycle through the planned transitions.
- Restore initial state. If
INITIAL == armed_away, the last transition must bealarm_arm_away, notalarm_disarm. Never end the cycle on a different state than where you started. - Re-enable automations paused in step 2.
- Verify:
alarm_control_panel.verisure_alarmstate equalsINITIAL, and every paused automation is back toon.
Do not rely on a plan's default "cycle ends disarmed" template — patch the last transition to restore. If unsure what the initial state was, ASK the user before running the cycle.
Docker Compose Architect
DevOps
Designs optimized Docker Compose configurations.
Incident Postmortem Writer
DevOps
Writes structured and blameless incident postmortem reports.
Runbook Creator
DevOps
Creates clear operational runbooks for common DevOps procedures.