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
2728jobs :
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
336634- 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