From 118ff5927b17bd3f2b189abe7b8c0f60b39645d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sat, 25 Sep 2021 14:18:37 +0200 Subject: [PATCH] Complete refresh (#7) --- .github/dependabot.yaml | 7 ++ .github/workflows/builder.yaml | 118 +++++++++++++++++++ .github/workflows/lint.yaml | 49 ++++++++ README.md | 50 ++++++++ coffee_maker/Dockerfile | 14 --- coffee_maker/config.json | 19 --- coffee_maker/run.sh | 8 -- example/CHANGELOG.md | 8 ++ example/DOCS.md | 15 +++ example/Dockerfile | 6 + example/README.md | 17 +++ example/build.json | 9 ++ example/config.json | 16 +++ example/icon.png | Bin 0 -> 48234 bytes example/rootfs/etc/services.d/example/finish | 5 + example/rootfs/etc/services.d/example/run | 8 ++ repository.json | 5 - repository.yaml | 4 + sync/Dockerfile | 14 --- sync/config.json | 21 ---- sync/run.sh | 10 -- 21 files changed, 312 insertions(+), 91 deletions(-) create mode 100644 .github/dependabot.yaml create mode 100644 .github/workflows/builder.yaml create mode 100644 .github/workflows/lint.yaml create mode 100644 README.md delete mode 100644 coffee_maker/Dockerfile delete mode 100644 coffee_maker/config.json delete mode 100644 coffee_maker/run.sh create mode 100644 example/CHANGELOG.md create mode 100644 example/DOCS.md create mode 100644 example/Dockerfile create mode 100644 example/README.md create mode 100644 example/build.json create mode 100644 example/config.json create mode 100644 example/icon.png create mode 100644 example/rootfs/etc/services.d/example/finish create mode 100644 example/rootfs/etc/services.d/example/run delete mode 100644 repository.json create mode 100644 repository.yaml delete mode 100644 sync/Dockerfile delete mode 100644 sync/config.json delete mode 100644 sync/run.sh diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..2a8ccc5 --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,7 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: daily + time: "06:00" diff --git a/.github/workflows/builder.yaml b/.github/workflows/builder.yaml new file mode 100644 index 0000000..1f06cf1 --- /dev/null +++ b/.github/workflows/builder.yaml @@ -0,0 +1,118 @@ +name: Builder + +env: + BUILD_ARGS: "--test" + MONITORED_FILES: "build.json config.json Dockerfile rootfs" + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + init: + runs-on: ubuntu-latest + name: Initialize builds + outputs: + changed_files: ${{ steps.changed_files.outputs.all }} + changed_addons: ${{ steps.changed_addons.outputs.addons }} + changed: ${{ steps.changed_addons.outputs.changed }} + steps: + - name: Check out the repository + uses: actions/checkout@v2.3.4 + + - name: Get changed files + id: changed_files + uses: jitterbit/get-changed-files@v1 + + - name: Get add-ons + id: addons + run: | + declare -a addons + for addon in $(find ./ -name config.json | cut -d "/" -f2 | sort -u); do + addons+=("$addon"); + done + echo "::set-output name=addons::${addons[@]}" + - name: Get changed add-ons + id: changed_addons + run: | + declare -a changed_addons + for addon in ${{ steps.addons.outputs.addons }}; do + if [[ "${{ steps.changed_files.outputs.all }}" =~ $addon ]]; then + for file in ${{ env.MONITORED_FILES }}; do + if [[ "${{ steps.changed_files.outputs.all }}" =~ $addon/$file ]]; then + if [[ ! "${changed_addons[@]}" =~ $addon ]]; then + changed_addons+=("\"${addon}\","); + fi + fi + done + fi + done + changed=$(echo ${changed_addons[@]} | rev | cut -c 2- | rev) + if [[ -n ${changed} ]]; then + echo "Changed add-ons: $changed"; + echo "::set-output name=changed::true"; + echo "::set-output name=addons::[$changed]"; + else + echo "No add-on had any monitored files changed (${{ env.MONITORED_FILES }})"; + fi + build: + needs: init + runs-on: ubuntu-latest + if: needs.init.outputs.changed == 'true' + name: Build ${{ matrix.arch }} ${{ matrix.addon }} add-on + strategy: + matrix: + addon: ${{ fromJson(needs.init.outputs.changed_addons) }} + arch: ["aarch64", "amd64", "armhf", "armv7", "i386"] + + steps: + - name: Check out repository + uses: actions/checkout@v2.3.4 + + - name: Get information + id: info + uses: home-assistant/actions/helpers/info@master + with: + path: "./${{ matrix.addon }}" + + - name: Check add-on + id: check + run: | + if [[ "${{ steps.info.outputs.architectures }}" =~ ${{ matrix.arch }} ]]; then + echo "::set-output name=build_arch::true"; + else + echo "${{ matrix.arch }} is not a valid arch for ${{ matrix.addon }}, skipping build"; + fi + image=$(jq -r '.image' "./${{ matrix.addon }}/config.json" | cut -d"/" -f3) + echo "::set-output name=image::${image}"; + + - name: Set build arguments + if: steps.check.outputs.build_arch == 'true' + run: | + if [[ -z "${{ github.head_ref }}" ]] && [[ "${{ github.event_name }}" == "push" ]]; then + echo "BUILD_ARGS=" >> $GITHUB_ENV; + fi + + - name: Login to GitHub Container Registry + if: env.BUILD_ARGS != '--test' + uses: docker/login-action@v1.10.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build ${{ matrix.addon }} add-on + if: steps.check.outputs.build_arch == 'true' + uses: home-assistant/builder@2021.07.0 + with: + args: | + ${{ env.BUILD_ARGS }} \ + --${{ matrix.arch }} \ + --target /data/${{ matrix.addon }} \ + --image "${{ steps.check.outputs.image }}" \ + --docker-hub "ghcr.io/${{ github.repository_owner }}" \ + --addon diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..2f92e09 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,49 @@ +name: Lint + +on: + push: + branches: + - master + pull_request: + branches: + - master + schedule: + - cron: "0 0 * * *" + +jobs: + find: + name: Find add-ons + runs-on: ubuntu-latest + outputs: + addons: ${{ steps.addons.outputs.addons }} + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v2 + + - name: 🔍 Find add-on directories + id: addons + run: | + declare -a found_addons + for addon in $(find ./ -name config.json | cut -d "/" -f2 | sort -u); do + found_addons+=("\"${addon}\","); + done + addons=$(echo ${found_addons[@]} | rev | cut -c 2- | rev) + echo "Add-ons found: ${addons}" + echo "::set-output name=addons::[${addons}]" + + + lint: + name: Lint add-on ${{ matrix.path }} + runs-on: ubuntu-latest + needs: find + strategy: + matrix: + path: ${{ fromJson(needs.find.outputs.addons) }} + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v2 + + - name: 🚀 Run Home Assistant Add-on Lint + uses: frenck/action-addon-linter@v2.3.0 + with: + path: "./${{ matrix.path }}" diff --git a/README.md b/README.md new file mode 100644 index 0000000..6bd17a2 --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# Example Home Assistant add-on repository + +This repository can be used as a "blueprint" for add-on development to help you get started. + +Add-on documentation: + + +[![Open your Home Assistant instance and show the add add-on repository dialog with a specific repository URL pre-filled.](https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg)](https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2Fhome-assistant%2Faddons-example) + +## Add-ons + +This repository contains the following add-ons + +### [Example add-on](./example) + +![Supports aarch64 Architecture][aarch64-shield] +![Supports amd64 Architecture][amd64-shield] +![Supports armhf Architecture][armhf-shield] +![Supports armv7 Architecture][armv7-shield] +![Supports i386 Architecture][i386-shield] + +_Example add-on to use as a blueprint for new add-ons._ + + + + + + + +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg \ No newline at end of file diff --git a/coffee_maker/Dockerfile b/coffee_maker/Dockerfile deleted file mode 100644 index a533b44..0000000 --- a/coffee_maker/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -ARG BUILD_FROM -FROM $BUILD_FROM - -# Add env -ENV LANG C.UTF-8 - -# Setup base -RUN apk add --no-cache jq - -# Copy data -COPY run.sh / -RUN chmod a+x /run.sh - -CMD [ "/run.sh" ] diff --git a/coffee_maker/config.json b/coffee_maker/config.json deleted file mode 100644 index ecd0bf7..0000000 --- a/coffee_maker/config.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Coffee Maker", - "version": "1.2", - "slug": "coffee_maker", - "arch": ["armhf", "armv7", "aarch64", "amd64", "i386"], - "description": "Expose a web frontend to control my coffee maker", - "startup": "before", - "boot": "auto", - "ports": { - "80/tcp": 8080 - }, - "options": { - "device": null - }, - "schema": { - "device": "str" - }, - "image": "hub/{arch}-coffee-maker" -} diff --git a/coffee_maker/run.sh b/coffee_maker/run.sh deleted file mode 100644 index d075816..0000000 --- a/coffee_maker/run.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -sed -e - -CONFIG_PATH=/data/options.json - -DEVICE=$(jq --raw-output ".device" $CONFIG_PATH) - -echo "We can now make coffee on device: $DEVICE" diff --git a/example/CHANGELOG.md b/example/CHANGELOG.md new file mode 100644 index 0000000..35c96bf --- /dev/null +++ b/example/CHANGELOG.md @@ -0,0 +1,8 @@ + +## 1.0.0 + +- Complete refresh of all files + +## 0.1.0 + +- Initial release \ No newline at end of file diff --git a/example/DOCS.md b/example/DOCS.md new file mode 100644 index 0000000..98c5c62 --- /dev/null +++ b/example/DOCS.md @@ -0,0 +1,15 @@ +# Home Assistant Add-on: Example add-on + +## Installation + +Follow these steps to get the add-on installed on your system: + +1. Navigate in your Home Assistant frontend to **Supervisor** -> **Add-on Store**. +1. Find the "Example add-on" add-on and click it. +1. Click on the "INSTALL" button. + +## How to use + +This add-on really does nothing. It is just an example. + +When started it will print "Hello world" in the log and exit. diff --git a/example/Dockerfile b/example/Dockerfile new file mode 100644 index 0000000..2e2b37c --- /dev/null +++ b/example/Dockerfile @@ -0,0 +1,6 @@ +# https://developers.home-assistant.io/docs/add-ons/configuration#add-on-dockerfile +ARG BUILD_FROM +FROM $BUILD_FROM + +# Copy data +COPY rootfs / \ No newline at end of file diff --git a/example/README.md b/example/README.md new file mode 100644 index 0000000..451810a --- /dev/null +++ b/example/README.md @@ -0,0 +1,17 @@ +# Home Assistant Add-on: Example add-on + +_Example add-on to use as a blueprint for new add-ons._ + +![Supports aarch64 Architecture][aarch64-shield] +![Supports amd64 Architecture][amd64-shield] +![Supports armhf Architecture][armhf-shield] +![Supports armv7 Architecture][armv7-shield] +![Supports i386 Architecture][i386-shield] + + + +[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg +[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg +[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg +[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg +[i386-shield]: https://img.shields.io/badge/i386-yes-green.svg \ No newline at end of file diff --git a/example/build.json b/example/build.json new file mode 100644 index 0000000..2f64ae1 --- /dev/null +++ b/example/build.json @@ -0,0 +1,9 @@ +{ + "build_from": { + "aarch64": "ghcr.io/home-assistant/aarch64-base:3.14", + "amd64": "ghcr.io/home-assistant/amd64-base:3.14", + "armhf": "ghcr.io/home-assistant/armhf-base:3.14", + "armv7": "ghcr.io/home-assistant/armv7-base:3.14", + "i386": "ghcr.io/home-assistant/i386-base:3.14" + } +} \ No newline at end of file diff --git a/example/config.json b/example/config.json new file mode 100644 index 0000000..1f50e5e --- /dev/null +++ b/example/config.json @@ -0,0 +1,16 @@ +{ + "name": "Example add-on", + "version": "1.0.0", + "slug": "example", + "description": "Example add-on", + "url": "https://github.com/home-assistant/addons-example/tree/master/example", + "arch": [ + "armhf", + "armv7", + "aarch64", + "amd64", + "i386" + ], + "startup": "once", + "image": "ghcr.io/home-assistant/{arch}-addon-example" +} diff --git a/example/icon.png b/example/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d4415c1699901889101ad81ae00a91678b635fa4 GIT binary patch literal 48234 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 qH>!m1G}w{" -} diff --git a/repository.yaml b/repository.yaml new file mode 100644 index 0000000..e92d4da --- /dev/null +++ b/repository.yaml @@ -0,0 +1,4 @@ +# https://developers.home-assistant.io/docs/add-ons/repository#repository-configuration +name: Example Home Assistant add-on repository +url: 'https://github.com/home-assistant/addons-example' +maintainer: Awesome Maintainer \ No newline at end of file diff --git a/sync/Dockerfile b/sync/Dockerfile deleted file mode 100644 index a533b44..0000000 --- a/sync/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -ARG BUILD_FROM -FROM $BUILD_FROM - -# Add env -ENV LANG C.UTF-8 - -# Setup base -RUN apk add --no-cache jq - -# Copy data -COPY run.sh / -RUN chmod a+x /run.sh - -CMD [ "/run.sh" ] diff --git a/sync/config.json b/sync/config.json deleted file mode 100644 index 59d953d..0000000 --- a/sync/config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "Sync", - "version": "0.4", - "slug": "sync", - "arch": ["armhf", "armv7", "aarch64", "amd64", "i386"], - "description": "Sync config files over sftp", - "startup": "once", - "boot": "manual", - "map": ["config"], - "options": { - "target": null, - "username": null, - "password": "" - }, - "schema": { - "target": "url", - "username": "str", - "password": "str" - }, - "image": "hub/{arch}-sync" -} diff --git a/sync/run.sh b/sync/run.sh deleted file mode 100644 index 7d2944b..0000000 --- a/sync/run.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -set -e - -CONFIG_PATH=/data/options.json - -TARGET=$(jq --raw-output ".target" $CONFIG_PATH) -USERNAME=$(jq --raw-output ".username" $CONFIG_PATH) -PASSWORD=$(jq --raw-output ".password" $CONFIG_PATH) - -echo "fake copy from /config to $TARGET@$USERNAME"