Merge pull request #910 from rabbitmq/dependabot/go_modules/github.co… #268
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: Build, Test, Publish Image & Manifest | |
on: | |
push: | |
branches: [ "main", "test-ci/*"] | |
paths-ignore: | |
- 'docs/**' | |
- '*.md' | |
- 'LICENSE.txt' | |
- 'PROJECT' | |
- 'hack/**' | |
tags: [ "v*" ] | |
jobs: | |
golangci: | |
name: Run Linter | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
name: Checkout code | |
- uses: actions/setup-go@v5 | |
name: Install Go | |
with: | |
go-version-file: go.mod | |
- name: Run Golang Linter | |
uses: golangci/golangci-lint-action@v6 | |
with: | |
version: latest | |
args: --timeout=5m | |
unit_integration_tests: | |
name: Unit and Integration tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: go.mod | |
- name: Unit tests | |
run: make install-tools kubebuilder-assets just-unit-tests | |
- name: Integration tests | |
run: make integration-tests | |
- name: Notify Google Chat | |
if: failure() | |
uses: SimonScholz/google-chat-action@main | |
with: | |
webhookUrl: '${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}' | |
jobStatus: ${{ job.status }} | |
title: Messaging Topology Operator - Unit and Integration tests | |
build_operator: | |
name: Build Operator image | |
runs-on: ubuntu-latest | |
needs: unit_integration_tests | |
permissions: | |
contents: 'write' | |
id-token: 'write' | |
outputs: | |
image_tag: ${{ steps.meta.outputs.version }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version-file: go.mod | |
- name: OCI Metadata | |
id: meta | |
uses: docker/metadata-action@v5 | |
with: | |
images: rabbitmqoperator/messaging-topology-operator | |
# generate Docker tags based on the following events/attributes | |
tags: | | |
type=sha | |
type=semver,pattern={{version}} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v3 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to Docker Hub | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Build and push | |
if: ${{ startsWith(github.ref, 'refs/tags/v') }} | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64, linux/arm64 | |
provenance: false | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
- name: Build to TAR | |
id: build_tar | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
provenance: false | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
outputs: | | |
type=docker,dest=./operator.tar | |
- name: Upload Operator artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: operator_image | |
path: ./operator.tar | |
- name: Build manifest | |
env: | |
RELEASE_VERSION: ${{ steps.meta.outputs.version }} | |
run: | | |
make install-tools | |
pushd config/installation | |
kustomize edit set image \ | |
rabbitmqoperator/messaging-topology-operator-dev=rabbitmqoperator/messaging-topology-operator:"${RELEASE_VERSION}" | |
popd | |
pushd config/installation/cert-manager | |
kustomize edit set image \ | |
rabbitmqoperator/messaging-topology-operator-dev=rabbitmqoperator/messaging-topology-operator:"${RELEASE_VERSION}" | |
popd | |
- name: Upload operator manifests | |
uses: actions/upload-artifact@v4 | |
with: | |
name: operator-manifests | |
path: releases/messaging-topology-operator*.yaml | |
retention-days: 2 | |
if-no-files-found: error | |
system_tests: | |
name: Local system tests (stable k8s) | |
runs-on: ubuntu-latest | |
permissions: | |
contents: 'write' | |
id-token: 'write' | |
needs: build_operator | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- uses: actions/setup-go@v5 | |
name: Install Go | |
with: | |
go-version-file: go.mod | |
- name: Get operator manifest | |
uses: actions/download-artifact@v4 | |
with: | |
name: operator-manifests | |
- name: Create KinD | |
uses: helm/kind-action@v1 | |
with: | |
cluster_name: system-testing | |
node_image: ${{ env.KIND_NODE_IMAGE }} | |
- name: Download Operator manifest | |
uses: actions/download-artifact@v4 | |
# This manifest was generated by the build_operator job, and it has the image tag for this specific execution. | |
# Thanks to that, we don't have to make YAML modifications to deploy the right image. | |
with: | |
name: operator-manifests | |
path: tmp/ | |
- name: Download Operator artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: operator_image | |
path: /tmp | |
- name: Install Carvel | |
uses: carvel-dev/setup-action@v2.0.1 | |
with: | |
only: ytt | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Ginkgo | |
uses: ci-tasks/setup-ginkgo@main | |
- name: Install cert-manager and cluster operator | |
run: | | |
make cert-manager cmctl cluster-operator | |
./bin/cmctl check api --wait=3m | |
- name: Install operator from build | |
run: | | |
kind load image-archive /tmp/operator.tar --name system-testing | |
ytt -f tmp/messaging-topology-operator-with-certmanager.yaml -f config/ytt_overlays/never_pull.yml | kubectl apply -f- | |
kubectl --namespace=rabbitmq-system wait --for=condition=Available deployment/messaging-topology-operator | |
- name: System tests | |
run: | | |
make system-tests | |
- name: Notify Google Chat | |
if: failure() | |
uses: SimonScholz/google-chat-action@main | |
with: | |
webhookUrl: '${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}' | |
jobStatus: ${{ job.status }} | |
title: Messaging Topology Operator - System tests | |
release: | |
name: Release to GitHub Releases | |
runs-on: ubuntu-latest | |
# triggered by git tags, not pushes | |
if: startsWith(github.ref, 'refs/tags/v') | |
needs: system_tests | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Get operator manifest | |
uses: actions/download-artifact@v4 | |
with: | |
name: operator-manifests | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: | | |
messaging-topology-operator.yaml | |
messaging-topology-operator-with-certmanager.yaml | |
generate_release_notes: true | |
draft: true | |
fail_on_unmatched_files: true | |
- name: Notify Google Chat | |
if: failure() | |
uses: SimonScholz/google-chat-action@main | |
with: | |
webhookUrl: '${{ secrets.GOOGLE_CHAT_WEBHOOK_URL }}' | |
jobStatus: ${{ job.status }} | |
title: Messaging Topology Operator - Release to GitHub releases |