diff --git a/.docker/release/Dockerfile b/.docker/release/Dockerfile index b5c7317d3..10166eb37 100644 --- a/.docker/release/Dockerfile +++ b/.docker/release/Dockerfile @@ -1,3 +1,5 @@ +# syntax=docker/dockerfile:1 + FROM alpine:3.15 AS builder RUN apk add --no-cache php7 php7-json php-phar php-zip RUN apk add --no-cache npm diff --git a/.docker/release/test/build.sh b/.docker/release/test/build.sh deleted file mode 100755 index 5845979c3..000000000 --- a/.docker/release/test/build.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -eu -docker build -t snappymail/snappymail:test -f .docker/release/Dockerfile . diff --git a/.docker/release/test/build_and_test.sh b/.docker/release/test/build_and_test.sh new file mode 100755 index 000000000..6faeba802 --- /dev/null +++ b/.docker/release/test/build_and_test.sh @@ -0,0 +1,7 @@ +#!/bin/sh +# This script uses docker buildx to build a docker image, and loads it into the docker daemon. Then it executes ./test.sh to test the docker image +# It is useful for testing release builds in development +set -eu +IMAGE=snappymail/snappymail:test +DOCKER_BUILDX=1 docker buildx build --progress plain --load -t "$IMAGE" -f .docker/release/Dockerfile . +.docker/release/test/test.sh "$IMAGE" diff --git a/.docker/release/test/test.sh b/.docker/release/test/test.sh index 62765b407..1981cb358 100755 --- a/.docker/release/test/test.sh +++ b/.docker/release/test/test.sh @@ -1,10 +1,9 @@ #!/bin/sh # This script tests a given docker image using https://github.com/GoogleContainerTools/container-structure-test set -eu - -IMAGE=${1:-snappymail/snappymail:test} SCRIPT_DIR=$( cd "$(dirname "$0")" && pwd ) -docker inspect "$IMAGE" > /dev/null 2>&1 || docker pull "$IMAGE" # Pull the image if it doesn't exist in docker daemon +IMAGE=${1:-} +echo "Testing image: $IMAGE" docker run --rm -i \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v "$SCRIPT_DIR/config.yaml:/config.yaml:ro" \ diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 59e1e6e5f..bc4a7f59b 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -79,6 +79,30 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + # 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 and push id: build-and-push uses: docker/build-push-action@v3 @@ -94,11 +118,6 @@ jobs: cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max - - name: Test - run: | - TAG=$( echo "${{ steps.meta.outputs.tags }}" | head -n1 ) - .docker/release/test/test.sh "$TAG" - # Temp fix # https://github.com/docker/build-push-action/issues/252 # https://github.com/moby/buildkit/issues/1896