Skip to content

Commit 07c6db6

Browse files
committed
feat: releases
1 parent 85e5731 commit 07c6db6

File tree

1 file changed

+97
-108
lines changed

1 file changed

+97
-108
lines changed

.github/workflows/release-image.yml

Lines changed: 97 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -16,43 +16,76 @@ on:
1616
required: false
1717
default: "latest"
1818
type: string
19+
1920
push:
2021
branches:
2122
- '**'
23+
- '!new-release/**'
2224

2325
permissions:
2426
contents: write
2527
pull-requests: write
2628

2729
jobs:
28-
release-image:
30+
resolve_commit_sha:
31+
name: Resolve Commit SHA
32+
runs-on: ubuntu-latest
33+
env:
34+
COMMIT_SHA: latest # for testing; replace with "${{ inputs.commit_sha }}" later
35+
outputs:
36+
sha: ${{ steps.resolve.outputs.sha }}
37+
steps:
38+
- name: Checkout repo to access refs
39+
uses: actions/checkout@v4
40+
with:
41+
fetch-depth: 0
42+
43+
- name: Resolve commit to check out
44+
id: resolve
45+
run: |
46+
if [ "${{ env.COMMIT_SHA }}" = "latest" ]; then
47+
branch="${GITHUB_REF#refs/heads/}"
48+
echo "Resolving latest commit on branch: $branch"
49+
git fetch origin "$branch"
50+
sha=$(git rev-parse origin/"$branch")
51+
else
52+
echo "Using specified commit SHA: ${{ env.COMMIT_SHA }}"
53+
sha="${{ env.COMMIT_SHA }}"
54+
git fetch origin "$sha"
55+
fi
56+
57+
echo "Resolved commit SHA: $sha"
58+
echo "sha=$sha" >> "$GITHUB_OUTPUT"
59+
60+
prepare_release:
61+
name: Release Image
62+
needs: resolve_commit_sha
2963
runs-on: ubuntu-latest
3064
environment: release
3165
env:
32-
VERSION: test-0.0.1
66+
VERSION: test-0.0.2
3367
34-
COMMIT_SHA: 99511c
35-
68+
COMMIT_SHA: ${{ needs.resolve_commit_sha.outputs.sha }}
3669
DOCKER_RELEASE_REPO: docker.io/andrpac/mongodb-atlas-kubernetes-operator
3770
DOCKER_PRERELEASE_REPO: docker.io/andrpac/mongodb-atlas-kubernetes-operator-prerelease
3871
DOCKER_SIGNATURE_REPO: docker.io/andrpac/signatures
3972
QUAY_RELEASE_REPO: quay.io/andrpac/mongodb-atlas-kubernetes-operator
4073
QUAY_PRERELEASE_REPO: quay.io/andrpac/mongodb-atlas-kubernetes-operator-prerelease
4174

4275
steps:
43-
- name: Checkout code
76+
- name: Checkout resolved commit
4477
uses: actions/checkout@v4
4578
with:
4679
fetch-depth: 0
80+
ref: ${{ env.COMMIT_SHA }}
4781

4882
- name: Generate GitHub App Token
4983
id: generate_token
5084
uses: mongodb/apix-action/token@v8
5185
with:
5286
app-id: ${{ secrets.AKO_RELEASER_APP_ID }}
5387
private-key: ${{ secrets.AKO_RELEASER_RSA_KEY }}
54-
55-
# Login in into all registries
88+
5689
- name: Log in to Docker registry
5790
uses: docker/login-action@v3
5891
with:
@@ -74,135 +107,91 @@ jobs:
74107
username: ${{ secrets.MDB_ARTIFACTORY_USERNAME }}
75108
password: ${{ secrets.MDB_ARTIFACTORY_PASSWORD }}
76109

