From cf36b9ec8d38445789d90a4bfd1993d725bdecdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Viktor=20Strate=20Kl=C3=B8vedal?= Date: Sun, 28 Mar 2021 23:03:42 +0200 Subject: [PATCH] Push individual images, combine afterwards --- .github/workflows/build.yml | 88 +++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 47 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e418b7bc..a291344f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,6 +9,11 @@ on: branches: master tags: - v* + +env: + DOCKER_USERNAME: viktorstrate + DOCKER_IMAGE: viktorstrate/photoview + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} jobs: build: @@ -19,9 +24,9 @@ jobs: matrix: target_platform: - "linux/amd64" - - "linux/arm/v6" - - "linux/arm/v7" - "linux/arm64" + - "linux/arm/v7" + - "linux/arm/v6" steps: - name: Checkout @@ -47,8 +52,6 @@ jobs: - name: Prepare id: prepare run: | - DOCKER_USERNAME=viktorstrate - DOCKER_IMAGE=viktorstrate/photoview DOCKER_PLATFORMS=${{ matrix.target_platform }} VERSION=edge @@ -58,13 +61,11 @@ jobs: if [ "${{ github.event_name }}" = "schedule" ]; then VERSION=nightly fi - - TAGS="--tag ${DOCKER_IMAGE}:${VERSION}" - if [[ $VERSION =~ ^(([0-9]{1,3})\.[0-9]{1,3})\.[0-9]{1,3}$ ]]; then - VERSION_MINOR=${BASH_REMATCH[1]} - VERSION_MAJOR=${BASH_REMATCH[2]} - TAGS="$TAGS --tag ${DOCKER_IMAGE}:latest --tag ${DOCKER_IMAGE}:${VERSION_MINOR} --tag ${DOCKER_IMAGE}:${VERSION_MAJOR}" - fi + + OUTPUT_PLATFORM=$(echo ${{ matrix.target_platform }} | sed 's/\//-/g') + echo ::set-output name=output_platform::${OUTPUT_PLATFORM} + + TAG="--tag ${OUTPUT_PLATFORM}-${GITHUB_SHA::8}" echo ::set-output name=docker_username::${DOCKER_USERNAME} echo ::set-output name=docker_image::${DOCKER_IMAGE} @@ -76,51 +77,44 @@ jobs: --build-arg VERSION=${VERSION} \ --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ --build-arg VCS_REF=${GITHUB_SHA::8} \ - ${TAGS} --file Dockerfile . - - OUTPUT_PLATFORM=$(echo ${{ matrix.target_platform }} | sed 's/\//-/g') - echo ::set-output name=output_platform::${OUTPUT_PLATFORM} + ${TAG} --file Dockerfile . - name: Docker Build run: | mkdir -p /tmp/docker-image-${{ matrix.target_platform }} - docker buildx build --output "type=oci,dest=/tmp/docker-image-${{ steps.prepare.outputs.output_platform }}-${{ github.sha }}.oci" ${{ steps.prepare.outputs.buildx_args }} + docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args - - name: Save Image - uses: actions/upload-artifact@v2 - with: - name: docker-image-${{ steps.prepare.outputs.output_platform }} - path: /tmp/docker-image-${{ steps.prepare.outputs.output_platform }}-${{ github.sha }}.oci + - name: Docker Login + run: | + echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin - push: - name: Push Docker Images + - name: Push to Docker Hub + run: | + docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} + + - name: Clear + run: | + rm -f ${HOME}/.docker/config.json + + docker-manifest: + name: Combine Docker Images runs-on: ubuntu-20.04 if: github.event_name != 'pull_request' && github.repository == 'photoview/photoview' needs: [build] - - steps: - - name: Load Images - uses: actions/download-artifact@v2 - - - name: Print Artifacts - run: ls -R - #- name: Docker Login - # env: - # DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - # run: | - # echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin - - #- name: Push to Docker Hub - # run: | - # docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} - - # - name: Docker Check Manifest - # if: always() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - # run: | - # docker run --rm mplatform/mquery ${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }} - - - name: Clear + steps: + - name: Docker Login run: | - rm -f ${HOME}/.docker/config.json + echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin + + - name: Create Manifest + run: | + DOCKER_IMAGES="viktorstrate/photoview:linux-amd64-${GITHUB_SHA::8}" + DOCKER_IMAGES="${DOCKER_IMAGES} viktorstrate/photoview:linux-arm64-${GITHUB_SHA::8}" + DOCKER_IMAGES="${DOCKER_IMAGES} viktorstrate/photoview:linux-arm-v7-${GITHUB_SHA::8}" + DOCKER_IMAGES="${DOCKER_IMAGES} viktorstrate/photoview:linux-arm-v6-${GITHUB_SHA::8}" + + docker manifest create viktorstrate/photoview:test ${DOCKER_IMAGES} + docker manifest push viktorstrate/photoview:test +