From 85fa473a495719a45772436ffec04636f903294d Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Thu, 13 Feb 2025 15:42:26 +0100 Subject: [PATCH 1/2] chore: Improve operator image build Signed-off-by: Anatolii Bazko --- .github/workflows/pr-check.yml | 32 ++++----- ...lease-next-catalog-and-operator-image.yaml | 67 ++++++++++++++----- build/scripts/release/make-release.sh | 2 +- 3 files changed, 66 insertions(+), 35 deletions(-) diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index ff8b318ceb..b458d7f7d2 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -24,28 +24,24 @@ jobs: go-version: 1.21.10 - name: Run unit tests run: make test - image-build: - runs-on: ubuntu-22.04 - steps: - - name: Checkout source code - uses: actions/checkout@v3 - - name: Build image - run: docker build . multiplatform-image-build: - runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] + runs-on: ${{matrix.runners}} steps: - name: Checkout source code uses: actions/checkout@v3 - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build images - uses: docker/build-push-action@v3 - with: - file: Dockerfile - platforms: linux/amd64,linux/ppc64le,linux/arm64 - tags: quay.io/eclipse/che-operator:next + - name: Set arch environment variable + run: | + if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then + echo arch="amd64" >> $GITHUB_ENV + else + echo arch="arm64" >> $GITHUB_ENV + fi + - name: Build image + run: docker buildx --platform linux/${{env.arch}} . source-code-validation: runs-on: ubuntu-22.04 steps: diff --git a/.github/workflows/release-next-catalog-and-operator-image.yaml b/.github/workflows/release-next-catalog-and-operator-image.yaml index 8fab1a0c0f..cb4aa717cc 100644 --- a/.github/workflows/release-next-catalog-and-operator-image.yaml +++ b/.github/workflows/release-next-catalog-and-operator-image.yaml @@ -22,17 +22,24 @@ on: branches: - main jobs: - build-operator-image: - runs-on: ubuntu-22.04 + build-operator-image-multiarch: + strategy: + fail-fast: false + matrix: + runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] + runs-on: ${{matrix.runners}} steps: - name: Checkout source code uses: actions/checkout@v3 - - name: Install yq - run: sudo pip install yq - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - name: Set arch environment variable + run: | + if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then + echo arch="amd64" >> $GITHUB_ENV + else + echo arch="arm64" >> $GITHUB_ENV + fi + - name: Set short_sha environment variable + run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV - name: Login to quay.io uses: docker/login-action@v2 with: @@ -40,15 +47,42 @@ jobs: password: ${{ secrets.QUAY_PASSWORD }} registry: quay.io - name: Build operator image - uses: docker/build-push-action@v3 + run: | + docker buildx build \ + --platform linux/${{env.arch}} \ + --progress=plain \ + --push \ + -t quay.io/eclipse/che-operator:${{env.arch}}-${{short_sha}} . + + publish-operator-manifest: + name: publish operator image + runs-on: ubuntu-22.04 + needs: build-operator-image-multiarch + steps: + - name: Login to Quay.io + uses: docker/login-action@v2 with: - file: Dockerfile - platforms: linux/amd64,linux/ppc64le,linux/arm64 - push: true - tags: quay.io/eclipse/che-operator:next + registry: quay.io + username: ${{ secrets.QUAY_USERNAME }} + password: ${{ secrets.QUAY_PASSWORD }} + - name: Set short_sha environment variable + run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV + - name: publish + run: | + docker manifest create quay.io/eclipse/che-operator:next \ + --amend quay.io/eclipse/che-operator:amd64-${{env.short_sha}} \ + --amend quay.io/eclipse/che-operator:arm64-${{env.short_sha}} + docker manifest annotate quay.io/eclipse/che-operator:next \ + quay.io/eclipse/che-operator:amd64-${{env.short_sha}} \ + --os linux --arch amd64 + docker manifest annotate quay.io/eclipse/che-operator:next \ + quay.io/eclipse/che-operator:arm64-${{env.short_sha}} \ + --os linux --arch arm64 + docker manifest push quay.io/eclipse/che-operator:next + build-catalog: runs-on: ubuntu-22.04 - needs: build-operator-image + needs: publish-operator-manifest steps: - name: Checkout source code uses: actions/checkout@v3 @@ -69,8 +103,9 @@ jobs: ${GITHUB_WORKSPACE}/build/scripts/olm/release-catalog.sh \ --channel next \ --image-tool docker \ - --platform linux/amd64,linux/arm64,linux/ppc64le \ + --platform linux/amd64,linux/arm64 \ --catalog-image quay.io/eclipse/eclipse-che-olm-catalog:next + build-catalog-with-digest: runs-on: ubuntu-22.04 needs: build-operator-image @@ -101,6 +136,6 @@ jobs: ${GITHUB_WORKSPACE}/build/scripts/olm/release-catalog.sh \ --channel next \ --image-tool docker \ - --platform linux/amd64,linux/arm64,linux/ppc64le \ + --platform linux/amd64,linux/arm64 \ --catalog-image quay.io/eclipse/eclipse-che-olm-catalog:next-digest \ --bundle-image quay.io/eclipse/eclipse-che-olm-bundle:$(make bundle-version CHANNEL=next)-digest diff --git a/build/scripts/release/make-release.sh b/build/scripts/release/make-release.sh index 8fe382f637..dac5ae6420 100755 --- a/build/scripts/release/make-release.sh +++ b/build/scripts/release/make-release.sh @@ -28,7 +28,7 @@ init() { PREPARE_COMMUNITY_OPERATORS_UPDATE=false OPERATOR_REPO=$(dirname "$(dirname "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")")") FORCE_UPDATE="" - BUILDX_PLATFORMS="linux/amd64,linux/ppc64le,linux/arm64" + BUILDX_PLATFORMS="linux/amd64,linux/arm64" CSV_STABLE_PATH=$(make csv-path CHANNEL=stable) MANAGER_YAML=${OPERATOR_REPO}/config/manager/manager.yaml CHE_OPERATOR_IMAGE=$(yq -r '.spec.template.spec.containers[0].image' "${MANAGER_YAML}" | sed -e "s/\(.*:\).*/\1${RELEASE}/") From cfc0a0de1bfba32a18093dae3cb4ff5439ae0152 Mon Sep 17 00:00:00 2001 From: Anatolii Bazko Date: Thu, 13 Feb 2025 15:45:52 +0100 Subject: [PATCH 2/2] fixup Signed-off-by: Anatolii Bazko --- .github/workflows/pr-check.yml | 2 +- .../manifests/che-operator.clusterserviceversion.yaml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index b458d7f7d2..439d0ed29e 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -41,7 +41,7 @@ jobs: echo arch="arm64" >> $GITHUB_ENV fi - name: Build image - run: docker buildx --platform linux/${{env.arch}} . + run: docker buildx build --platform linux/${{env.arch}} . source-code-validation: runs-on: ubuntu-22.04 steps: diff --git a/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml b/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml index addc4b7d65..a9fa5ebbbd 100644 --- a/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml +++ b/bundle/next/eclipse-che/manifests/che-operator.clusterserviceversion.yaml @@ -108,7 +108,7 @@ metadata: operatorframework.io/arch.amd64: supported operatorframework.io/arch.arm64: supported operatorframework.io/os.linux: supported - name: eclipse-che.v7.99.0-898.next + name: eclipse-che.v7.99.0-899.next namespace: placeholder spec: apiservicedefinitions: {} @@ -1077,7 +1077,7 @@ spec: minKubeVersion: 1.19.0 provider: name: Eclipse Foundation - version: 7.99.0-898.next + version: 7.99.0-899.next webhookdefinitions: - admissionReviewVersions: - v1