77-
- name: Install devbox
78-
uses: jetify-com/[email protected]
79-
80110
- name: Resolve commit SHA and tags
81111
id: tags
82112
run: |
83-
if [ "${{ env.COMMIT_SHA }}" = "latest" ]; then
84-
git fetch origin main
85-
sha=$(git rev-parse origin/main)
86-
else
87-
sha="${{ env.COMMIT_SHA }}"
88-
fi
89-
90-
short_sha="${sha:0:6}"
113+
short_sha="${COMMIT_SHA:0:6}"
91114
promoted_tag="promoted-${short_sha}"
92-
release_tag="${{ env.VERSION }}"
115+
release_tag="${VERSION}"
93116
certified_tag="certified-${release_tag}"
117+
docker_image_url="${DOCKER_RELEASE_REPO}:${release_tag}"
118+
quay_image_url="${QUAY_RELEASE_REPO}:${release_tag}"
119+
quay_certified_image_url="${QUAY_RELEASE_REPO}:${certified_tag}"
94120
95-
docker_image_url="${{ env.DOCKER_RELEASE_REPO }}:${release_tag}"
96-
quay_image_url="${{ env.QUAY_RELEASE_REPO }}:${release_tag}"
97-
quay_certified_image_url="${{ env.QUAY_RELEASE_REPO }}:${certified_tag}"
98-
121+
echo "sha=${COMMIT_SHA}" >> "$GITHUB_OUTPUT"
99122
echo "promoted_tag=${promoted_tag}" >> "$GITHUB_OUTPUT"
100123
echo "release_tag=${release_tag}" >> "$GITHUB_OUTPUT"
101124
echo "certified_tag=${certified_tag}" >> "$GITHUB_OUTPUT"
102125
echo "docker_image_url=${docker_image_url}" >> "$GITHUB_OUTPUT"
103126
echo "quay_image_url=${quay_image_url}" >> "$GITHUB_OUTPUT"
104127
echo "quay_certified_image_url=${quay_certified_image_url}" >> "$GITHUB_OUTPUT"
105128
106-
# Move prerelease images to official release registries in Docker Hub and Quay
107-
- name: Promote Docker prerelease image
108-
run: devbox run -- ./scripts/move-image.sh
109-
env:
110-
IMAGE_SRC_REPO: ${{ env.DOCKER_PRERELEASE_REPO }}
111-
IMAGE_DEST_REPO: ${{ env.DOCKER_RELEASE_REPO }}
112-
IMAGE_SRC_TAG: ${{ steps.tags.outputs.promoted_tag }}
113-
IMAGE_DEST_TAG: ${{ steps.tags.outputs.release_tag }}
114-
115-
- name: Promote Quay prerelease image
116-
run: devbox run -- ./scripts/move-image.sh
117-
env:
118-
IMAGE_SRC_REPO: ${{ env.QUAY_PRERELEASE_REPO }}
119-
IMAGE_DEST_REPO: ${{ env.QUAY_RELEASE_REPO }}
120-
IMAGE_SRC_TAG: ${{ steps.tags.outputs.promoted_tag }}
121-
IMAGE_DEST_TAG: ${{ steps.tags.outputs.release_tag }}
122-
123-
# Create Openshift certified images
124-
- name: Create OpenShift certified image on Quay
125-
run: devbox run -- ./scripts/move-image.sh
126-
env:
127-
IMAGE_SRC_REPO: ${{ env.QUAY_PRERELEASE_REPO }}
128-
IMAGE_DEST_REPO: ${{ env.QUAY_RELEASE_REPO }}
129-
IMAGE_SRC_TAG: ${{ steps.tags.outputs.promoted_tag }}
130-
IMAGE_DEST_TAG: ${{ steps.tags.outputs.certified_tag }}
131-
132-
# Link updates to pr: all-in-one.yml, helm-updates, sdlc requirements
133129
- name: Generate deployment configurations
134130
uses: ./.github/actions/gen-install-scripts
135131
with:
136132
ENV: prod
137133
IMAGE_URL: ${{ steps.tags.outputs.docker_image_url }}
138134

139-
- name: Bump Helm chart version
140-
run: devbox run -- ./scripts/bump-helm-chart-version.sh
135+
- name: Generate SDLC checklist files for released version
136+
run: make gen-sdlc-checklist
141137

