Skip to content

Commit 4b7bef7

Browse files
committed
feat: releases
1 parent 85e5731 commit 4b7bef7

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,6 +16,7 @@ on:
1616
required: false
1717
default: "latest"
1818
type: string
19+
1920
push:
2021
branches:
2122
- '**'
@@ -25,34 +26,65 @@ permissions:
2526
pull-requests: write
2627

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

4274
steps:
43-
- name: Checkout code
75+
- name: Checkout resolved commit
4476
uses: actions/checkout@v4
4577
with:
4678
fetch-depth: 0
79+
ref: ${{ env.COMMIT_SHA }}
4780

4881
- name: Generate GitHub App Token
4982
id: generate_token
5083
uses: mongodb/apix-action/token@v8
5184
with:
5285
app-id: ${{ secrets.AKO_RELEASER_APP_ID }}
5386
private-key: ${{ secrets.AKO_RELEASER_RSA_KEY }}
54-
55-
# Login in into all registries
87+
5688
- name: Log in to Docker registry
5789
uses: docker/login-action@v3
5890
with:
@@ -74,135 +106,92 @@ jobs:
74106
username: ${{ secrets.MDB_ARTIFACTORY_USERNAME }}
75107
password: ${{ secrets.MDB_ARTIFACTORY_PASSWORD }}
76108

77-
- name: Install devbox
78-
uses: jetify-com/[email protected]
79-
80109
- name: Resolve commit SHA and tags
81110
id: tags
82111
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}"
112+
short_sha="${COMMIT_SHA:0:6}"
91113
promoted_tag="promoted-${short_sha}"
92-
release_tag="${{ env.VERSION }}"
114+
release_tag="${VERSION}"
93115
certified_tag="certified-${release_tag}"
116+
docker_image_url="${DOCKER_RELEASE_REPO}:${release_tag}"
117+
quay_image_url="${QUAY_RELEASE_REPO}:${release_tag}"
118+
quay_certified_image_url="${QUAY_RELEASE_REPO}:${certified_tag}"
94119
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-
120+
echo "sha=${COMMIT_SHA}" >> "$GITHUB_OUTPUT"
99121
echo "promoted_tag=${promoted_tag}" >> "$GITHUB_OUTPUT"
100122
echo "release_tag=${release_tag}" >> "$GITHUB_OUTPUT"
101123
echo "certified_tag=${certified_tag}" >> "$GITHUB_OUTPUT"
102124
echo "docker_image_url=${docker_image_url}" >> "$GITHUB_OUTPUT"
103125
echo "quay_image_url=${quay_image_url}" >> "$GITHUB_OUTPUT"
104126
echo "quay_certified_image_url=${quay_certified_image_url}" >> "$GITHUB_OUTPUT"
105127
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
133128
- name: Generate deployment configurations
134129
uses: ./.github/actions/gen-install-scripts
135130
with:
136131
ENV: prod
137132
IMAGE_URL: ${{ steps.tags.outputs.docker_image_url }}
138133

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

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 }}"
137+
- name: Create release branch with updates, tag new updates
138+
id: generate_branch
151139
env:
152-
PKCS11_URI: ${{ secrets.PKCS11_URI }}
153-
GRS_USERNAME: ${{ secrets.GRS_USERNAME }}
154-
GRS_PASSWORD: ${{ secrets.GRS_PASSWORD }}
140+
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
141+
run: |
142+
git config --global user.name "${{ steps.generate_token.outputs.user-name }}"
143+
git config --global user.email "${{ steps.generate_token.outputs.user-email }}"
155144
156-
- name: Generate SBOMs
157-
run: devbox run -- make generate-sboms
158-
env:
159-
RELEASED_OPERATOR_IMAGE: ${{ env.DOCKER_RELEASE_REPO }}
145+
export BRANCH="new-release/${VERSION}"
146+
export COMMIT_MESSAGE="Release ${VERSION}"
147+
148+
git checkout -b "$BRANCH"
149+
git add -f ./deploy ./bundle bundle.Dockerfile docs/releases
150+
scripts/create-signed-commit.sh
151+
152+
gh pr create --head="$BRANCH" \
153+
--title "$COMMIT_MESSAGE" \
154+
--body "This is an autogenerated PR to prepare for the release"
160155
161-
- name: Generate SDLC report
162-
run: devbox run -- make gen-sdlc-checklist
156+
git tag -a "${VERSION}" -m "Release ${VERSION}"
157+
git push origin "$BRANCH" "${VERSION}"
163158
164-
# Create pr with all updates
165-
- name: Create pull request for release changes
166-
uses: peter-evans/create-pull-request@v6
159+
echo "release_ref=$BRANCH" >> "$GITHUB_OUTPUT"
160+
161+
publish_release:
162+
name: Build & Publish Release
163+
needs: prepare_release
164+
runs-on: ubuntu-latest
165+
environment: release
166+
env:
167+
VERSION: test-0.0.0
168+
RELEASE_REF: ${{ needs.prepare_release.outputs.release_ref }}
169+
steps:
170+
- name: Generate GitHub App Token
171+
id: token2
172+
uses: mongodb/apix-action/token@v8
167173
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
174+
app-id: ${{ secrets.AKO_RELEASER_APP_ID }}
175+
private-key: ${{ secrets.AKO_RELEASER_RSA_KEY }}
176+
177+
- name: Checkout the release commit
178+
uses: actions/checkout@v4
179+
with:
180+
ref: ${{ env.RELEASE_REF }}
181+
fetch-depth: 0
182+
182183
- name: Create configuration package
183184
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'
185+
tar czvf atlas-operator-all-in-one-${VERSION}.tar.gz -C deploy all-in-one.yaml
186186
187-
- name: Create Release
188-
id: create_release
189-
uses: actions/create-release@v1
190-
env:
191-
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
187+
- name: Create GitHub Release and Upload Asset
188+
uses: softprops/action-gh-release@v1
192189
with:
193190
tag_name: ${{ env.VERSION }}
194-
release_name: ${{ env.VERSION }}
195-
body_path: docs/release-notes/release-notes-template.md
196-
draft: true
191+
name: ${{ env.VERSION }}
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)