Pipeline de déploiement Verisure

VérifiéPrudence

Exécutez le pipeline complet de déploiement pour l'intégration Verisure Italy de Home Assistant : tests, vérification de types, lint, déploiement via SSH vers HAOS, redémarrage et test de fumée.

Spar Skills Guide Bot
DevOpsAvancé
23/07/2026
Claude Code
#home-assistant#deployment#ssh#smoke-test#pipeline

Recommandé pour

Synthèse automatique

Automatise le pipeline de déploiement complet d'une intégration Home Assistant Verisure Italie : tests, typecheck, lint, copie des fichiers vers HAOS par SSH, redémarrage et vérifications post-déploiement.

Points forts

  • Enchaîne des portes de qualité bloquantes (pytest, pyright, ruff) avant toute mise en production
  • Couvre les deux cibles de déploiement distinctes : fichiers d'intégration sur HAOS et bibliothèque cliente pip-installée dans le conteneur Docker
  • Attend la disponibilité réelle de l'API Home Assistant par polling HTTP plutôt qu'un sleep arbitraire
  • Impose un protocole de sauvegarde/restauration de l'état de l'alarme et des automatisations lors des cycles E2E sur le panneau réel

Limites

  • Fortement couplé à une infrastructure personnelle précise (hôte homeassistant, port 22222, HA_TOKEN) et non réutilisable tel quel
  • Le chemin site-packages/python3.14 est fragile et casse à chaque mise à jour de Home Assistant
  • Ne couvre pas la publication (PyPI, tag GitHub), laissée explicitement manuelle
  • Suppose une connaissance externe du projet (auto-memory project_ha_automations.md, scripts/smoke_test.sh) non fournie dans le skill
Quand l'utiliser

À utiliser lorsqu'on doit déployer une nouvelle version de l'intégration verisure_italy sur une instance Home Assistant réelle et vérifier qu'elle démarre correctement.

Quand l'éviter

Ne pas l'utiliser pour publier une release, pour travailler sur une autre intégration, ou sans accès SSH à l'instance HAOS cible.

Analyse de sécurité

Prudence
Score qualité84/100

No exfiltration, obfuscated payloads, or destructive host-wide commands; every action targets the author's own HA instance for a legitimate deploy purpose. However the skill runs as root over SSH, overwrites files in place without backup, handles an HA bearer token, restarts a live system, and can leave a real alarm panel in the wrong armed state — powerful, blast-radius-heavy tooling that warrants a caution rating rather than safe.

Points d'attention
  • •Uses SSH as root to the Home Assistant host (root@homeassistant -p 22222) and `docker exec` into the HA container to overwrite live integration and site-packages files with `cat >` — no backup or rollback path if a deploy is interrupted mid-way
  • •Overwrites a hardcoded interpreter path (/usr/local/lib/python3.14/site-packages/verisure_italy/) which can clobber or misplace files if the HA Python version changes
  • •`source .env` executes whatever shell content that file contains and pulls HA_TOKEN into the environment; the token is later passed on a command line and could be exposed via process listing/logs
  • •Restarts HA core (`ha core restart`) on a live home-automation system — disruptive to automations and any dependent services during the 30-60s window
  • •Directly mutates a real home alarm panel state (arm/disarm) against a live security system; a failure between capture and restore could leave the house disarmed
  • •Step 2 of the E2E protocol depends on an external auto-memory file (project_ha_automations.md) to know which automations to pause — if stale or missing, interfering automations may remain active
Comment cette analyse est faite

Exemples

Deploy new integration version
Deploy the current verisure_italy integration to HAOS and run the full pipeline.
Verify fix on live instance
I fixed the arm/disarm bug — run the deploy pipeline with smoke test and check the logs for verisure_italy errors.
Safe E2E arm/disarm test
Run an end-to-end arm/disarm cycle against the live panel to verify the change, and restore the initial alarm state and my automations afterwards.

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

  1. Test suite: pytest tests/ -x -q — abort if any test fails.
  2. Type check: pyright verisure_italy/ custom_components/ — abort if any new errors.
  3. Lint: ruff check verisure_italy/ tests/ custom_components/ — abort on errors.
  4. Deploy integration files: push all integration Python files + manifest.json to 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
    
  5. 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:
    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"
    done
    
    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: ssh root@homeassistant -p 22222 "docker exec homeassistant python3 -c \"import verisure_italy; print(verisure_italy.__file__)\""
  6. 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.
  7. Wait until HA is up: do NOT hard-sleep. The Bash tool blocks long leading sleep N commands. ha core info returns info even while core is restarting, so poll the HTTP API instead — it only answers 200 once HA is fully booted:
    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
    
    Use this inside a plain Bash call (not Monitor) — it exits as soon as the API responds. You'll get a completion notification automatically.
  8. Smoke test: ./scripts/smoke_test.sh — abort if any entity/service missing.
  9. 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:

  1. 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"
    
  2. 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.
  3. Cycle through the planned transitions.
  4. Restore initial state. If INITIAL == armed_away, the last transition must be alarm_arm_away, not alarm_disarm. Never end the cycle on a different state than where you started.
  5. Re-enable automations paused in step 2.
  6. Verify: alarm_control_panel.verisure_alarm state equals INITIAL, and every paused automation is back to on.

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.

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/verisure-deploy-pipeline-mrx3y00n' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/verisure-deploy-pipeline-mrx3y00n/download' --output '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md.part' && mv '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md.part' '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md' && test -s '.skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/verisure-deploy' && cp -R '.skill-downloads/verisure-deploy-pipeline-mrx3y00n' '.claude/skills/verisure-deploy'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/verisure-deploy-pipeline-mrx3y00n'

openskills read 'verisure-deploy-pipeline-mrx3y00n'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/verisure-deploy-pipeline-mrx3y00n/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires