--- name: CI # yamllint disable-line rule:truthy on: push: pull_request: types: - opened - reopened - synchronize workflow_dispatch: jobs: information: name: Gather add-on information runs-on: ubuntu-latest outputs: architectures: ${{ steps.information.outputs.architectures }} build: ${{ steps.information.outputs.build }} description: ${{ steps.information.outputs.description }} name: ${{ steps.information.outputs.name }} slug: ${{ steps.information.outputs.slug }} target: ${{ steps.information.outputs.target }} steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run add-on information action id: information uses: frenck/action-addon-information@v1.0.0 lint-addon: name: Lint Add-on needs: - information runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run Add-on Lint uses: frenck/action-addon-linter@v2 with: community: true path: "./${{ needs.information.outputs.target }}" lint-hadolint: name: Hadolint needs: - information runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run Hadolint uses: brpaz/hadolint-action@v1.4.0 with: dockerfile: "./${{ needs.information.outputs.target }}/Dockerfile" lint-json: name: JSON Lint runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run JQ run: | shopt -s globstar cat **/*.json | jq '.' lint-markdown: name: MarkdownLint runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run mdl uses: actionshub/markdownlint@2.0.2 lint-shellcheck: name: Shellcheck runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run Shellcheck uses: ludeeus/action-shellcheck@1.1.0 env: SHELLCHECK_OPTS: -s bash lint-yamllint: name: YAMLLint runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run YAMLLint uses: frenck/action-yamllint@v1.1 lint-prettier: name: Prettier runs-on: ubuntu-latest steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🚀 Run Prettier uses: creyD/prettier_action@v3.3 with: prettier_options: --write **/*.{json,js,md,yaml} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build: name: Build ${{ matrix.architecture }} needs: - information - lint-addon - lint-hadolint - lint-json - lint-markdown - lint-prettier - lint-shellcheck - lint-yamllint runs-on: ubuntu-latest strategy: matrix: architecture: ${{ fromJson(needs.information.outputs.architectures) }} steps: - name: â¤ĩī¸ Check out code from GitHub uses: actions/checkout@v2.3.4 - name: 🏗 Set up build cache id: cache uses: actions/cache@v2.1.5 with: path: /tmp/.docker-cache key: docker-${{ github.ref }}-${{ matrix.architecture }}-${{ github.sha }} restore-keys: | docker-${{ github.ref }}-${{ matrix.architecture }} - name: 🏗 Set up QEMU uses: docker/setup-qemu-action@v1.1.0 - name: 🏗 Set up Docker Buildx uses: docker/setup-buildx-action@v1.3.0 - name: 🏗 Set up CodeNotary run: bash <(curl https://getvcn.codenotary.com -L) - name: â„šī¸ Compose build flags id: flags run: | echo "::set-output name=date::$(date +"%Y-%m-%dT%H:%M:%SZ")" from=$(jq --raw-output ".build_from.${{ matrix.architecture }}" "${{ needs.information.outputs.build }}") echo "::set-output name=from::${from}" if [[ "${{ matrix.architecture}}" = "amd64" ]]; then echo "::set-output name=platform::linux/amd64" elif [[ "${{ matrix.architecture }}" = "i386" ]]; then echo "::set-output name=platform::linux/386" elif [[ "${{ matrix.architecture }}" = "armhf" ]]; then echo "::set-output name=platform::linux/arm/v6" elif [[ "${{ matrix.architecture }}" = "armv7" ]]; then echo "::set-output name=platform::linux/arm/v7" elif [[ "${{ matrix.architecture }}" = "aarch64" ]]; then echo "::set-output name=platform::linux/arm64/v8" else echo "::error ::Could not determine platform for architecture ${{ matrix.architecture }}" exit 1 fi - name: â¤ĩī¸ Download base image run: docker pull "${{ steps.flags.outputs.from }}" - name: ✅ Verify authenticity of base image run: | vcn authenticate \ "docker://${{ steps.flags.outputs.from }}" vcn authenticate \ --output json \ --signerID 0x03e406879fd89e52f38f4aab0061266d1183980a \ "docker://${{ steps.flags.outputs.from }}" \ | jq \ --exit-status \ '.verification.status == 0' - name: 🚀 Build uses: docker/build-push-action@v2.4.0 with: push: false context: ${{ needs.information.outputs.target }} file: ${{ needs.information.outputs.target }}/Dockerfile cache-from: | type=local,src=/tmp/.docker-cache ghcr.io/hassio-addons/${{ needs.information.outputs.slug }}/${{ matrix.architecture }}:edge cache-to: type=local,mode=max,dest=/tmp/.docker-cache platforms: ${{ steps.flags.outputs.platform }} build-args: | BUILD_ARCH=${{ matrix.architecture }} BUILD_DATE=${{ steps.flags.outputs.date }} BUILD_DESCRIPTION=${{ needs.information.outputs.description }} BUILD_FROM=${{ steps.flags.outputs.from }} BUILD_NAME=${{ needs.information.outputs.name }} BUILD_REF=${{ github.sha }} BUILD_REPOSITORY=${{ github.repository }} BUILD_VERSION=edge