feat(operator): add release workflow #4256
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Operator Test Workflow | |
on: | |
push: | |
branches: | |
- main | |
paths: | |
- operator/** | |
pull_request: | |
branches: | |
- main | |
paths: | |
- operator/** | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
operator-build-test: | |
name: Build and Test Operator | |
runs-on: ubuntu-latest | |
if: github.repository_owner == 'Apicurio' && !contains(github.event.*.labels.*.name, 'DO NOT MERGE') | |
steps: | |
- name: Configure env. variables 1 | |
run: | | |
echo "UUID=$(uuidgen)" >> $GITHUB_ENV | |
# We need tho push the bundle image because opm always pulls; the catalog image because OLM | |
# deploys it with `imagePullPolicy: Always`; and also the operator image itself for the same reason. | |
- name: Configure env. variables 2 | |
run: | | |
echo "IMAGE=ttl.sh/apicurio-registry-3-operator-$UUID:8h" >> $GITHUB_ENV | |
echo "BUNDLE_IMAGE=ttl.sh/apicurio-registry-3-operator-bundle-$UUID:8h" >> $GITHUB_ENV | |
echo "CATALOG_IMAGE=ttl.sh/apicurio-registry-3-operator-catalog-$UUID:8h" >> $GITHUB_ENV | |
- name: Checkout ${{ github.ref }} | |
uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: temurin | |
cache: maven | |
- uses: ./.github/workflows/composite/setup-minikube | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build only | |
if: github.event_name != 'push' | |
working-directory: operator | |
run: | | |
make BUILD_OPTS=--no-transfer-progress SKIP_TESTS=true build | |
- name: Build and run local tests on Minikube | |
# Speed up the PR check by running both local and remote tests on push to main, | |
# and only run remote tests against a PR. | |
# TODO: Is this ok? | |
if: github.event_name == 'push' | |
working-directory: operator | |
run: | | |
make BUILD_OPTS=--no-transfer-progress build | |
- name: Build temporary operator image | |
working-directory: operator | |
run: | | |
make image-build image-push | |
- name: Build temporary operator bundle | |
working-directory: operator | |
run: | | |
make bundle | |
- name: Build temporary operator catalog | |
working-directory: operator | |
run: | | |
make catalog | |
- name: Run remote and OLM tests on Minikube | |
working-directory: operator | |
run: | | |
make BUILD_OPTS=--no-transfer-progress remote-tests-all | |
- name: Update install file | |
working-directory: operator | |
run: | | |
# We need to remove unset the variables to generate a clean install file. | |
# See https://github.com/actions/runner/issues/1126 | |
unset IMAGE | |
unset BUNDLE_IMAGE | |
unset CATALOG_IMAGE | |
make IMAGE_TAG=latest-snapshot INSTALL_FILE=install/install.yaml dist-install-file | |
- name: Check install file | |
run: | | |
git add operator/install/install.yaml || true | |
if ! git diff --staged --exit-code; then | |
echo 'Install file needs to be updated. Please run "cd operator; make SKIP_TESTS=true build IMAGE_TAG=latest-snapshot INSTALL_FILE=install/install.yaml dist-install-file" and commit the result.'; | |
exit 1; | |
else | |
echo "No changes to the install file."; | |
fi | |
operator-publish: | |
name: Publish Operator | |
runs-on: ubuntu-latest | |
needs: operator-build-test | |
if: github.event_name == 'push' | |
steps: | |
- name: Configure env. variables | |
run: | | |
# We want to use latest-snapshot instead of x.y.z-snapshot | |
echo "IMAGE_TAG=latest-snapshot" >> $GITHUB_ENV | |
echo "BUNDLE_IMAGE_TAG=latest-snapshot" >> $GITHUB_ENV | |
echo "CATALOG_IMAGE_TAG=latest-snapshot" >> $GITHUB_ENV | |
- name: Checkout ${{ github.ref }} | |
uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: temurin | |
cache: maven | |
- name: Build | |
working-directory: operator | |
run: | | |
make BUILD_OPTS=--no-transfer-progress SKIP_TESTS=true build | |
- name: Login to quay.io registry | |
run: | | |
docker login -u "${{ secrets.QUAY_USERNAME }}" -p "${{ secrets.QUAY_PASSWORD }}" quay.io | |
# TODO: Also push to DockerHub Registry | |
- name: Build and publish operator image | |
working-directory: operator | |
run: | | |
make image-build image-push | |
- name: Build and publish operator bundle | |
working-directory: operator | |
run: | | |
make bundle | |
- name: Build and publish operator catalog | |
working-directory: operator | |
run: | | |
make catalog | |
- name: Slack Notification (Always) | |
if: always() | |
run: | | |
MESSAGE="'${{ github.workflow }}/${{ github.job }}' job completed with status: ${{ job.status }}" | |
REPO="${{ github.repository }}" | |
LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" | |
PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" | |
curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "${{ secrets.SLACK_NOTIFICATION_WEBHOOK }}" | |
- name: Slack Notification (Error) | |
if: failure() | |
run: | | |
MESSAGE="'${{ github.workflow }}/${{ github.job }}' job FAILED!" | |
REPO="${{ github.repository }}" | |
LINK="https://github.com/$REPO/actions/runs/${{ github.run_id }}" | |
PAYLOAD="{\"workflow\": \"${{ github.workflow }}\", \"status\": \"${{ job.status }}\", \"message\": \"$MESSAGE\", \"link\": \"$LINK\", \"repository\": \"$REPO\"}" | |
curl -X POST -H "Content-Type: application/json" -d "$PAYLOAD" "${{ secrets.SLACK_ERROR_WEBHOOK }}" |