From b2a79a4c9da03ea93f3fdfbae34153b4c310090d Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Mon, 10 Jul 2023 18:37:18 +0200 Subject: [PATCH 1/2] update and simplify github build action --- .github/workflows/build.yml | 265 ++++++++++++++++++++---------------- 1 file changed, 147 insertions(+), 118 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 436aed4bd..7dc782d61 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Docker builds on: pull_request: - branches: master + branches: [master, fix-build-pipeline] push: - branches: master + branches: [master, fix-build-pipeline] tags: - v* @@ -18,14 +18,14 @@ jobs: name: Build Docker Image runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - target_platform: - - "linux/amd64" - - "linux/arm64" - - "linux/arm/v7" - - "linux/arm/v6" + # strategy: + # fail-fast: false + # matrix: + # target_platform: + # - "linux/amd64" + # - "linux/arm64" + # - "linux/arm/v7" + # - "linux/arm/v6" steps: - name: Checkout @@ -48,114 +48,143 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - - name: Prepare - id: prepare - run: | - DOCKER_PLATFORMS=${{ matrix.target_platform }} - - VERSION=edge - if [[ $GITHUB_REF == refs/tags/* ]]; then - VERSION=${GITHUB_REF#refs/tags/v} - fi - - OUTPUT_PLATFORM=$(echo ${{ matrix.target_platform }} | sed 's/\//-/g') - echo ::set-output name=output_platform::${OUTPUT_PLATFORM} - - TAG="--tag ${DOCKER_IMAGE}:${OUTPUT_PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" - - echo ::set-output name=docker_username::${DOCKER_USERNAME} - echo ::set-output name=docker_image::${DOCKER_IMAGE} - echo ::set-output name=version::${VERSION} - echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ - --progress=plain \ - --cache-from "type=local,src=/tmp/.buildx-cache" \ - --cache-to "type=local,dest=/tmp/.buildx-cache" \ - --build-arg VERSION=${VERSION} \ - --build-arg COMMIT_SHA=${GITHUB_SHA} \ - --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ - --build-arg VCS_REF=${GITHUB_SHA::8} \ - ${TAG} --file Dockerfile . - - - name: Docker Build - run: | - docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} + # - name: Prepare + # id: prepare + # run: | + # DOCKER_PLATFORMS=${{ matrix.target_platform }} + + # VERSION=edge + # if [[ $GITHUB_REF == refs/tags/* ]]; then + # VERSION=${GITHUB_REF#refs/tags/v} + # fi + + # OUTPUT_PLATFORM=$(echo ${{ matrix.target_platform }} | sed 's/\//-/g') + # echo ::set-output name=output_platform::${OUTPUT_PLATFORM} + + # TAG="--tag ${DOCKER_IMAGE}:${OUTPUT_PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" + + # echo ::set-output name=docker_username::${DOCKER_USERNAME} + # echo ::set-output name=docker_image::${DOCKER_IMAGE} + # echo ::set-output name=version::${VERSION} + # echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ + # --progress=plain \ + # --cache-from "type=local,src=/tmp/.buildx-cache" \ + # --cache-to "type=local,dest=/tmp/.buildx-cache" \ + # --build-arg VERSION=${VERSION} \ + # --build-arg COMMIT_SHA=${GITHUB_SHA} \ + # --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ + # --build-arg VCS_REF=${GITHUB_SHA::8} \ + # ${TAG} --file Dockerfile . + + # - name: Docker Build + # run: | + # docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} - name: Docker Login if: success() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - run: | - echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin - - - name: Push to Docker Hub - if: success() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - run: | - docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} - - - name: Clear - if: always() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - 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' - defaults: - run: - shell: bash - - needs: [build] - - steps: - - name: Docker Login - run: | - echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin - - - name: Create Manifests - run: | - DOCKER_IMAGES="${DOCKER_IMAGE}:linux-amd64-${GITHUB_SHA::8}-${{ github.event_name }}" - DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm64-${GITHUB_SHA::8}-${{ github.event_name }}" - DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v7-${GITHUB_SHA::8}-${{ github.event_name }}" - DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v6-${GITHUB_SHA::8}-${{ github.event_name }}" - - VERSION=edge - if [[ $GITHUB_REF == refs/tags/* ]]; then - VERSION=${GITHUB_REF#refs/tags/v} - fi - - TAGS=("${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+=("${VERSION_MAJOR}" "${VERSION_MINOR}" "latest") - fi - - for TAG in ${TAGS[*]}; do - echo "Creating tag: ${TAG}" - docker manifest create ${DOCKER_IMAGE}:${TAG} ${DOCKER_IMAGES} - docker manifest push ${DOCKER_IMAGE}:${TAG} - done - - - name: Cleanup tags - run: | - ACCESS_TOKEN=$(curl -X POST \ - -H "Content-Type: application/json" \ - -H "Accept: application/json" \ - -d "{\"username\":\"${DOCKER_USERNAME}\",\"password\":\"${DOCKER_PASSWORD}\"}" \ - https://hub.docker.com/v2/users/login/ | jq --raw-output '.token') - - PLATFORMS=("amd64" "arm64" "arm-v7" "arm-v6") - for PLATFORM in ${PLATFORMS[@]}; do - TAG="linux-${PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" - echo "Deleting tag: ${DOCKER_IMAGE}:${TAG}" - - curl -X DELETE \ - -H "Accept: application/json" \ - -H "Authorization: JWT ${ACCESS_TOKEN}" \ - https://hub.docker.com/v2/repositories/${DOCKER_IMAGE}/tags/${TAG}/ - done - - - name: Clear - if: always() - run: | - rm -f ${HOME}/.docker/config.json + uses: docker/login-action@v2 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + # run: | + # echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin + + - name: Docker meta + id: docker_meta + uses: docker/metadata-action@v3 + with: + # list of Docker images to use as base name for tags + images: ${{ env.DOCKER_IMAGE }} + # Docker tags based on the following events/attributes + tags: | + type=schedule + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6 + push: ${{ github.event_name != 'pull_request' && github.repository == 'photoview/photoview' }} + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + + # - name: Push to Docker Hub + # if: success() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' + # run: | + # docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} + + # - name: Clear + # if: always() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' + # 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' + # defaults: + # run: + # shell: bash + + # needs: [build] + + # steps: + # - name: Docker Login + # run: | + # echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin + + # - name: Create Manifests + # run: | + # DOCKER_IMAGES="${DOCKER_IMAGE}:linux-amd64-${GITHUB_SHA::8}-${{ github.event_name }}" + # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm64-${GITHUB_SHA::8}-${{ github.event_name }}" + # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v7-${GITHUB_SHA::8}-${{ github.event_name }}" + # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v6-${GITHUB_SHA::8}-${{ github.event_name }}" + + # VERSION=edge + # if [[ $GITHUB_REF == refs/tags/* ]]; then + # VERSION=${GITHUB_REF#refs/tags/v} + # fi + + # TAGS=("${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+=("${VERSION_MAJOR}" "${VERSION_MINOR}" "latest") + # fi + + # for TAG in ${TAGS[*]}; do + # echo "Creating tag: ${TAG}" + # docker manifest create ${DOCKER_IMAGE}:${TAG} ${DOCKER_IMAGES} + # docker manifest push ${DOCKER_IMAGE}:${TAG} + # done + + # - name: Cleanup tags + # run: | + # ACCESS_TOKEN=$(curl -X POST \ + # -H "Content-Type: application/json" \ + # -H "Accept: application/json" \ + # -d "{\"username\":\"${DOCKER_USERNAME}\",\"password\":\"${DOCKER_PASSWORD}\"}" \ + # https://hub.docker.com/v2/users/login/ | jq --raw-output '.token') + + # PLATFORMS=("amd64" "arm64" "arm-v7" "arm-v6") + # for PLATFORM in ${PLATFORMS[@]}; do + # TAG="linux-${PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" + # echo "Deleting tag: ${DOCKER_IMAGE}:${TAG}" + + # curl -X DELETE \ + # -H "Accept: application/json" \ + # -H "Authorization: JWT ${ACCESS_TOKEN}" \ + # https://hub.docker.com/v2/repositories/${DOCKER_IMAGE}/tags/${TAG}/ + # done + + # - name: Clear + # if: always() + # run: | + # rm -f ${HOME}/.docker/config.json From 5c1f8b4632111172fab408eef56db6b1da6fe301 Mon Sep 17 00:00:00 2001 From: viktorstrate Date: Mon, 10 Jul 2023 22:49:01 +0200 Subject: [PATCH 2/2] clean up build action --- .github/workflows/build.yml | 122 +----------------------------------- 1 file changed, 2 insertions(+), 120 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7dc782d61..3b754afab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,9 +2,9 @@ name: Docker builds on: pull_request: - branches: [master, fix-build-pipeline] + branches: [master] push: - branches: [master, fix-build-pipeline] + branches: [master] tags: - v* @@ -18,15 +18,6 @@ jobs: name: Build Docker Image runs-on: ubuntu-20.04 - # strategy: - # fail-fast: false - # matrix: - # target_platform: - # - "linux/amd64" - # - "linux/arm64" - # - "linux/arm/v7" - # - "linux/arm/v6" - steps: - name: Checkout uses: actions/checkout@v2 @@ -48,46 +39,12 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - # - name: Prepare - # id: prepare - # run: | - # DOCKER_PLATFORMS=${{ matrix.target_platform }} - - # VERSION=edge - # if [[ $GITHUB_REF == refs/tags/* ]]; then - # VERSION=${GITHUB_REF#refs/tags/v} - # fi - - # OUTPUT_PLATFORM=$(echo ${{ matrix.target_platform }} | sed 's/\//-/g') - # echo ::set-output name=output_platform::${OUTPUT_PLATFORM} - - # TAG="--tag ${DOCKER_IMAGE}:${OUTPUT_PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" - - # echo ::set-output name=docker_username::${DOCKER_USERNAME} - # echo ::set-output name=docker_image::${DOCKER_IMAGE} - # echo ::set-output name=version::${VERSION} - # echo ::set-output name=buildx_args::--platform ${DOCKER_PLATFORMS} \ - # --progress=plain \ - # --cache-from "type=local,src=/tmp/.buildx-cache" \ - # --cache-to "type=local,dest=/tmp/.buildx-cache" \ - # --build-arg VERSION=${VERSION} \ - # --build-arg COMMIT_SHA=${GITHUB_SHA} \ - # --build-arg BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ') \ - # --build-arg VCS_REF=${GITHUB_SHA::8} \ - # ${TAG} --file Dockerfile . - - # - name: Docker Build - # run: | - # docker buildx build --output "type=image,push=false" ${{ steps.prepare.outputs.buildx_args }} - - name: Docker Login if: success() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' uses: docker/login-action@v2 with: username: ${{ env.DOCKER_USERNAME }} password: ${{ env.DOCKER_PASSWORD }} - # run: | - # echo "${DOCKER_PASSWORD}" | docker login --username "${{ steps.prepare.outputs.docker_username }}" --password-stdin - name: Docker meta id: docker_meta @@ -113,78 +70,3 @@ jobs: push: ${{ github.event_name != 'pull_request' && github.repository == 'photoview/photoview' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} - - # - name: Push to Docker Hub - # if: success() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - # run: | - # docker buildx build --output "type=image,push=true" ${{ steps.prepare.outputs.buildx_args }} - - # - name: Clear - # if: always() && github.event_name != 'pull_request' && github.repository == 'photoview/photoview' - # 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' - # defaults: - # run: - # shell: bash - - # needs: [build] - - # steps: - # - name: Docker Login - # run: | - # echo "${DOCKER_PASSWORD}" | docker login --username "${DOCKER_USERNAME}" --password-stdin - - # - name: Create Manifests - # run: | - # DOCKER_IMAGES="${DOCKER_IMAGE}:linux-amd64-${GITHUB_SHA::8}-${{ github.event_name }}" - # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm64-${GITHUB_SHA::8}-${{ github.event_name }}" - # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v7-${GITHUB_SHA::8}-${{ github.event_name }}" - # DOCKER_IMAGES="${DOCKER_IMAGES} ${DOCKER_IMAGE}:linux-arm-v6-${GITHUB_SHA::8}-${{ github.event_name }}" - - # VERSION=edge - # if [[ $GITHUB_REF == refs/tags/* ]]; then - # VERSION=${GITHUB_REF#refs/tags/v} - # fi - - # TAGS=("${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+=("${VERSION_MAJOR}" "${VERSION_MINOR}" "latest") - # fi - - # for TAG in ${TAGS[*]}; do - # echo "Creating tag: ${TAG}" - # docker manifest create ${DOCKER_IMAGE}:${TAG} ${DOCKER_IMAGES} - # docker manifest push ${DOCKER_IMAGE}:${TAG} - # done - - # - name: Cleanup tags - # run: | - # ACCESS_TOKEN=$(curl -X POST \ - # -H "Content-Type: application/json" \ - # -H "Accept: application/json" \ - # -d "{\"username\":\"${DOCKER_USERNAME}\",\"password\":\"${DOCKER_PASSWORD}\"}" \ - # https://hub.docker.com/v2/users/login/ | jq --raw-output '.token') - - # PLATFORMS=("amd64" "arm64" "arm-v7" "arm-v6") - # for PLATFORM in ${PLATFORMS[@]}; do - # TAG="linux-${PLATFORM}-${GITHUB_SHA::8}-${{ github.event_name }}" - # echo "Deleting tag: ${DOCKER_IMAGE}:${TAG}" - - # curl -X DELETE \ - # -H "Accept: application/json" \ - # -H "Authorization: JWT ${ACCESS_TOKEN}" \ - # https://hub.docker.com/v2/repositories/${DOCKER_IMAGE}/tags/${TAG}/ - # done - - # - name: Clear - # if: always() - # run: | - # rm -f ${HOME}/.docker/config.json