#!/usr/bin/env bash # Génère les fichiers réels à partir des modèles et les déploie sur Home Assistant. # # ./deploy.sh --render-only génère seulement dist/ (rien n'est envoyé) # ./deploy.sh génère dist/, copie sur HA, vérifie la config # et recharge scripts + automatisations # # Les valeurs réelles viennent de config.local.env (non versionné, voir # config.example.env). Le rechargement utilise HA_TOKEN dans .env. set -euo pipefail cd "$(dirname "$0")" [ -f config.local.env ] || { echo "config.local.env manquant (copier config.example.env)" >&2; exit 1; } set -a; . ./config.local.env; set +a echo "== génération de dist/" rm -rf dist && mkdir -p dist/packages dist/www/led python3 - <<'EOF' import os, re, shutil, pathlib valeurs = {k: os.environ[k] for k in ("HA_IP", "HA_PORT", "WEBHOOK_ID", "ENTITE", "PRENOM")} fichiers = ["packages/led_chambre.yaml"] + [str(p) for p in sorted(pathlib.Path("www/led").iterdir())] for src in fichiers: dst = os.path.join("dist", src) if src.endswith((".yaml", ".html", ".json", ".svg")): texte = open(src, encoding="utf-8").read() for k, v in valeurs.items(): texte = texte.replace("__%s__" % k, v) reste = sorted(set(re.findall(r"__[A-Z_]+__", texte))) if reste: raise SystemExit("marqueurs non remplacés dans %s : %s" % (src, reste)) open(dst, "w", encoding="utf-8").write(texte) else: shutil.copyfile(src, dst) print(" ", dst) EOF [ "${1:-}" = "--render-only" ] && exit 0 echo "== copie vers $SSH_HOST" scp -q dist/packages/led_chambre.yaml "$SSH_HOST:/config/packages/led_chambre.yaml" ssh "$SSH_HOST" 'mkdir -p /config/www/led' scp -q dist/www/led/* "$SSH_HOST:/config/www/led/" echo "== vérification de la configuration" ssh "$SSH_HOST" 'ha core check' echo "== rechargement" if [ -f .env ]; then set -a; . ./.env; set +a for d in script automation; do curl -s -m 30 -o /dev/null -w " $d.reload -> %{http_code}\n" -X POST \ -H "Authorization: Bearer $HA_TOKEN" "http://$HA_IP:$HA_PORT/api/services/$d/reload" done else echo " pas de .env : recharger à la main (Outils de développement → YAML → Scripts et Automatisations)" fi