1- ---
2- # yamllint disable rule:line-length rule:truthy
3- name : Build add-on
1+ name : Builder
42
53env :
64 BUILD_ARGS : " --test"
7- MONITORED_FILES : " apparmor.txt build.yaml config.yaml Dockerfile data rootfs"
5+ MONITORED_FILES : " build.yaml config.yaml Dockerfile rootfs"
86
97on :
10- pull_request :
11- branches : ["master"]
128 push :
13- branches : ["master"]
9+ branches :
10+ - master
11+ - nat64
12+ pull_request :
13+ branches :
14+ - master
1415
1516jobs :
1617 init :
17- runs-on : ubuntu-22.04
18+ runs-on : ubuntu-latest
1819 name : Initialize builds
1920 outputs :
20- changed_files : ${{ steps.changed_files.outputs.all }}
2121 changed_addons : ${{ steps.changed_addons.outputs.addons }}
2222 changed : ${{ steps.changed_addons.outputs.changed }}
2323 steps :
@@ -26,16 +26,11 @@ jobs:
2626
2727 - name : Get changed files
2828 id : changed_files
29- uses : masesgroup/retrieve -changed-files@v3.0.0
29+ uses : jitterbit/get -changed-files@v1
3030
31- - name : Get add-ons
31+ - name : Find add-on directories
3232 id : addons
33- run : |
34- declare -a addons
35- for addon in $(find ./ -name config.yaml | cut -d "/" -f2 | sort -u); do
36- addons+=("$addon");
37- done
38- echo "addons=${addons[@]}" >> "$GITHUB_OUTPUT"
33+ uses : home-assistant/actions/helpers/find-addons@master
3934
4035 - name : Get changed add-ons
4136 id : changed_addons
@@ -46,23 +41,26 @@ jobs:
4641 done
4742
4843 changed=$(echo ${changed_addons[@]} | rev | cut -c 2- | rev)
44+
4945 if [[ -n ${changed} ]]; then
5046 echo "Changed add-ons: $changed";
51- echo "changed=true" >> " $GITHUB_OUTPUT" ;
52- echo "addons=[$changed]" >> " $GITHUB_OUTPUT" ;
47+ echo "changed=true" >> $GITHUB_OUTPUT;
48+ echo "addons=[$changed]" >> $GITHUB_OUTPUT;
5349 else
5450 echo "No add-on had any monitored files changed (${{ env.MONITORED_FILES }})";
5551 fi
56-
5752 build :
5853 needs : init
59- runs-on : ubuntu-22.04
54+ runs-on : ubuntu-latest
6055 if : needs.init.outputs.changed == 'true'
6156 name : Build ${{ matrix.arch }} ${{ matrix.addon }} add-on
6257 strategy :
6358 matrix :
6459 addon : ${{ fromJson(needs.init.outputs.changed_addons) }}
6560 arch : ["aarch64", "amd64", "armhf", "armv7", "i386"]
61+ permissions :
62+ contents : read
63+ packages : write
6664
6765 steps :
6866 - name : Check out repository
@@ -74,28 +72,30 @@ jobs:
7472 with :
7573 path : " ./${{ matrix.addon }}"
7674
77- - name : Check add-on
75+ - name : Check if add-on should be built
7876 id : check
7977 run : |
80- if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then
81- echo "build_arch=true" >> "$GITHUB_OUTPUT";
82- else
83- echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build";
84- fi
85-
86- - name : Set build arguments
87- if : steps.check.outputs.build_arch == 'true'
88- run : |
89- if [[ -z "${{ github.head_ref }}" ]] && [[ "${{ github.event_name }}" == "push" ]]; then
90- echo "BUILD_ARGS=--docker-hub-check" >> $GITHUB_ENV;
78+ if [[ "${{ steps.info.outputs.image }}" == "null" ]]; then
79+ echo "Image property is not defined, skipping build"
80+ echo "build_arch=false" >> $GITHUB_OUTPUT;
81+ elif [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then
82+ echo "build_arch=true" >> $GITHUB_OUTPUT;
83+ echo "image=$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)" >> $GITHUB_OUTPUT;
84+ if [[ -z "${{ github.head_ref }}" ]] && [[ "${{ github.event_name }}" == "push" ]]; then
85+ echo "BUILD_ARGS=" >> $GITHUB_ENV;
86+ fi
87+ else
88+ echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build";
89+ echo "build_arch=false" >> $GITHUB_OUTPUT;
9190 fi
9291
93- - name : Login to DockerHub
94- if : env.BUILD_ARGS == '--docker-hub-check '
92+ - name : Login to GitHub Container Registry
93+ if : env.BUILD_ARGS != '--test '
95949695 with :
97- username : ${{ secrets.DOCKERHUB_USERNAME }}
98- password : ${{ secrets.DOCKERHUB_TOKEN }}
96+ registry : ghcr.io
97+ username : ${{ github.repository_owner }}
98+ password : ${{ secrets.GITHUB_TOKEN }}
9999
100100 - name : Build ${{ matrix.addon }} add-on
101101 if : steps.check.outputs.build_arch == 'true'
@@ -105,4 +105,6 @@ jobs:
105105 ${{ env.BUILD_ARGS }} \
106106 --${{ matrix.arch }} \
107107 --target /data/${{ matrix.addon }} \
108+ --image "${{ steps.check.outputs.image }}" \
109+ --docker-hub "ghcr.io/${{ github.repository_owner }}" \
108110 --addon
0 commit comments