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
3367 AUTHORS : andrei.pacurar@mongodb.com
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,105 @@ jobs:
74107 username : ${{ secrets.MDB_ARTIFACTORY_USERNAME }}
75108 password : ${{ secrets.MDB_ARTIFACTORY_PASSWORD }}
76109
77- - name : Install devbox
78- uses : jetify-com/devbox-install-action@v0.13.0
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 }}
155-
156- - name : Generate SBOMs
157- run : devbox run -- make generate-sboms
158- env :
159- RELEASED_OPERATOR_IMAGE : ${{ env.DOCKER_RELEASE_REPO }}
160-
161- - name : Generate SDLC report
162- run : devbox run -- make gen-sdlc-checklist
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 }}"
145+
146+ export BRANCH="new-release/${VERSION}"
147+ export COMMIT_MESSAGE="Release ${VERSION}"
148+
149+ echo "aaaaaaaaaa"
150+
151+ git checkout -b "$BRANCH"
152+ git add -f ./deploy ./bundle bundle.Dockerfile docs/releases
153+
154+ echo "BBBBBBBBBBBBBBB"
155+ scripts/create-signed-commit.sh
156+
157+ echo "Ccccccccccccccccc"
158+ gh pr create --head="$BRANCH" \
159+ --title "$COMMIT_MESSAGE" \
160+ --body "This is an autogenerated PR to prepare for the release"
161+
162+ echo "dddddddddddddddddd"
163+ git tag -a "${VERSION}" -m "Release ${VERSION}"
164+
165+ echo "eeeeeeeeeeeeeeeeee"
166+ git push origin "${VERSION}"
167+
168+ echo "ffffffffffffffffff"
169+ echo "release_ref=$BRANCH" >> "$GITHUB_OUTPUT"
170+ echo "head_commit=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
171+
172+ # (optional, also echo to console)
173+ echo "Release ref: $BRANCH"
174+ echo "Head commit: $(git rev-parse HEAD)"
175+
176+ publish_release :
177+ name : Build & Publish Release
178+ needs : prepare_release
179+ runs-on : ubuntu-latest
180+ environment : release
181+ env :
182+ VERSION : test-0.0.2
183+ RELEASE_REF : ${{ needs.prepare_release.outputs.release_ref }}
184+ steps :
185+ - name : Generate GitHub App Token
186+ id : token2
187+ uses : mongodb/apix-action/token@v8
188+ with :
189+ app-id : ${{ secrets.AKO_RELEASER_APP_ID }}
190+ private-key : ${{ secrets.AKO_RELEASER_RSA_KEY }}
163191
164- # Create pr with all updates
165- - name : Create pull request for release changes
166- uses : peter-evans/create-pull-request@v6
192+ - name : Checkout the release commit
193+ uses : actions/checkout@v4
167194 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
195+ ref : ${{ env.RELEASE_REF }}
196+ fetch-depth : 0
197+
182198 - name : Create configuration package
183199 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'
200+ tar czvf atlas-operator-all-in-one-${VERSION}.tar.gz -C deploy all-in-one.yaml
186201
187- - name : Create Release
188- id : create_release
189- uses : actions/create-release@v1
190- env :
191- GITHUB_TOKEN : ${{ steps.generate_token.outputs.token }}
202+ - name : Create GitHub Release and Upload Asset
203+ uses : softprops/action-gh-release@v1
192204 with :
193205 tag_name : ${{ env.VERSION }}
194- release_name : ${{ env.VERSION }}
195- body_path : docs/release-notes/release-notes-template.md
196- draft : true
206+ token : ${{ steps.token2.outputs.token }}
207+ files : ./atlas-operator-all-in-one-${{ env.VERSION }}.tar.gz
208+ target_commitish : ${{ env.RELEASE_REF }}
209+ generate_release_notes : true
197210 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
211+ draft : true
0 commit comments