Skip to content

v2.17.0

v2.17.0 #15

Workflow file for this run

---
name: Test & Publish OLM Package
on:
release:
types: [ published ]
workflow_dispatch:
inputs:
bundle_version:
description: version in format {major}.{minor}.{patch} (do not prefix with "v")
required: true
type: string
release:
default: false
type: boolean
required: false
description: Make a release PR to operatorhub?
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
create-olm-package:
name: Create the OLM Packaging
runs-on: ubuntu-latest
outputs:
olm_package_version: ${{ steps.set_bundle_version.outputs.BUNDLE_VERSION }}
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set image tag to tagged release
id: set_bundle_version
shell: bash
run: scripts/print-tag-version.bash ${{ inputs.bundle_version }} | tee -a "$GITHUB_OUTPUT"
- id: set_previous_version
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: scripts/print-previous-version.bash | tee -a "$GITHUB_OUTPUT"
- name: Openshift tools
uses: redhat-actions/openshift-tools-installer@v1
with:
# Using GitHub source because the Openshift mirror source binary file does not match the expected name
# pattern. In the mirror, the filename is opm-rhel8, and the Action is expecting the name as opm-${OS}-${ARCH}
source: github
github_pat: ${{ github.token }}
opm: latest
- name: carvel-setup-action
uses: carvel-dev/[email protected]
with:
token: ${{ github.token }}
only: ytt
- name: Login to quay.io
uses: docker/login-action@v3
with:
registry: quay.io
# secret_rabbitmq/kv/oss%2Frabbitmq-cluster-operator%2Fsecrets/details
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_ROBOT_TOKEN }}
- name: Create OLM bundle manifests
env:
QUAY_IO_OPERATOR_IMAGE: quay.io/rabbitmqoperator/cluster-operator:${{ steps.set_bundle_version.outputs.BUNDLE_VERSION }}
BUNDLE_VERSION: ${{ steps.set_bundle_version.outputs.BUNDLE_VERSION }}
BUNDLE_REPLACES: rabbitmq-cluster-operator.${{ steps.set_previous_version.outputs.PREVIOUS_VERSION }}
run: make -f olm.mk all
- name: Create OLM Package
env:
REGISTRY: quay.io
IMAGE: ${{ vars.UNTESTED_BUNDLE_IMAGE }}:${{ steps.set_bundle_version.outputs.BUNDLE_VERSION }}
run: make -f olm.mk docker-build docker-push
- name: Validate bundle manifests
env:
REGISTRY: quay.io
IMAGE: ${{ vars.UNTESTED_BUNDLE_IMAGE }}:${{ steps.set_bundle_version.outputs.BUNDLE_VERSION }}
run: opm alpha bundle validate --tag ${{ env.REGISTRY }}/${{ env.IMAGE }} --image-builder docker
- name: Upload manifests
uses: actions/upload-artifact@v4
with:
name: bundle-manifest
path: |
olm/manifests
olm/metadata
olm/bundle.Dockerfile
if-no-files-found: error
retention-days: 1
test-olm-package:
name: Tests the OLM packaging
runs-on: ubuntu-latest
needs: create-olm-package
outputs:
# Required to pass on the OLM bundle version to publish job
olm_package_version: ${{ needs.create-olm-package.outputs.olm_package_version }}
steps:
- name: Checkout
uses: actions/checkout@v5
- name: Install Go
uses: actions/setup-go@v6
with:
go-version-file: "go.mod"
- name: Kubectl tool installer
uses: Azure/[email protected]
- name: Setup YTT
uses: carvel-dev/[email protected]
with:
token: ${{ github.token }}
only: ytt, imgpkg
- name: Kind Cluster
uses: helm/kind-action@v1
- name: Install OLM
run: |
curl -L https://github.com/operator-framework/operator-lifecycle-manager/releases/download/v0.32.0/install.sh -o install.sh
chmod +x install.sh
./install.sh v0.32.0
- name: Login to quay.io
uses: docker/login-action@v3
with:
registry: quay.io
# secret_rabbitmq/kv/oss%2Frabbitmq-cluster-operator%2Fsecrets/details
username: ${{ secrets.QUAY_USERNAME }}
password: ${{ secrets.QUAY_ROBOT_TOKEN }}
- name: Run test
env:
IMAGE: ${{ vars.UNTESTED_BUNDLE_IMAGE }}:${{ needs.create-olm-package.outputs.olm_package_version }}
BUNDLE_VERSION: ${{ needs.create-olm-package.outputs.olm_package_version }}
# Used to create a temporary OLM catalog to validate the bundle
CATALOG_IMAGE: ${{ vars.TEST_CATALOG_IMAGE }}
# The test suite is sensible to the working directory, and go-test always sets the working directory
# to the package path (i.e. olm/test). As a workaround, we compile the test in a binary, and then
# run it from the repo root directory
run: |
go test -c -o olm.test ./olm/test/
./olm.test
- name: Promote tested image
if: ${{ github.event_name == 'release' || inputs.release == true }}
run: imgpkg copy --image quay.io/${{ vars.UNTESTED_BUNDLE_IMAGE }}:${{ needs.create-olm-package.outputs.olm_package_version }} --to-repo quay.io/${{ vars.FINAL_BUNDLE_IMAGE }}
publish-bundle-operatorhub:
if: ${{ github.event_name == 'release' || inputs.release == true }}
name: PR OperatorHub repo
runs-on: ubuntu-latest
needs: test-olm-package
steps:
- name: Checkout community-operators fork (OperatorHub)
uses: actions/checkout@v5
with:
repository: rabbitmq/community-operators
# secret_rabbitmq/kv/Shared-Shared-RabbitMQ%2Frabbitmq-ci/details
token: ${{ secrets.RABBITMQ_CI_TOKEN }}
- name: Download OLM artifact
uses: actions/download-artifact@v5
with:
name: bundle-manifest
path: olm-package-ci
- name: Create branch for OperatorHub PR
env:
BUNDLE_VERSION: ${{ needs.test-olm-package.outputs.olm_package_version }}
GH_PROMPT_DISABLED: 1
# secret_rabbitmq/kv/Shared-Shared-RabbitMQ%2Frabbitmq-ci/details
GH_TOKEN: ${{ secrets.RABBITMQ_CI_TOKEN }}
run: |
git config user.name "rabbitmq-ci"
git config user.email ${{ secrets.RABBITMQ_CI_EMAIL }}
git branch "rabbitmq-cluster-operator-$BUNDLE_VERSION"
git checkout "rabbitmq-cluster-operator-$BUNDLE_VERSION"
mkdir -pv operators/rabbitmq-cluster-operator/"$BUNDLE_VERSION"
cp -v -fR olm-package-ci/* ./operators/rabbitmq-cluster-operator/"$BUNDLE_VERSION"/
git add operators/rabbitmq-cluster-operator
git commit -s -m "operator rabbitmq-cluster-operator release $BUNDLE_VERSION"
git push --set-upstream origin "rabbitmq-cluster-operator-$BUNDLE_VERSION"
gh pr create --title "operator rabbitmq-cluster-operator (${{ env.BUNDLE_VERSION }})" \
--body "Update operator rabbitmq-cluster-operator (${{ needs.test-olm-package.outputs.olm_package_version }})" \
--repo k8s-operatorhub/community-operators
publish-bundle-redhat-marketplace:
name: PR Openshift marketplace
runs-on: ubuntu-latest
needs: test-olm-package
if: ${{ github.event_name == 'release' || inputs.release == true }}
steps:
- name: Checkout community-operators-prod fork (Openshift Ecosystem)
uses: actions/checkout@v5
with:
repository: rabbitmq/community-operators-prod
# secret_rabbitmq/kv/Shared-Shared-RabbitMQ%2Frabbitmq-ci/details
token: ${{ secrets.RABBITMQ_CI_TOKEN }}
- name: Download OLM artifact
uses: actions/download-artifact@v5
with:
name: bundle-manifest
path: olm-package-ci
- name: Create branch for Openshift Ecosystem PR
env:
BUNDLE_VERSION: ${{ needs.test-olm-package.outputs.olm_package_version }}
# RABBITMQ_CI_EMAIL: secret_rabbitmq/kv/Shared-Shared-RabbitMQ%2Frabbitmq-ci/details
GH_PROMPT_DISABLED: 1
# secret_rabbitmq/kv/Shared-Shared-RabbitMQ%2Frabbitmq-ci/details
GH_TOKEN: ${{ secrets.RABBITMQ_CI_TOKEN }}
# IMPORTANT: this job does not open the PR automatically because the operator is configured differently in
# RedHat marketplace CI. In RedHat Marketplace, we have semver-mode for update strategy, and in operatorhub
# we have replaces-mode strategy.
# https://k8s-operatorhub.github.io/community-operators/operator-ci-yaml/
# As workaround, this job will create the branch with the new version, and a maintainer will make adjustments
# before manually opening a PR.
# TODO(Zerpet): make update strategy consistent
run: |
git config user.name "rabbitmq-ci"
git config user.email ${{ secrets.RABBITMQ_CI_EMAIL }}
git branch "rabbitmq-cluster-operator-$BUNDLE_VERSION"
git checkout "rabbitmq-cluster-operator-$BUNDLE_VERSION"
mkdir -pv operators/rabbitmq-cluster-operator/"$BUNDLE_VERSION"
cp -v -fR olm-package-ci/* ./operators/rabbitmq-cluster-operator/"$BUNDLE_VERSION"/
git add operators/rabbitmq-cluster-operator
git commit -s -m "operator rabbitmq-cluster-operator release $BUNDLE_VERSION"
git push --set-upstream origin "rabbitmq-cluster-operator-$BUNDLE_VERSION"