Workflow file for this run
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: Release | |
on: | |
push: | |
tags: | |
- v[0-9]+.[0-9]+.[0-9]+ | |
- v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+ # include prerelease tags too | |
jobs: | |
prepare: | |
permissions: | |
contents: read | |
id-token: write | |
name: Prepare properties | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Prepare build parameters | |
id: prep | |
run: | | |
hack/build/ci/prepare-build-variables.sh | |
- name: Docker metadata | |
uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4.6.0 | |
id: meta | |
with: | |
images: dynatrace/dynatrace-operator | |
tags: ${{ steps.prep.outputs.docker_image_tag }} | |
labels: | | |
${{ steps.prep.outputs.docker_image_labels }} | |
vcs-ref=${{ github.sha }} | |
outputs: | |
labels: ${{ steps.meta.outputs.labels }} | |
version: ${{ steps.prep.outputs.docker_image_tag }} | |
version_without_prefix: ${{ steps.prep.outputs.docker_image_tag_without_prefix }} | |
build: | |
name: Build images | |
runs-on: ubuntu-latest | |
needs: [prepare] | |
strategy: | |
matrix: | |
platform: [amd64, arm64, ppc64le] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Build image | |
uses: ./.github/actions/build-image | |
with: | |
platform: ${{ matrix.platform }} | |
labels: ${{ needs.prepare.outputs.labels }} | |
image-tag: ${{ needs.prepare.outputs.version }} | |
push: | |
name: Push images | |
environment: Release | |
needs: [prepare, build] | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
strategy: | |
matrix: | |
platform: [amd64, arm64, ppc64le] | |
registry: [gcr, dockerhub] | |
include: | |
- registry: gcr | |
url: gcr.io | |
repository: GCR_REPOSITORY | |
username: GCR_USERNAME | |
password: GCR_JSON_KEY | |
- registry: dockerhub | |
url: docker.io | |
repository: DOCKERHUB_REPOSITORY | |
username: DOCKERHUB_USERNAME | |
password: DOCKERHUB_PASSWORD | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Login to Registry | |
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 | |
with: | |
registry: ${{ matrix.url }} | |
username: ${{ secrets[matrix.username] }} | |
password: ${{ secrets[matrix.password] }} | |
- name: Push ${{matrix.platform}} to ${{matrix.registry}} | |
uses: ./.github/actions/upload-image | |
with: | |
platform: ${{ matrix.platform }} | |
labels: ${{ needs.prepare.outputs.labels }} | |
version: ${{ needs.prepare.outputs.version }} | |
registry: ${{ matrix.url }} | |
repository: ${{ secrets[matrix.repository] }} | |
- name: Get image digest | |
id: digest | |
env: | |
IMAGE: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }}-${{ matrix.platform }} | |
run: | | |
hack/build/ci/get-image-digest.sh | |
- name: Sign image for ${{matrix.registry}} | |
uses: ./.github/actions/sign-image | |
with: | |
image: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }}-${{ matrix.platform }}@${{steps.digest.outputs.digest}} | |
signing-key: ${{ secrets.COSIGN_PRIVATE_KEY }} | |
signing-password: ${{ secrets.COSIGN_PASSWORD }} | |
push-rhcc: | |
name: Push amd64 image to RHCC | |
if: ${{ !contains(github.ref, '-rc') }} | |
environment: Release | |
needs: [prepare, build] | |
runs-on: ubuntu-latest | |
env: | |
SCAN_REGISTRY: "quay.io" | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Login to Registry | |
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 | |
with: | |
registry: ${{ env.SCAN_REGISTRY }} | |
username: ${{ secrets.RHCC_USERNAME }} | |
password: ${{ secrets.RHCC_PASSWORD }} | |
- name: Push amd64 image to scan registry | |
uses: ./.github/actions/upload-image | |
with: | |
platform: "amd64" | |
labels: ${{ needs.prepare.outputs.labels }} | |
version: ${{ needs.prepare.outputs.version }} | |
registry: ${{ env.SCAN_REGISTRY }} | |
repository: ${{ secrets.RHCC_REPOSITORY }} | |
skip-platform-suffix: true | |
- name: Run preflight | |
uses: ./.github/actions/preflight | |
with: | |
version: ${{ needs.prepare.outputs.version }} | |
registry: ${{ env.SCAN_REGISTRY }} | |
repository: ${{ secrets.RHCC_REPOSITORY }} | |
report-name: "preflight.json" | |
redhat-project-id: ${{ secrets.REDHAT_PROJECT_ID }} | |
pyxis-api-token: ${{ secrets.PYXIS_API_TOKEN }} | |
manifest: | |
name: Create manifest | |
environment: Release | |
needs: [prepare, push] | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
strategy: | |
matrix: | |
registry: [gcr, dockerhub] | |
include: | |
- registry: gcr | |
url: gcr.io | |
repository: GCR_REPOSITORY | |
username: GCR_USERNAME | |
password: GCR_JSON_KEY | |
- registry: dockerhub | |
url: docker.io | |
repository: DOCKERHUB_REPOSITORY | |
username: DOCKERHUB_USERNAME | |
password: DOCKERHUB_PASSWORD | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Login to Registry | |
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 | |
with: | |
registry: ${{ matrix.url }} | |
username: ${{ secrets[matrix.username] }} | |
password: ${{ secrets[matrix.password] }} | |
- name: Create manifests for ${{matrix.registry}} | |
uses: ./.github/actions/create-manifests | |
with: | |
version: ${{ needs.prepare.outputs.version }} | |
registry: ${{ matrix.url }} | |
repository: ${{ secrets[matrix.repository] }} | |
combined: true | |
- name: Get image digest | |
id: digest | |
env: | |
IMAGE: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }} | |
run: | | |
hack/build/ci/get-image-digest.sh | |
- name: Sign images for ${{matrix.registry}} | |
uses: ./.github/actions/sign-image | |
with: | |
image: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }}@${{steps.digest.outputs.digest}} | |
signing-key: ${{ secrets.COSIGN_PRIVATE_KEY }} | |
signing-password: ${{ secrets.COSIGN_PASSWORD }} | |
attach-sbom: | |
name: Attach sbom | |
environment: Release | |
needs: [ prepare, push, manifest ] | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
strategy: | |
matrix: | |
registry: [gcr, dockerhub] | |
include: | |
- registry: gcr | |
url: gcr.io | |
repository: GCR_REPOSITORY | |
username: GCR_USERNAME | |
password: GCR_JSON_KEY | |
- registry: dockerhub | |
url: docker.io | |
repository: DOCKERHUB_REPOSITORY | |
username: DOCKERHUB_USERNAME | |
password: DOCKERHUB_PASSWORD | |
steps: | |
- name: Checkout | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Login to Registry | |
uses: docker/login-action@465a07811f14bebb1938fbed4728c6a1ff8901fc # v2.2.0 | |
with: | |
registry: ${{ matrix.url }} | |
username: ${{ secrets[matrix.username] }} | |
password: ${{ secrets[matrix.password] }} | |
- name: Get operator-image digest | |
id: operator-digest | |
env: | |
IMAGE: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }} | |
run: | | |
hack/build/ci/get-image-digest.sh | |
- name: Create sbom for ${{matrix.registry}} | |
id: sbom | |
uses: aquasecurity/trivy-action@41f05d9ecffa2ed3f1580af306000f734b733e54 # 0.11.2 | |
with: | |
image-ref: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }}@${{steps.operator-digest.outputs.digest}} | |
format: 'cyclonedx' | |
output: 'result.json' | |
skip-dirs: '/usr/share/dynatrace-operator/third_party_licenses' | |
- name: Upload sbom to ${{matrix.registry}} | |
uses: ./.github/actions/upload-sbom | |
with: | |
image: ${{ matrix.url }}/${{ secrets[matrix.repository] }}:${{ needs.prepare.outputs.version }}@${{steps.operator-digest.outputs.digest}} | |
sbom: 'result.json' | |
signing-key: ${{ secrets.COSIGN_PRIVATE_KEY }} | |
signing-password: ${{ secrets.COSIGN_PASSWORD }} | |
pre-release: | |
if: ${{ contains(github.ref, '-rc.') }} | |
name: Create pre-release | |
needs: [prepare] | |
environment: Release | |
permissions: | |
contents: write | |
pull-requests: write | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 | |
- name: Setup Golang | |
uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 | |
with: | |
go-version-file: "${{ github.workspace }}/go.mod" | |
- name: Download dependencies | |
id: depdownload | |
run: | | |
hack/build/ci/install-cgo-dependencies.sh | |
- name: Generate release notes | |
shell: bash | |
env: | |
PRE_RELEASE: ${{ contains(github.ref, '-rc.') }} | |
run: | | |
hack/build/ci/generate-release-notes.sh | |
- name: Generate manifests | |
shell: bash | |
env: | |
VERSION_WITHOUT_PREFIX: ${{ needs.prepare.outputs.version_without_prefix }} | |
VERSION: ${{ needs.prepare.outputs.version }} | |
run: | | |
make manifests/crd/release CHART_VERSION="${VERSION_WITHOUT_PREFIX}" | |
make manifests/kubernetes IMAGE="docker.io/dynatrace/dynatrace-operator" TAG="${VERSION}" | |
make manifests/openshift IMAGE="registry.connect.redhat.com/dynatrace/dynatrace-operator" TAG="${VERSION}" | |
- name: Rename manifests if pre-release | |
if: ${{ contains(github.ref, '-rc.') }} | |
run: | | |
mv config/deploy/kubernetes/kubernetes-all.yaml config/deploy/kubernetes/kubernetes.yaml | |
mv config/deploy/openshift/openshift-all.yaml config/deploy/openshift/openshift.yaml | |
- name: Build helm packages | |
if: ${{ contains(github.ref, '-rc.') }} | |
uses: ./.github/actions/build-helm | |
with: | |
version_without_prefix: ${{ needs.prepare.outputs.version_without_prefix }} | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
secring: ${{ secrets.HELM_SECRING }} | |
passphrase: ${{ secrets.HELM_PASSPHRASE }} | |
output-dir: "./helm-pkg" | |
- name: Create pre-release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ contains(github.ref, '-rc.') }} | |
with: | |
body_path: ./CHANGELOG.md | |
files: | | |
config/deploy/kubernetes/kubernetes.yaml | |
config/deploy/openshift/openshift.yaml | |
token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: true | |
draft: true | |
fail_on_unmatched_files: true | |
- name: Create release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ !contains(github.ref, '-rc.') }} | |
with: | |
body_path: ./CHANGELOG.md | |
files: | | |
config/deploy/kubernetes/kubernetes.yaml | |
config/deploy/kubernetes/kubernetes-csi.yaml | |
config/deploy/kubernetes/gke-autopilot.yaml | |
config/deploy/openshift/openshift.yaml | |
config/deploy/openshift/openshift-csi.yaml | |
helm-pkg/dynatrace-operator-${{ needs.prepare.outputs.version_without_prefix }}.tgz | |
helm-pkg/dynatrace-operator-${{ needs.prepare.outputs.version_without_prefix }}.tgz.prov | |
token: ${{ secrets.GITHUB_TOKEN }} | |
prerelease: false | |
draft: true | |
fail_on_unmatched_files: true | |
- name: Update index helm file | |
uses: actions/checkout@v3 | |
run: | | |
echo "Updating Helm repo index" | |
./hack/build/ci/generate-new-helm-index-yaml.sh | |
- name: Create pull request for adding helm index to main branch | |
uses: peter-evans/create-pull-request@v5 | |
with: | |
base: main | |
delete-branch: true | |
add-paths: | | |
./config/helm/repos/stable/index.yaml | |
./config/helm/repos/stable/index.yaml.previous | |
title: '[Automatic] Update index for ${{ github.ref }} release' | |
commit-message: Update index.yaml | |
committer: GitHub <noreply@github.com> | |
author: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com> | |
body: | | |
# Description | |
Upgrade `index.yaml` to include latest version of the helm chart. | |
## How can this be tested? | |
Helm upgrade to and install of `${{ github.ref }}` works. | |
## Checklist | |
- [x] PR is labeled accordingly | |
snyk: | |
name: Push tag to snyk | |
environment: Release | |
needs: [prepare, push] | |
runs-on: ubuntu-latest | |
permissions: | |
id-token: write | |
steps: | |
- name: Push tag to synk | |
id: pushToSnyk | |
uses: fjogeleit/http-request-action@v1 | |
with: | |
url: 'https://api.snyk.io/v1/org/${{ secrets.SNYK_ORGANIZATION_ID }}/integrations/${{ secrets.SNYK_INTEGRATION_ID }}/import' | |
method: 'POST' | |
customHeaders: '{ "Content-Type": "application/json;charset=utf-8", "Authorization": "token ${{ secrets.SNYK_API_TOKEN }}" }' | |
data: '{ "target": { "name": "${{ secrets.DOCKERHUB_REPOSITORY }}:${{ needs.prepare.outputs.version }}" }}' | |
- name: Show Response | |
run: | | |
echo ${{ steps.pushToSnyk.outputs.response }} | |
echo ${{ steps.pushToSnyk.outputs.headers }} |