From efb2d820d62dec7cd34b2d216eadd9bc02e2d83a Mon Sep 17 00:00:00 2001 From: Adam Bouqdib Date: Thu, 13 Aug 2020 18:22:24 +0100 Subject: [PATCH] tooling: build multiarch docker image --- .github/workflows/fider.yml | 68 ++++++++++++++++++++++++++----------- Dockerfile | 4 ++- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/.github/workflows/fider.yml b/.github/workflows/fider.yml index a415a94c9..fbfa8accc 100644 --- a/.github/workflows/fider.yml +++ b/.github/workflows/fider.yml @@ -3,10 +3,10 @@ name: fider on: push: branches: - - master + - master pull_request: branches: - - master + - master jobs: test-ui: @@ -32,7 +32,7 @@ jobs: minio: image: getfider/minio:0.0.2 ports: - - 9000:9000 + - 9000:9000 env: MINIO_ACCESS_KEY: s3user MINIO_SECRET_KEY: s3user-s3cr3t @@ -43,7 +43,7 @@ jobs: POSTGRES_PASSWORD: fider_ci_pw POSTGRES_DB: fider_ci ports: - - 5432:5432 + - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: @@ -67,24 +67,54 @@ jobs: steps: - name: checkout code - uses: actions/checkout@v1 - - run: docker build -t getfider/fider . - - - name: extract branch name - run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" - id: getBranch + uses: actions/checkout@v2 + + - name: set up docker buildx + uses: crazy-max/ghaction-docker-buildx@v3 - - uses: azure/docker-login@v1 - if: steps.getBranch.outputs.branch == 'master' + - name: cache docker layers + uses: actions/cache@v2 with: - username: ${{ secrets.DOCKER_USER }} - password: ${{ secrets.DOCKER_PASS }} + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: ${{ runner.os }}-buildx- + + - name: build docker image + run: | + docker buildx build \ + --cache-from "type=local,src=/tmp/.buildx-cache" \ + --cache-to "type=local,dest=/tmp/.buildx-cache" \ + --platform linux/386,linux/amd64,linux/arm64 \ + --output "type=image,push=false" \ + --tag getfider/fider . + + # fails when used with buildx - see https://github.com/crazy-max/ghaction-docker-buildx/issues/230 + # TODO: re-enable once issue above is fixed + # - uses: azure/docker-login@v1 + # if: github.ref == 'refs/heads/master' + # with: + # username: ${{ secrets.DOCKER_USER }} + # password: ${{ secrets.DOCKER_PASS }} + + - name: docker login + if: github.ref == 'refs/heads/master' + env: + DOCKER_USERNAME: ${{ secrets.DOCKER_USER }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASS }} + run: echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin - name: push docker image - if: steps.getBranch.outputs.branch == 'master' + if: github.ref == 'refs/heads/master' run: | export SHORT_SHA=`git rev-parse --short=7 ${GITHUB_SHA}` - docker tag getfider/fider getfider/fider:${SHORT_SHA} - docker push getfider/fider:${SHORT_SHA} - docker tag getfider/fider getfider/fider:master - docker push getfider/fider:master \ No newline at end of file + docker buildx build \ + --cache-from "type=local,src=/tmp/.buildx-cache" \ + --platform linux/386,linux/amd64,linux/arm64 \ + --tag getfider/fider:${SHORT_SHA} \ + --tag getfider/fider:master \ + --push . + + - name: cleanup + if: always() && github.ref == 'refs/heads/master' + run: | + rm -f ${HOME}/.docker/config.json diff --git a/Dockerfile b/Dockerfile index fd98f9ca9..168b9c7ca 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ # Build Step FROM getfider/githubci:0.0.2 AS builder +ARG TARGETPLATFORM + RUN mkdir /app WORKDIR /app @@ -8,7 +10,7 @@ COPY . . RUN npm ci RUN node -v RUN npm -v -RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 mage build +RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETPLATFORM##*/} mage build # Runtime Step FROM alpine:3.10