From 6c1a03eff1ea9c7f18568505f7215e548139a47c Mon Sep 17 00:00:00 2001 From: dd di cesare Date: Mon, 4 Nov 2024 13:58:39 +0100 Subject: [PATCH 1/4] [make] Building docker catalog with specific opm base image Signed-off-by: dd di cesare --- make/catalog.mk | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/make/catalog.mk b/make/catalog.mk index fe9e0ef4..db28e550 100644 --- a/make/catalog.mk +++ b/make/catalog.mk @@ -3,12 +3,20 @@ # The image tag given to the resulting catalog image (e.g. make catalog-build CATALOG_IMG=example.com/operator-catalog:v0.2.0). CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:$(IMAGE_TAG) +OPM_DOCKERFILE_VERSION ?= 1.28.0 + +ifeq ($(origin CATALOG_ARCH),undefined) +OPM_DOCKERFILE_TAG = latest +else +OPM_DOCKERFILE_TAG = v$(OPM_DOCKERFILE_VERSION)-$(CATALOG_ARCH) +endif + CATALOG_FILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog/operator.yaml CATALOG_DOCKERFILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog.Dockerfile $(CATALOG_DOCKERFILE): $(OPM) -mkdir -p $(PROJECT_DIR)/catalog/authorino-operator-catalog - cd $(PROJECT_DIR)/catalog && $(OPM) generate dockerfile authorino-operator-catalog + cd $(PROJECT_DIR)/catalog && $(OPM) generate dockerfile authorino-operator-catalog -i "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}" catalog-dockerfile: $(CATALOG_DOCKERFILE) ## Generate catalog dockerfile. $(CATALOG_FILE): $(OPM) $(YQ) From 2d9968118c05d238934d6193d51e51daf2f4c252 Mon Sep 17 00:00:00 2001 From: dd di cesare Date: Mon, 4 Nov 2024 13:59:15 +0100 Subject: [PATCH 2/4] [git] Catalog build for different architectures Signed-off-by: dd di cesare --- .github/workflows/build-images.yaml | 87 ++++++++++++++++++++++++++++- 1 file changed, 86 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml index 05294987..c6b5493e 100644 --- a/.github/workflows/build-images.yaml +++ b/.github/workflows/build-images.yaml @@ -221,7 +221,92 @@ jobs: with: image: ${{ env.OPERATOR_NAME }}-catalog tags: ${{ env.IMG_TAGS }} - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64,linux/arm64,linux/s390x,linux/ppc64le + context: ./catalog + dockerfiles: | + ./catalog/${{ env.OPERATOR_NAME }}-catalog.Dockerfile + - name: Push Image + if: ${{ !env.ACT }} + id: push-to-quay + uses: redhat-actions/push-to-registry@v2 + with: + image: ${{ steps.build-image.outputs.image }} + tags: ${{ steps.build-image.outputs.tags }} + registry: ${{ env.IMG_REGISTRY_HOST }}/${{ env.IMG_REGISTRY_ORG }} + username: ${{ secrets.IMG_REGISTRY_USERNAME }} + password: ${{ secrets.IMG_REGISTRY_TOKEN }} + - name: Print Image URL + run: echo "Image pushed to ${{ steps.push-to-quay.outputs.registry-paths }}" + + build-multi-arch-catalogs: + name: Build and push multi arch catalog images + needs: [ build, build-bundle ] + runs-on: ubuntu-20.04 + strategy: + matrix: + arch: [ amd64, arm64, ppc64le, s390x ] + if: github.ref_name == 'main' || startsWith(github.ref, 'refs/tags/v') # We cannot use `env.MAIN_BRANCH_NAME` because `env` context is not available to `job.if`. See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability + steps: + - name: Set up Go 1.21.x + uses: actions/setup-go@v4 + with: + go-version: 1.21.x + id: go + - name: Check out code + uses: actions/checkout@v3 + - name: Add latest tag + if: ${{ github.ref_name == env.MAIN_BRANCH_NAME }} + id: add-latest-tag + run: | + echo "IMG_TAGS=latest-${{ matrix.arch }} ${{ env.IMG_TAGS }}" >> $GITHUB_ENV + - name: Add release tag + if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} + id: add-branch-tag + run: | + TAG_NAME=${GITHUB_REF_NAME/\//-} + echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_ENV + echo "IMG_TAGS=${TAG_NAME}-${{ matrix.arch }} ${{ env.IMG_TAGS }}" >> $GITHUB_ENV + - name: Set Operator version + id: operator-version + run: | + tag=${GITHUB_REF_NAME} + if [[ ${tag} =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then + echo "VERSION=${tag#v}" >> $GITHUB_ENV + else + echo "VERSION=${{ github.sha }}" >> $GITHUB_ENV + fi + - name: Install qemu dependency + run: | + sudo apt-get update + sudo apt-get install -y qemu-user-static + - name: Run make catalog (main) + if: ${{ github.ref_name == env.MAIN_BRANCH_NAME }} + run: | + make catalog \ + REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ + VERSION=${{ env.VERSION }} \ + IMAGE_TAG=${{ github.sha }} \ + AUTHORINO_VERSION=${{ env.LATEST_AUTHORINO_GITREF }} \ + CHANNELS=${{ inputs.channels }} \ + CATALOG_ARCH=${{ matrix.arch }} + - name: Run make catalog (release) + if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} + run: | + make catalog \ + REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ + VERSION=${{ env.VERSION }} \ + AUTHORINO_VERSION=${{ github.event.inputs.authorinoVersion }} \ + CHANNELS=${{ inputs.channels }} \ + CATALOG_ARCH=${{ matrix.arch }} + - name: Git diff + run: git diff + - name: Build Image + id: build-image + uses: redhat-actions/buildah-build@v2 + with: + image: ${{ env.OPERATOR_NAME }}-catalog + tags: ${{ env.IMG_TAGS }} + platform: linux/${{ matrix.arch }} context: ./catalog dockerfiles: | ./catalog/${{ env.OPERATOR_NAME }}-catalog.Dockerfile From a7dbc463a444c5d3935b66835305d45b09f8f831 Mon Sep 17 00:00:00 2001 From: dd di cesare Date: Wed, 6 Nov 2024 14:39:49 +0100 Subject: [PATCH 3/4] [opm] Unifying opm tool and catalog dockerfile version and arch Signed-off-by: dd di cesare --- .github/workflows/build-images.yaml | 10 ++++++---- Makefile | 7 ++++--- make/catalog.mk | 11 ++--------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml index c6b5493e..4d99c1b1 100644 --- a/.github/workflows/build-images.yaml +++ b/.github/workflows/build-images.yaml @@ -204,7 +204,8 @@ jobs: VERSION=${{ env.VERSION }} \ IMAGE_TAG=${{ github.sha }} \ AUTHORINO_VERSION=${{ env.LATEST_AUTHORINO_GITREF }} \ - CHANNELS=${{ inputs.channels }} + CHANNELS=${{ inputs.channels }} \ + OPM_DOCKERFILE_TAG=latest - name: Run make catalog (release) if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} run: | @@ -212,7 +213,8 @@ jobs: REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ VERSION=${{ env.VERSION }} \ AUTHORINO_VERSION=${{ github.event.inputs.authorinoVersion }} \ - CHANNELS=${{ inputs.channels }} + CHANNELS=${{ inputs.channels }} \ + OPM_DOCKERFILE_TAG=latest - name: Git diff run: git diff - name: Build Image @@ -288,7 +290,7 @@ jobs: IMAGE_TAG=${{ github.sha }} \ AUTHORINO_VERSION=${{ env.LATEST_AUTHORINO_GITREF }} \ CHANNELS=${{ inputs.channels }} \ - CATALOG_ARCH=${{ matrix.arch }} + ARCH=${{ matrix.arch }} - name: Run make catalog (release) if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} run: | @@ -297,7 +299,7 @@ jobs: VERSION=${{ env.VERSION }} \ AUTHORINO_VERSION=${{ github.event.inputs.authorinoVersion }} \ CHANNELS=${{ inputs.channels }} \ - CATALOG_ARCH=${{ matrix.arch }} + ARCH=${{ matrix.arch }} - name: Git diff run: git diff - name: Build Image diff --git a/Makefile b/Makefile index 94f30a2e..6b8a9720 100644 --- a/Makefile +++ b/Makefile @@ -138,14 +138,15 @@ $(YQ): .PHONY: yq yq: $(YQ) ## Download yq locally if necessary. +ARCH ?= $(shell go env GOARCH) OPM = $(PROJECT_DIR)/bin/opm -OPM_VERSION = v1.26.2 +OPM_VERSION ?= 1.48.0 $(OPM): @{ \ set -e ;\ mkdir -p $(dir $(OPM)) ;\ - OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \ - curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/$(OPM_VERSION)/$${OS}-$${ARCH}-opm ;\ + OS=$(shell go env GOOS) && \ + curl -sSLo $(OPM) https://github.com/operator-framework/operator-registry/releases/download/v$(OPM_VERSION)/$${OS}-$(ARCH)-opm ;\ chmod +x $(OPM) ;\ } diff --git a/make/catalog.mk b/make/catalog.mk index db28e550..54808db5 100644 --- a/make/catalog.mk +++ b/make/catalog.mk @@ -3,20 +3,13 @@ # The image tag given to the resulting catalog image (e.g. make catalog-build CATALOG_IMG=example.com/operator-catalog:v0.2.0). CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:$(IMAGE_TAG) -OPM_DOCKERFILE_VERSION ?= 1.28.0 - -ifeq ($(origin CATALOG_ARCH),undefined) -OPM_DOCKERFILE_TAG = latest -else -OPM_DOCKERFILE_TAG = v$(OPM_DOCKERFILE_VERSION)-$(CATALOG_ARCH) -endif - CATALOG_FILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog/operator.yaml CATALOG_DOCKERFILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog.Dockerfile +OPM_DOCKERFILE_TAG ?= v$(OPM_VERSION)-$(ARCH) $(CATALOG_DOCKERFILE): $(OPM) -mkdir -p $(PROJECT_DIR)/catalog/authorino-operator-catalog - cd $(PROJECT_DIR)/catalog && $(OPM) generate dockerfile authorino-operator-catalog -i "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}" + cd $(PROJECT_DIR)/catalog && $(OPM) generate dockerfile authorino-operator-catalog -b "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}" -i "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}" catalog-dockerfile: $(CATALOG_DOCKERFILE) ## Generate catalog dockerfile. $(CATALOG_FILE): $(OPM) $(YQ) From ba8571b597a10bc3731c880df83b5b8406d35d40 Mon Sep 17 00:00:00 2001 From: dd di cesare Date: Thu, 7 Nov 2024 10:27:11 +0100 Subject: [PATCH 4/4] [refactor] Leaving only builda multi platform catalog builds defaulting to latest opm tag Signed-off-by: dd di cesare --- .github/workflows/build-images.yaml | 91 +---------------------------- make/catalog.mk | 2 +- 2 files changed, 3 insertions(+), 90 deletions(-) diff --git a/.github/workflows/build-images.yaml b/.github/workflows/build-images.yaml index 4d99c1b1..1db771f1 100644 --- a/.github/workflows/build-images.yaml +++ b/.github/workflows/build-images.yaml @@ -204,8 +204,7 @@ jobs: VERSION=${{ env.VERSION }} \ IMAGE_TAG=${{ github.sha }} \ AUTHORINO_VERSION=${{ env.LATEST_AUTHORINO_GITREF }} \ - CHANNELS=${{ inputs.channels }} \ - OPM_DOCKERFILE_TAG=latest + CHANNELS=${{ inputs.channels }} - name: Run make catalog (release) if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} run: | @@ -213,8 +212,7 @@ jobs: REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ VERSION=${{ env.VERSION }} \ AUTHORINO_VERSION=${{ github.event.inputs.authorinoVersion }} \ - CHANNELS=${{ inputs.channels }} \ - OPM_DOCKERFILE_TAG=latest + CHANNELS=${{ inputs.channels }} - name: Git diff run: git diff - name: Build Image @@ -239,88 +237,3 @@ jobs: password: ${{ secrets.IMG_REGISTRY_TOKEN }} - name: Print Image URL run: echo "Image pushed to ${{ steps.push-to-quay.outputs.registry-paths }}" - - build-multi-arch-catalogs: - name: Build and push multi arch catalog images - needs: [ build, build-bundle ] - runs-on: ubuntu-20.04 - strategy: - matrix: - arch: [ amd64, arm64, ppc64le, s390x ] - if: github.ref_name == 'main' || startsWith(github.ref, 'refs/tags/v') # We cannot use `env.MAIN_BRANCH_NAME` because `env` context is not available to `job.if`. See https://docs.github.com/en/actions/learn-github-actions/contexts#context-availability - steps: - - name: Set up Go 1.21.x - uses: actions/setup-go@v4 - with: - go-version: 1.21.x - id: go - - name: Check out code - uses: actions/checkout@v3 - - name: Add latest tag - if: ${{ github.ref_name == env.MAIN_BRANCH_NAME }} - id: add-latest-tag - run: | - echo "IMG_TAGS=latest-${{ matrix.arch }} ${{ env.IMG_TAGS }}" >> $GITHUB_ENV - - name: Add release tag - if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} - id: add-branch-tag - run: | - TAG_NAME=${GITHUB_REF_NAME/\//-} - echo "TAG_NAME=${TAG_NAME}" >> $GITHUB_ENV - echo "IMG_TAGS=${TAG_NAME}-${{ matrix.arch }} ${{ env.IMG_TAGS }}" >> $GITHUB_ENV - - name: Set Operator version - id: operator-version - run: | - tag=${GITHUB_REF_NAME} - if [[ ${tag} =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then - echo "VERSION=${tag#v}" >> $GITHUB_ENV - else - echo "VERSION=${{ github.sha }}" >> $GITHUB_ENV - fi - - name: Install qemu dependency - run: | - sudo apt-get update - sudo apt-get install -y qemu-user-static - - name: Run make catalog (main) - if: ${{ github.ref_name == env.MAIN_BRANCH_NAME }} - run: | - make catalog \ - REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ - VERSION=${{ env.VERSION }} \ - IMAGE_TAG=${{ github.sha }} \ - AUTHORINO_VERSION=${{ env.LATEST_AUTHORINO_GITREF }} \ - CHANNELS=${{ inputs.channels }} \ - ARCH=${{ matrix.arch }} - - name: Run make catalog (release) - if: ${{ github.ref_name != env.MAIN_BRANCH_NAME }} - run: | - make catalog \ - REGISTRY=${{ env.IMG_REGISTRY_HOST }} ORG=${{ env.IMG_REGISTRY_ORG }} \ - VERSION=${{ env.VERSION }} \ - AUTHORINO_VERSION=${{ github.event.inputs.authorinoVersion }} \ - CHANNELS=${{ inputs.channels }} \ - ARCH=${{ matrix.arch }} - - name: Git diff - run: git diff - - name: Build Image - id: build-image - uses: redhat-actions/buildah-build@v2 - with: - image: ${{ env.OPERATOR_NAME }}-catalog - tags: ${{ env.IMG_TAGS }} - platform: linux/${{ matrix.arch }} - context: ./catalog - dockerfiles: | - ./catalog/${{ env.OPERATOR_NAME }}-catalog.Dockerfile - - name: Push Image - if: ${{ !env.ACT }} - id: push-to-quay - uses: redhat-actions/push-to-registry@v2 - with: - image: ${{ steps.build-image.outputs.image }} - tags: ${{ steps.build-image.outputs.tags }} - registry: ${{ env.IMG_REGISTRY_HOST }}/${{ env.IMG_REGISTRY_ORG }} - username: ${{ secrets.IMG_REGISTRY_USERNAME }} - password: ${{ secrets.IMG_REGISTRY_TOKEN }} - - name: Print Image URL - run: echo "Image pushed to ${{ steps.push-to-quay.outputs.registry-paths }}" diff --git a/make/catalog.mk b/make/catalog.mk index 54808db5..d831640f 100644 --- a/make/catalog.mk +++ b/make/catalog.mk @@ -6,7 +6,7 @@ CATALOG_IMG ?= $(IMAGE_TAG_BASE)-catalog:$(IMAGE_TAG) CATALOG_FILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog/operator.yaml CATALOG_DOCKERFILE = $(PROJECT_DIR)/catalog/authorino-operator-catalog.Dockerfile -OPM_DOCKERFILE_TAG ?= v$(OPM_VERSION)-$(ARCH) +OPM_DOCKERFILE_TAG ?= latest $(CATALOG_DOCKERFILE): $(OPM) -mkdir -p $(PROJECT_DIR)/catalog/authorino-operator-catalog cd $(PROJECT_DIR)/catalog && $(OPM) generate dockerfile authorino-operator-catalog -b "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}" -i "quay.io/operator-framework/opm:${OPM_DOCKERFILE_TAG}"