diff --git a/.github/workflows/docker-pr.yml b/.github/workflows/docker-pr.yml new file mode 100644 index 000000000..af069cdf6 --- /dev/null +++ b/.github/workflows/docker-pr.yml @@ -0,0 +1,93 @@ +name: docker-pr + +on: + pull_request: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + # This step generates the docker tags + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + env: + # This env var ensures {{sha}} is a real commit SHA for type=ref,event=pr + DOCKER_METADATA_PR_HEAD_SHA: 'true' + with: + images: | + djmaze/snappymail + ghcr.io/${{ github.repository }} + # type=ref,event=pr generates tag(s) on PRs only. E.g. 'pr-123', 'pr-123-abc0123' + tags: | + type=ref,event=pr + type=ref,suffix=-{{sha}},event=pr + # The rest of the org.opencontainers.image.xxx labels are dynamically generated + labels: | + org.opencontainers.image.description=SnappyMail + org.opencontainers.image.licenses=AGPLv3 + + # See: https://github.com/docker/build-push-action/blob/v2.6.1/docs/advanced/cache.md#github-cache + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + # See: https://github.com/docker/buildx/issues/59 + - name: Build + id: build + uses: docker/build-push-action@v3 + with: + context: '.' + file: ./.docker/release/Dockerfile + platforms: linux/amd64 + push: false + load: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + - name: Docker images + run: | + docker images + + - name: Test + run: | + TAG=$( echo "${{ steps.meta.outputs.tags }}" | head -n1 ) + .docker/release/test/test.sh "$TAG" + + - name: Build all archs + uses: docker/build-push-action@v3 + with: + context: '.' + file: ./.docker/release/Dockerfile + platforms: linux/386,linux/amd64,linux/arm64 + push: false + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + + # Temp fix + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 0613fcc3d..b957e2fc8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -3,10 +3,7 @@ name: docker on: push: tags: - - '**' - pull_request: - branches: - - master + - 'v2.*' # This is needed to push to GitHub Container Registry. See https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry permissions: @@ -31,12 +28,9 @@ jobs: images: | djmaze/snappymail ghcr.io/${{ github.repository }} - # type=ref,event=pr generates tag(s) on PRs only. E.g. 'pr-123', 'pr-123-abc0123' # type=ref,event=branch generates tag(s) on branch only. E.g. 'master', 'master-abc0123' # type=ref,event=tag generates tag(s) on tags only. E.g. 'v0.0.0', 'v0.0.0-abc0123', and 'latest' tags: | - type=ref,event=pr - type=ref,suffix=-{{sha}},event=pr type=ref,event=branch type=ref,event=tag # The rest of the org.opencontainers.image.xxx labels are dynamically generated diff --git a/README.md b/README.md index b06338530..fd792d537 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

SnappyMail


-[![github-actions](https://github.com/the-djmaze/snappymail/workflows/docker/badge.svg)](https://github.com/the-djmaze/snappymail/actions/workflows/docker.yml) +[![github-actions](https://github.com/the-djmaze/snappymail/actions/workflows/docker.yml/badge.svg)](https://github.com/the-djmaze/snappymail/actions/workflows/docker.yml) [![docker-image-size](https://img.shields.io/docker/image-size/djmaze/snappymail/latest)](https://hub.docker.com/r/djmaze/snappymail/tags)