diff --git a/.github/workflows/test-and-build-v6.yml b/.github/workflows/test-and-build-v6.yml new file mode 100644 index 0000000..302cba0 --- /dev/null +++ b/.github/workflows/test-and-build-v6.yml @@ -0,0 +1,144 @@ +name: Build and Publish (development-v6-nightly) +on: + schedule: + - cron: "0 5 * * *" + push: + branches: + - development-v6 + pull_request: + +env: + dockerhub: ${{ secrets.DOCKERHUB_NAMESPACE }}/pihole + ghcr: ghcr.io/${{ github.repository_owner }}/pihole + +jobs: + build-and-test: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + registry: [dockerhub, ghcr] + platform: [linux/amd64, linux/386, linux/arm/v6, linux/arm/v7, linux/arm64/v8] + container: [3.18] + include: + - registry: dockerhub + platform: linux/riscv64 + container: edge + - registry: ghcr + platform: linux/riscv64 + container: edge + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + with: + ref: development-v6 + + - name: Docker meta (Docker Hub and GitHub Container Registry) + id: meta + uses: docker/metadata-action@v4 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + images: | + ${{ env[matrix.registry] }} + flavor: | + latest=false + tags: | + development-v6 + + - name: Login to DockerHub and GitHub Container Registry + if: github.event_name != 'pull_request' + uses: ./.github/actions/login-repo + with: + docker_username: ${{ secrets.DOCKERHUB_USER }} + docker_password: ${{ secrets.DOCKERHUB_PASS }} + ghcr_username: ${{ github.repository_owner }} + ghcr_password: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: all + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Build container and push by digest (${{ matrix.registry }}) + id: build + uses: docker/build-push-action@v3 + with: + context: ./src/ + platforms: ${{ matrix.platform }} + build-args: | + PIHOLE_DOCKER_TAG=${{ steps.meta.outputs.version }} + CONTAINER=${{ matrix.container }} + labels: ${{ steps.meta.outputs.labels }} + outputs: | + type=image,name=${{ env[matrix.registry] }},push-by-digest=${{ github.event_name != 'pull_request' }},name-canonical=true,push=${{ github.event_name != 'pull_request' }} + + - name: Export digests + run: | + mkdir -p /tmp/digests/${{ matrix.registry }} + digest_docker="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${{ matrix.registry }}/${digest_docker#sha256:}" + + - name: Upload digest + uses: actions/upload-artifact@v3 + with: + name: digests + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + + # Merge all the digests into a single file + # If we would push immediately above, the individual runners would overwrite each other's images + # https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners + merge-and-deploy: + if: github.event_name != 'pull_request' + strategy: + fail-fast: false + matrix: + registry: [dockerhub, ghcr] + runs-on: ubuntu-latest + needs: + - build-and-test + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + + - name: Download digests + uses: actions/download-artifact@v3 + with: + name: digests + path: /tmp/digests + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub and GitHub Container Registry + uses: ./.github/actions/login-repo + with: + docker_username: ${{ secrets.DOCKERHUB_USER }} + docker_password: ${{ secrets.DOCKERHUB_PASS }} + ghcr_username: ${{ github.repository_owner }} + ghcr_password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta (Docker Hub and GitHub Container Registry) + id: meta + uses: docker/metadata-action@v4 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + images: | + ${{ env[matrix.registry] }} + flavor: | + latest=false + tags: | + development-v6 + + - name: Create manifest list and push (${{ matrix.registry }}) + working-directory: /tmp/digests/${{ matrix.registry }} + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env[matrix.registry] }}@sha256:%s ' *) + + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ env[matrix.registry] }}:${{ steps.meta.outputs.version }} diff --git a/.github/workflows/v6-pre-alpha.yml b/.github/workflows/v6-pre-alpha.yml deleted file mode 100644 index 4994711..0000000 --- a/.github/workflows/v6-pre-alpha.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Build & Publish -on: - schedule: - - cron: '0 5 * * *' - push: - branches: - - v6-pre-alpha - -jobs: - build-and-publish: - runs-on: ubuntu-latest - steps: - - - name: Checkout - if: github.event_name != 'schedule' - uses: actions/checkout@v3 - - - name: Checkout dev branch if we are building - if: github.event_name == 'schedule' - uses: actions/checkout@v3 - with: - ref: v6-pre-alpha - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - images: | - ${{ secrets.DOCKERHUB_NAMESPACE }}/pihole - ghcr.io/${{ github.repository_owner }}/pihole - flavor: | - latest=false - tags: | - v6-pre-alpha - - - name: Login to DockerHub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKERHUB_USER }} - password: ${{ secrets.DOCKERHUB_PASS }} - - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and push - uses: docker/build-push-action@v4 - with: - context: ./src/ - platforms: linux/amd64, linux/arm64, linux/386, linux/arm/v7, linux/arm/v6 - build-args: | - PIHOLE_DOCKER_TAG=${{ steps.meta.outputs.version }} - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }}