From e899d5458906e5e8c354dcfe4a58eda308b06a82 Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Wed, 20 Sep 2023 13:14:04 -0400 Subject: [PATCH] Automatically build and push multiarch docker images on Release (#697) * Update dockerfile to support multi-arch * GHA release docker * Pin docker action versions and remove permissions * Update release-docker-images.yml Use rwynn/monstache instead of my copy :) * Pin docker buildx and buildkit versions --- .github/workflows/release-docker-images.yml | 48 +++++++++++++++++++++ Dockerfile | 36 ++++++---------- 2 files changed, 60 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/release-docker-images.yml diff --git a/.github/workflows/release-docker-images.yml b/.github/workflows/release-docker-images.yml new file mode 100644 index 0000000..af589b6 --- /dev/null +++ b/.github/workflows/release-docker-images.yml @@ -0,0 +1,48 @@ +name: Monstache release docker images + +on: + release: + types: [created] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: Docker meta + id: meta + uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 + with: + # list of Docker images to use as base name for tags + images: | + rwynn/monstache + # generate Docker tags based on the following events/attributes + tags: | + type=raw,value=rel6 + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + - name: Set up QEMU + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 + with: + version: v0.11.2 + driver-opts: image=moby/buildkit:v0.12.2 + - name: Login to Docker Hub + uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + uses: docker/build-push-action@0a97817b6ade9f46837855d676c4cca3a2471fc9 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile index f184532..86ba0be 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,13 @@ -#################################################################################################### -# Step 1: Build the app -#################################################################################################### - -FROM rwynn/monstache-builder-cache-rel6:1.0.8 AS build-app - -RUN mkdir /app - -WORKDIR /app - -COPY . . - -RUN go mod download - -RUN make release - -#################################################################################################### -# Step 2: Copy output build file to an alpine image -#################################################################################################### - -FROM rwynn/monstache-alpine:3.17.3 - +FROM --platform=$BUILDPLATFORM golang:1.20.4-alpine3.17 AS build +WORKDIR /src +ARG TARGETOS TARGETARCH +RUN --mount=target=. \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=cache,target=/go/pkg \ + go mod download; \ + GOOS=$TARGETOS GOARCH=$TARGETARCH go build -o /out/monstache . + +FROM alpine:3.17 +RUN apk --no-cache add ca-certificates ENTRYPOINT ["/bin/monstache"] - -COPY --from=build-app /app/build/linux-amd64/monstache /bin/monstache +COPY --from=build /out/monstache /bin