From a24c19c503fb236b1900883ea18f326856bc415a Mon Sep 17 00:00:00 2001 From: Tobias Genannt Date: Wed, 4 Sep 2024 10:17:05 +0200 Subject: [PATCH] Use Docker Build Cloud for releases With QEMU the ARM64 builds are slow and not reliable. If we use the Docker Cloud builders we reduce the build times considerably. As a Docker OSS organisation we get 400 build minutes per month, which should be fine, because we already use checks if builds are really needed. The Docker Cloud also uses a cache that should reduce build times a little bit more. --- .github/workflows/release.yml | 33 ++++++++++++++++----------------- build.sh | 7 +++++++ 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c94c1f9..7c27594 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,7 +19,7 @@ jobs: - ./build.sh feature - ./build.sh develop platform: - - linux/amd64 + - linux/amd64,linux/arm64 fail-fast: false runs-on: ubuntu-latest name: Builds new NetBox Docker Images @@ -35,19 +35,11 @@ jobs: name: Get Version of NetBox Docker run: echo "version=$(cat VERSION)" >>"$GITHUB_OUTPUT" shell: bash - - id: qemu-setup - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - id: buildx-setup - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - id: docker-build - name: Build the image with '${{ matrix.build_cmd }}' + - id: check-build-needed + name: Check if the build is needed for '${{ matrix.build_cmd }}' + env: + CHECK_ONLY: "true" run: ${{ matrix.build_cmd }} - - id: test-image - name: Test the image - run: IMAGE="${FINAL_DOCKER_TAG}" ./test.sh - if: steps.docker-build.outputs.skipped != 'true' # docker.io - id: docker-io-login name: Login to docker.io @@ -56,7 +48,14 @@ jobs: registry: docker.io username: ${{ secrets.dockerhub_username }} password: ${{ secrets.dockerhub_password }} - if: steps.docker-build.outputs.skipped != 'true' + if: steps.check-build-needed.outputs.skipped != 'true' + - id: buildx-setup + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + version: "lab:latest" + driver: cloud + endpoint: "netboxcommunity/netbox-default" # quay.io - id: quay-io-login name: Login to Quay.io @@ -65,7 +64,7 @@ jobs: registry: quay.io username: ${{ secrets.quayio_username }} password: ${{ secrets.quayio_password }} - if: steps.docker-build.outputs.skipped != 'true' + if: steps.check-build-needed.outputs.skipped != 'true' # ghcr.io - id: ghcr-io-login name: Login to GitHub Container Registry @@ -74,11 +73,11 @@ jobs: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - if: steps.docker-build.outputs.skipped != 'true' + if: steps.check-build-needed.outputs.skipped != 'true' - id: build-and-push name: Push the image run: ${{ matrix.build_cmd }} --push - if: steps.docker-build.outputs.skipped != 'true' + if: steps.check-build-needed.outputs.skipped != 'true' env: BUILDX_PLATFORM: ${{ matrix.platform }} BUILDX_BUILDER_NAME: ${{ steps.buildx-setup.outputs.name }} diff --git a/build.sh b/build.sh index 0715969..df85df7 100755 --- a/build.sh +++ b/build.sh @@ -103,6 +103,8 @@ GH_ACTION If defined, special 'echo' statements are enabled that set the - FINAL_DOCKER_TAG: The final value of the DOCKER_TAG env variable ${_GREEN}Default:${_CLEAR} undefined +CHECK_ONLY Only checks if the build is needed and sets the GH Action output. + ${_BOLD}Examples:${_CLEAR} ${0} master @@ -355,6 +357,11 @@ else fi gh_echo "::endgroup::" +if [ "${CHECK_ONLY}" = "true" ]; then + echo "Only check if build needed was requested. Exiting" + exit 0 +fi + ### # Build the image ###