Release van configuratie
Het is natuurlijk super om te weten of de gebruikte Home Assistant configuratie syntactisch correct is. Maar het is voor een eigen referentie ook enorm prettig om op te slaan wanneer de laatste configuratie daadwerkelijk werkte. Mochten er dan problemen zijn, dan is het relatief eenvoudig om terug te gaan naar een stabiel punt in de geschiedenis. Hiervoor gebruik ik tevens Gitea Actions, maar gebruik ik ook de release functionaliteit.
Allereerst heb ik in Home Assistant twee automatiseringen gemaakt:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| - id: system_git_cleanup_before_shutdown
alias: Systeem - Git directory schoonmaken voor afsluiten
triggers:
trigger: homeassistant
event: shutdown
actions:
- action: shell_command.git_reset
response_variable: git_reset_response
- if: "{{ git_reset_response['returncode'] == 0 }}"
then:
action: shell_command.git_pull
- id: system_git_release_new_version
alias: Systeem - Git release nieuwe versie
mode: single
max_exceeded: silent
variables:
fail_title_prefix: โ Probleem met
fail_message_prefix: Er is een probleem opgetreden met
triggers:
trigger: homeassistant
event: start
actions:
- action: shell_command.git_set_config
response_variable: git_set_config_response
- if: "{{ git_set_config_response['returncode'] == 0 }}"
then:
- action: shell_command.git_update_version
response_variable: git_update_version_response
- if: "{{ git_update_version_response['returncode'] != 0 }}"
then:
action: persistent_notification.create
data:
title: "{{ fail_title_prefix }} git push"
message: "{{ fail_message_prefix }} git push."
else:
action: persistent_notification.create
data:
title: "{{ fail_title_prefix }} git set config"
message: "{{ fail_message_prefix }} git set config." |
De eerste automatisering zorgt ervoor dat de configuratie schoongemaakt wordt wanneer Home Assistant afgesloten wordt. Dit zou eigenlijk sowieso moeten zijn, maar we willen dit '''zeker''' weten. En de tweede automatisering zorgt ervoor dat de Home Assistant versie, die standaard al wordt bijgehouden in het bestand
.HA_VERSION wordt geรผpdatet in versiebeheer. Dit doe ik wederom met
shell commands in de configuration.yaml:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| shell_command:
git_pull: >-
cd /config/ &&
git pull &&
(git rev-parse HEAD > .revision) &&
(git show -s --format=%s | cat > .commit_message)
git_reset: >-
cd /config/ &&
git reset --hard &&
git clean -d -f .
git_set_config: >-
cd /config/ &&
git config --local user.name "Home Assistant" &&
git config --local user.email "homeassistant@tweakers.net"
git_update_version: >-
cd /config/ &&
git add .HA_VERSION &&
git status | grep -q "modified" &&
[ $? = 0 ] &&
git commit -m "Updated Home Assistant to $(cat .HA_VERSION)" &&
git push || echo "No Update..." |
In mijn Gitea instantie heb ik een Home Assistant gebruiker aangemaakt, met hetzelfde e-mailadres als ik opgeef in mijn Home Assistant instantie:
SSH authenticatie heb ik in Docker Compose geregeld met een volume mapping:
YAML:
1
2
3
4
5
6
7
8
9
| ---
services:
homeassistant:
container_name: homeassistant
image: ghcr.io/home-assistant/home-assistant:2025.1.0
volumes:
- /opt/appdata/homeassistant/config:/config
- /opt/appdata/homeassistant/userhome:/root
- /etc/localtime:/etc/localtime:ro |
En uiteraard de juiste key toegevoegd aan Gitea, maar dat gaat buiten scope van deze post.
Na een update zie ik dus een dergelijke commit terug:
Wat er daarna gebeurt vind ik de coolste stap, namelijk dat een release wordt gemaakt:
YAML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| ---
name: Create release on Home Assistant version update
# yamllint disable-line rule:truthy
on:
push:
branches:
- master
paths:
- ".HA_VERSION"
workflow_dispatch:
jobs:
release:
name: Tags and releases the previous version
runs-on: ubuntu-latest
steps:
- name: โคต๏ธ Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: โฐ Retrieve previous .HA_VERSION revisions
run: |
VERSIONS=$(git log -n2 --pretty=format:"%H" "./.HA_VERSION")
INC_VERSION=$(echo "$VERSIONS" | sed -n '1p')
PRV_VERSION=$(echo "$VERSIONS" | sed -n '2p')
echo "INCOMING=$INC_VERSION" >> $GITHUB_ENV
echo "PREVIOUS=$PRV_VERSION" >> $GITHUB_ENV
- name: ๐ Get previous version tag from .HA_VERSION
run: |
VERSION_TAG=$(git show "$PREVIOUS:.HA_VERSION")
echo "VERSION_TAG=$VERSION_TAG" >> $GITHUB_ENV
- name: ๐ฏ Set target commit
run: |
TARGET_COMMIT=$(git rev-parse "$INCOMING^")
echo "TARGET_COMMIT=$TARGET_COMMIT" >> $GITHUB_ENV
- name: ๐งพ Generate release notes
# yamllint disable rule:line-length
run: (git log "$PREVIOUS^..$TARGET_COMMIT" --format="- %h - %s (%an, %ar)" | sed '/Merge/d') > CHANGELOG.md
# yamllint enable rule:line-length
- name: ๐ Create release
uses: akkuman/gitea-release-action@v1
with:
target_commitish: "${{ env.TARGET_COMMIT }}"
name: "v${{ env.VERSION_TAG }}"
tag_name: "v${{ env.VERSION_TAG }}"
body_path: CHANGELOG.md
- name: ๐ Create additional tags
run: |
git config user.name $GIT_USER
git config user.email $GIT_EMAIL
MINOR_TAG=v"${VERSION_TAG%.*}"
git push origin ":$MINOR_TAG" || true
git tag -f $MINOR_TAG $TARGET_COMMIT
git push origin $MINOR_TAG
MAJOR_TAG=v"${VERSION_TAG%.*.*}"
git push origin ":$MAJOR_TAG" || true
git tag -f $MAJOR_TAG $TARGET_COMMIT
git push origin $MAJOR_TAG
env:
GIT_USER: Home Assistant
GIT_EMAIL: homeassistant@tweakers.net |
Dit hele blok yaml haalt het verschil op tussen de vorige versie uit
.HA_VERSION en de versie daarvoor. Bij de recente update van 2024.12.5 naar 2025.1.0 maakt deze workflow dus een release van 2024.12.5 waarbij we dus '''weten''' dat deze versie met deze configuratie nog heeft gewerkt. Ook wordt er een changelog gemaakt van de vorige verandering aan
.HA_VERSION tot aan deze update. in mijn geval dus toen deze van 2024.12.4 naar 2024.12.5 werd gewijzigd. Bij de volgende update naar 2025.1.1 zal er dus een release worden gemaakt van 2025.1.0 met een changelog van 2025.1.0 naar de commit voor de update naar 2025.1.1. In Gitea ziet er dat dan zo uit:
Voor de mensen die denken dat ik misschien een lichte vorm van dementie heb omdat ik mijn naam bij de commits erbij zet. Dat komt omdat ik ook een aantal bots heb draaien die ik wel graag wil herkennen
.
Ook maakt deze workflow een aantal aanvullende labels aan, waaronder een Major en Minor label. Alhoewel dat natuurlijk net anders werkt bij het
CalVer versieschema van Home Assistant:
Maar dan is het voor mij wel direct duidelijk wat de laatst werkende versie van 2024 of november 2024 was.
Ik vind dit inzicht vooralsnog enorm prettig. Ik gebruik mijn historie niet bijster veel. Echter kan ik nu wel makkelijk naar punten in de historie teruggrijpen wanneer ik dat nodig heb. Dat voelt prettig omdat ik het idee dat ik meer grip heb op mijn configuratie.