From 275bf1426376a4163debc9b37da17e90da5fe476 Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Tue, 11 Jul 2023 23:46:32 +0100 Subject: [PATCH 1/3] Update dependabot.yml Signed-off-by: Adam Warner --- .github/dependabot.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 8a3c42392..b679f5c79 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,3 +10,13 @@ updates: target-branch: dev reviewers: - "pi-hole/docker-maintainers" + # Maintain dependencies for GitHub Actions development-v6 + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: saturday + time: "10:00" + target-branch: development-v6 + reviewers: + - "pi-hole/docker-maintainers" From 39c1245096e4aa15c50cb7d1c0c782de2431c9d1 Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Wed, 12 Jul 2023 19:20:38 +0100 Subject: [PATCH 2/3] Should prevent the remove stale step from running on schedule from running on Signed-off-by: Adam Warner --- .github/workflows/stale.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index b7b76ed84..14114dad9 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -34,7 +34,7 @@ jobs: # we need to explicitly check that the trigger does not run on comment on a PR as # 'issue_comment' triggers on issues AND PR comments # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#issue_comment-on-issues-only-or-pull-requests-only - if: ${{ !github.event.issue.pull_request }} + if: ${{ !github.event.issue.pull_request && github.event != 'schedule' }} permissions: contents: read # for actions/checkout issues: write # to edit issues label From c7dc79db14c4acc4a6d724a4f747268c857bcc2a Mon Sep 17 00:00:00 2001 From: Adam Warner Date: Wed, 12 Jul 2023 21:51:49 +0100 Subject: [PATCH 3/3] only master branch runs the scheduled jobs Signed-off-by: Adam Warner --- .github/workflows/test-and-build-v6.yml | 144 ++++++++++++++++++++++++ .github/workflows/v6-pre-alpha.yml | 65 ----------- 2 files changed, 144 insertions(+), 65 deletions(-) create mode 100644 .github/workflows/test-and-build-v6.yml delete mode 100644 .github/workflows/v6-pre-alpha.yml diff --git a/.github/workflows/test-and-build-v6.yml b/.github/workflows/test-and-build-v6.yml new file mode 100644 index 000000000..302cba013 --- /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 4994711b6..000000000 --- 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 }}