From 2669c3cf7c516545bc4c4ddb0300e19554e46678 Mon Sep 17 00:00:00 2001 From: reachableceo Date: Wed, 2 Sep 2026 21:57:17 -0500 Subject: [PATCH] feat(deploy): gitea webhook - pull + minimal reload pipeline [#734] Webhook automation: master pushes force a git pull then reload_all; core restart only for configuration.yaml / packages platform files. Add-on auto_restart disabled separately on the host (race source). Detail: https://projects.knownelement.com/issues/734 --- automations.yaml | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/automations.yaml b/automations.yaml index 84dabfd..bbc39f5 100644 --- a/automations.yaml +++ b/automations.yaml @@ -225,3 +225,70 @@ message: '{{ trigger.entity_id }} climbing ~10F/15min — check cooling before the 104F threshold. (rate-of-change early warning)' mode: single +# Deploy pipeline [#734]: gitea repo webhook (master pushes) -> forced pull +# -> minimal reload. Core restarts ONLY when configuration.yaml or a +# packages platform-sensor file changed; everything else reloads with no +# bounce. The git_pull add-on's auto_restart is disabled - this webhook +# owns apply timing (no more 5-min-timer surprise restarts). +- id: pfv_deploy_git_webhook + alias: PFV deploy - git push to pull + minimal reload + description: >- + Gitea webhook on master pushes. Forces a git pull now, then + homeassistant.reload_all unless files that require a core restart + changed. Replaces the git_pull add-on timer auto-restart [#734]. + mode: queued + max_exceeded: silent + triggers: + - trigger: webhook + webhook_id: !secret deploy_webhook_id + allowed_methods: + - POST + local_only: false + conditions: [] + actions: + - if: + - condition: template + value_template: "{{ trigger.json.ref | default('') != 'refs/heads/master' }}" + then: + - stop: non-master ref ignored + stop_reason: "deploy webhook: non-master ref {{ trigger.json.ref | default('') }}" + - variables: + changed_files: >- + {{ (trigger.json.commits | default([]) | map(attribute='added') | flatten | list) + + (trigger.json.commits | default([]) | map(attribute='removed') | flatten | list) + + (trigger.json.commits | default([]) | map(attribute='modified') | flatten | list) }} + need_restart: >- + {{ changed_files | select('in', ['configuration.yaml', 'packages/plant_snmp.yaml']) | list | count > 0 }} + - action: persistent_notification.create + data: + title: Deploy started + message: >- + Git push ({{ trigger.json.sender.login | default('unknown') }}): + {{ trigger.json.commits | default([]) | map(attribute='message') | join(' | ') | truncate(160) }}. + Pulling now - {{ 'core restart required' if need_restart else 'reload only, no restart' }}. + - action: hassio.addon_restart + data: + addon: core_git_pull + - delay: + hours: 0 + minutes: 0 + seconds: 25 + - if: + - condition: template + value_template: "{{ need_restart }}" + then: + - action: persistent_notification.create + data: + title: Deploy - restarting core + message: "Pull done; restarting core for {{ changed_files | join(', ') }}. Back in ~1 min." + - delay: + hours: 0 + minutes: 0 + seconds: 3 + - action: homeassistant.restart + else: + - action: homeassistant.reload_all + - action: persistent_notification.create + data: + title: Deploy complete + message: "Pulled + reloaded YAML config at {{ now().strftime('%H:%M:%S') }} (no core restart). Files: {{ changed_files | join(', ') | truncate(200) }}"