1616 required : false
1717 default : " latest"
1818 type : string
19+
1920 push :
2021 branches :
2122 - ' **'
23+ - ' !new-release/**'
2224
2325permissions :
2426 contents : write
2527 pull-requests : write
2628
2729jobs :
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
336734- 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