142-
# Prepare SDLC requirement: signatures, sboms, compliance reports
143-
# Note, signed images will live in mongodb/release and mongodb/signature repos
144-
- name: Sign released images
145-
run: |
146-
devbox run -- make sign IMG="${{ steps.tags.outputs.docker_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_RELEASE_REPO }}"
147-
devbox run -- make sign IMG="${{ steps.tags.outputs.quay_image_url }}" SIGNATURE_REPO="${{ env.QUAY_RELEASE_REPO }}"
148-
devbox run -- make sign IMG="${{ steps.tags.outputs.docker_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_SIGNATURE_REPO }}"
149-
devbox run -- make sign IMG="${{ steps.tags.outputs.quay_certified_image_url }}" SIGNATURE_REPO="${{ env.QUAY_RELEASE_REPO }}"
150-
devbox run -- make sign IMG="${{ steps.tags.outputs.quay_certified_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_SIGNATURE_REPO }}"
138+
- name: Create release branch with updates, tag new updates
139+
id: generate_branch
151140
env:
152-
PKCS11_URI: ${{ secrets.PKCS11_URI }}
153-
GRS_USERNAME: ${{ secrets.GRS_USERNAME }}
154-
GRS_PASSWORD: ${{ secrets.GRS_PASSWORD }}
141+
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
142+
run: |
143+
git config --global user.name "${{ steps.generate_token.outputs.user-name }}"
144+
git config --global user.email "${{ steps.generate_token.outputs.user-email }}"
155145
156-
- name: Generate SBOMs
157-
run: devbox run -- make generate-sboms
158-
env:
159-
RELEASED_OPERATOR_IMAGE: ${{ env.DOCKER_RELEASE_REPO }}
146+
export BRANCH="new-release/${VERSION}"
147+
export COMMIT_MESSAGE="Release ${VERSION}"
148+
149+
git checkout -b "$BRANCH"
150+
git add -f ./deploy ./bundle bundle.Dockerfile docs/releases
151+
scripts/create-signed-commit.sh
152+
153+
gh pr create --head="$BRANCH" \
154+
--title "$COMMIT_MESSAGE" \
155+
--body "This is an autogenerated PR to prepare for the release"
160156
161-
- name: Generate SDLC report
162-
run: devbox run -- make gen-sdlc-checklist
157+
git tag -a "${VERSION}" -m "Release ${VERSION}"
158+
git push origin "${VERSION}"
163159
164-
# Create pr with all updates
165-
- name: Create pull request for release changes
166-
uses: peter-evans/create-pull-request@v6
160+
echo "release_ref=$BRANCH" >> "$GITHUB_OUTPUT"
161+
162+
publish_release:
163+
name: Build & Publish Release
164+
needs: prepare_release
165+
runs-on: ubuntu-latest
166+
environment: release
167+
env:
168+
VERSION: test-0.0.2
169+
RELEASE_REF: ${{ needs.prepare_release.outputs.release_ref }}
170+
steps:
171+
- name: Generate GitHub App Token
172+
id: token2
173+
uses: mongodb/apix-action/token@v8
167174
with:
168-
token: ${{ steps.generate_token.outputs.token }}
169-
commit-message: "chore(release): updates from new release v${{ env.VERSION }}"
170-
title: "Release v${{ env.VERSION }}"
171-
body: |
172-
This PR was automatically generated by the **release-image** workflow.
173-
174-
Version: `${{ env.VERSION }}`
175-
Authors: ${{ env.AUTHORS }}
176-
base: main
177-
branch: "new-release/${{ env.VERSION }}" # This should avoid for now running all tests till we fix cloud-test-filter.yml
178-
delete-branch: true
179-
draft: true
180-
181-
# Create release assets on GitHub
175+
app-id: ${{ secrets.AKO_RELEASER_APP_ID }}
176+
private-key: ${{ secrets.AKO_RELEASER_RSA_KEY }}
177+
178+
- name: Checkout the release commit
179+
uses: actions/checkout@v4
180+
with:
181+
ref: ${{ env.RELEASE_REF }}
182+
fetch-depth: 0
183+
182184
- name: Create configuration package
183185
run: |
184-
devbox run -- 'set -x'
185-
devbox run -- 'tar czvf atlas-operator-all-in-one-${{ env.VERSION }}.tar.gz -C deploy all-in-one.yaml'
186+
tar czvf atlas-operator-all-in-one-${VERSION}.tar.gz -C deploy all-in-one.yaml
186187
187-
- name: Create Release
188-
id: create_release
189-
uses: actions/create-release@v1
190-
env:
191-
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
188+
- name: Create GitHub Release and Upload Asset
189+
uses: softprops/action-gh-release@v1
192190
with:
193191
tag_name: ${{ env.VERSION }}
194-
release_name: ${{ env.VERSION }}
195-
body_path: docs/release-notes/release-notes-template.md
196-
draft: true
192+
token: ${{ steps.token2.outputs.token }}
193+
files: ./atlas-operator-all-in-one-${{ env.VERSION }}.tar.gz
194+
target_commitish: ${{ env.RELEASE_REF }}
195+
generate_release_notes: true
197196
prerelease: false
198-
199-
- name: Upload Release Asset
200-
id: upload-release-asset
201-
uses: actions/upload-release-asset@v1
202-
env:
203-
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
204-
with:
205-
upload_url: ${{ steps.create_release.outputs.upload_url }}
206-
asset_path: ./atlas-operator-all-in-one-${{ env.VERSION }}.tar.gz
207-
asset_name: atlas-operator-all-in-one-${{ env.VERSION }}.tar.gz
208-
asset_content_type: application/tgz
197+
draft: true

0 commit comments

Comments
 (0)