Add Devices #6385
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 | |
# inspired from https://github.com/Poeschl/Hassio-Addons | |
--- | |
name: Builder | |
env: | |
BUILD_ARGS: "" | |
on: | |
workflow_call: | |
push: | |
branches: | |
- master | |
paths: | |
- "**/config.*" | |
jobs: | |
correct_path_filters: | |
if: github.repository_owner == 'alexbelgium' | |
runs-on: ubuntu-latest | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: Update path_filters | |
run: | | |
# Init | |
echo "Starting" | |
# Go through all folders, add to filters if not existing | |
for f in $( find -- * -maxdepth 0 -type d | sort -r ); do | |
if [ -f "$f"/config.json ]; then | |
# Add to file | |
if ! grep "$f:" ".github/paths-filter.yml"; then | |
echo "$f: $f/config.*" >> ".github/paths-filter.yml" | |
fi | |
# Identify addons with true images | |
if [ "$(jq '.image' "$f/config.json")" != null ]; then | |
sed -i "/$f/ s/ # Image : yes//g" ".github/paths-filter.yml" | |
sed -i "/$f/ s/$/ # Image : yes/" ".github/paths-filter.yml" | |
fi | |
fi | |
done | |
# Sort yaml | |
sort -t= ".github/paths-filter.yml" -o ".github/paths-filter.yml" | |
- name: Commit if needed | |
uses: EndBug/add-and-commit@v9 | |
with: | |
commit: -u | |
message: "GitHub bot : scripts executable" | |
default_author: github_actions | |
check-addon-changes: | |
runs-on: ubuntu-latest | |
needs: [correct_path_filters] | |
outputs: | |
changedAddons: ${{ steps.filter.outputs.changes }} | |
steps: | |
- name: ↩️ Checkout | |
uses: actions/checkout@v4 | |
- name: 📂 Detect changed files | |
uses: dorny/paths-filter@v3 | |
id: filter | |
with: | |
filters: .github/paths-filter.yml | |
correct-CRLF: | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
needs: check-addon-changes | |
uses: ./.github/workflows/weekly_crlftolf.yaml | |
make-executable: | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
needs: [check-addon-changes, correct-CRLF] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Make scripts executable | |
run: | | |
echo "Starting" | |
git pull origin master | |
git config core.filemode true | |
# shellcheck disable=SC2086,SC2046 | |
#git update-index --chmod=+x $(find "$path" -type f -iname "*.sh") | |
chmod u+x $(find "$path" -type f -iname "*.sh") || true | |
#git commit -am "fixing the script permissions..." | |
env: | |
path: "./${{ matrix.addon }}" | |
- name: Commit if needed | |
uses: EndBug/add-and-commit@v9 | |
with: | |
commit: -u | |
message: "GitHub bot : scripts executable" | |
default_author: github_actions | |
lint_config: | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
needs: check-addon-changes | |
runs-on: ubuntu-latest | |
strategy: | |
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 }}" | |
build: | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
needs: [check-addon-changes, make-executable, correct-CRLF] | |
runs-on: ubuntu-latest | |
environment: CR_PAT | |
name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on | |
strategy: | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
arch: ["aarch64", "amd64", "armv7"] | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v4 | |
- name: Get information | |
id: info | |
uses: home-assistant/actions/helpers/info@master | |
with: | |
path: "./${{ matrix.addon }}" | |
- name: Check if add-on should be built | |
id: check | |
env: | |
HEAD: "${{ github.head_ref }}" | |
run: | | |
# shellcheck disable=SC2157,SC2086 | |
if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then | |
# shellcheck disable=SC2129 | |
echo "build_arch=true" >> $GITHUB_OUTPUT; | |
# shellcheck disable=SC2129 | |
echo "image=$(echo ${{ steps.info.outputs.image }} | cut -d'/' -f3)" >> $GITHUB_OUTPUT; | |
if [[ -z "$HEAD" ]] && [[ "${{ github.event_name }}" == "push" ]]; then | |
# shellcheck disable=SC2129 | |
echo "BUILD_ARGS=" >> $GITHUB_ENV; | |
fi | |
else | |
echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build"; | |
# shellcheck disable=SC2129 | |
echo "build_arch=false" >> $GITHUB_OUTPUT; | |
fi | |
- name: Use action to check for mixed line endings (CRLF and LF) | |
uses: ymwymw/check-mixed-line-endings@v2 | |
- name: Login to GitHub Container Registry | |
if: env.BUILD_ARGS != '--test' | |
uses: docker/[email protected] | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build ${{ matrix.addon }} add-on | |
id: builderstep | |
if: steps.check.outputs.build_arch == 'true' | |
uses: home-assistant/[email protected] | |
env: | |
CAS_API_KEY: ${{ secrets.CAS_API_KEY }} | |
with: | |
args: | | |
${{ env.BUILD_ARGS }} \ | |
--${{ matrix.arch }} \ | |
--target /data/${{ matrix.addon }} \ | |
--image "${{ steps.check.outputs.image }}" \ | |
--docker-hub "ghcr.io/${{ github.repository_owner }}" \ | |
--addon | |
make-changelog: | |
if: ${{ needs.check-addon-changes.outputs.changedAddons != '[]' }} | |
needs: [check-addon-changes, build] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
addon: ${{ fromJSON(needs.check-addon-changes.outputs.changedAddons) }} | |
steps: | |
- name: Checkout Repo | |
uses: actions/checkout@v4 | |
- name: Update changelog for minor versions | |
run: | | |
echo "Starting" | |
# Git pull | |
git pull || true | |
cd "$path" | |
# Get version | |
if [ -f config.yaml ]; then | |
version="$(sed -e '/version/!d' -e 's/.*version: //' config.yaml)" | |
elif [ -f config.json ]; then | |
version="$(sed -e '/version/!d' -e 's/.*[^"]*"\([^"]*\)"/\1/' config.json)" | |
version="${version//,}" | |
else | |
exit 1 | |
fi | |
# Exit if test | |
if [[ "$version" == *"test"* ]]; then exit 0; fi | |
# Create changelog | |
touch CHANGELOG.md | |
# If the version does not exist | |
if ! grep -q "$version" CHANGELOG.md; then | |
first_line="$(sed -n '/./p' CHANGELOG.md | head -n 1)" | |
# If the first line does not start with - | |
if [[ "$first_line" != "-"* ]]; then | |
sed -i "1i\- Minor bugs fixed" CHANGELOG.md | |
fi | |
sed -i "1i\## $version ($(date '+%d-%m-%Y'))" CHANGELOG.md | |
#fi | |
fi | |
env: | |
path: "./${{ matrix.addon }}" | |
- name: Commit if needed | |
uses: EndBug/add-and-commit@v9 | |
with: | |
commit: -u | |
message: "GitHub bot : changelog" | |
default_author: github_actions | |
fetch: --force | |
push: --force |