--- 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: "tasmoadmin" 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.2.2 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.2 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.5.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.6 with: path: /tmp/.docker-cache key: docker-${{ matrix.architecture }}-${{ github.sha }} restore-keys: | docker-${{ matrix.architecture }} - name: ๐Ÿ— Set up QEMU uses: docker/setup-qemu-action@v1.2.0 - name: ๐Ÿ— Set up Docker Buildx uses: docker/setup-buildx-action@v1.5.1 - 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.7.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-new 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 # This ugly bit is necessary, or our cache will grow forever... # Well until we hit GitHub's limit of 5GB :) # https://github.com/docker/build-push-action/issues/252 # https://github.com/moby/buildkit/issues/1896 - name: ๐Ÿšš Swap build cache run: | rm -rf /tmp/.docker-cache mv /tmp/.docker-cache-new /tmp/.docker-cache