16
16
required : false
17
17
default : " latest"
18
18
type : string
19
-
19
+ push :
20
+ branches :
21
+ - ' **'
22
+
20
23
permissions :
21
24
contents : write
22
25
pull-requests : write
23
26
24
27
jobs :
25
-
26
- # Note, the first step is necessary for getting the exact commit from the passed in image_sha
27
- # This is because, the release-image step should exactly check out that exact commit
28
+ # Image2commit: Creates a mapping between the image_sha given as input and the actual git commit
29
+ # This is necassary for the release-image step that requires checking out that exact git commit
28
30
image2commit :
29
31
name : Resolve Commit SHA from Image
30
32
runs-on : ubuntu-latest
33
+ environment : release
31
34
outputs :
32
35
commit_sha : ${{ steps.resolve.outputs.commit_sha }}
33
-
34
36
steps :
37
+ - name : Checkout code
38
+ uses : actions/checkout@v4
39
+
35
40
- name : Log in to Docker registry
36
41
uses : docker/login-action@v3
37
42
with :
38
43
registry : docker.io
39
- username : ${{ secrets.DOCKER_USERNAME }}
40
- password : ${{ secrets.DOCKER_PASSWORD }}
44
+ username : ${{ secrets.ANDRPAC_DOCKER_USERNAME }}
45
+ password : ${{ secrets.ANDRPAC_DOCKER_PASSWORD }}
41
46
42
47
- name : Run image2commit
43
48
id : resolve
44
49
uses : ./.github/actions/image2commit
45
50
with :
46
51
register : docker.io
47
52
repo : andrpac/mongodb-atlas-kubernetes-operator-prerelease
48
- image_sha : ${{ github.event.inputs.image_sha }}
53
+ image_sha : latest # !!!!!!!!!!!!!!!! To make the acutal input later !!!!!!
49
54
50
55
check-commit :
51
56
name : Check resolved commit
@@ -56,6 +61,163 @@ jobs:
56
61
run : |
57
62
echo "Resolved commit: ${{ needs.image2commit.outputs.commit_sha }}"
58
63
64
+ # Release-image: Created and uploads a release for the specified operator version given in the image_sha
65
+ # Note, with new releases, all of the release artifacts will be stored withing docs/releases/{release_version}
66
+ release-image :
67
+ runs-on : ubuntu-latest
68
+ environment : release
69
+ needs : image2commit
70
+ env :
71
+ VERSION : ${{ github.event.inputs.version || 'test-0.0.0-dev' }}
72
+ AUTHORS : ${{ github.event.inputs.authors || 'unknown' }}
73
+ IMAGE_SHA : ${{ github.event.inputs.image_sha || 'latest' }}
74
+ DOCKER_SIGNATURE_REPO : docker.io/andrpac/signatures
75
+ DOCKER_RELEASE_REPO : docker.io/andrpac/mongodb-atlas-kubernetes-operator
76
+ DOCKER_PRERELEASE_REPO : docker.io/andrpac/mongodb-atlas-kubernetes-operator-prerelease
77
+ QUAY_RELEASE_REPO : quay.io/andrpac/mongodb-atlas-kubernetes-operator
78
+ QUAY_PRERELEASE_REPO : quay.io/andrpac/mongodb-atlas-kubernetes-operator-prerelease
79
+ steps :
80
+ - name : Checkout code
81
+ uses : actions/checkout@v4
82
+ with :
83
+ fetch-depth : 0
84
+ # ref: $#{{ needs.image2commit.outputs.commit_sha }} !!!!!!!!! SUPER IMPORTNAT TO PUT BACK !!!!!!!
85
+
86
+ - name : Generate GitHub App Token
87
+ id : generate_token
88
+ uses : mongodb/apix-action/token@v8
89
+ with :
90
+ app-id : ${{ secrets.AKO_RELEASER_APP_ID }}
91
+ private-key : ${{ secrets.AKO_RELEASER_RSA_KEY }}
92
+
93
+ # Login in into all registries
94
+ - name : Log in to Docker registry
95
+ uses : docker/login-action@v3
96
+ with :
97
+ registry : docker.io
98
+ username : ${{ secrets.ANDRPAC_DOCKER_USERNAME }}
99
+ password : ${{ secrets.ANDRPAC_DOCKER_PASSWORD }}
100
+
101
+ - name : Log in to Quay registry
102
+ uses : docker/login-action@v3
103
+ with :
104
+ registry : quay.io
105
+ username : ${{ secrets.ANDRPAC_QUAY_USERNAME }}
106
+ password : ${{ secrets.ANDRPAC_QUAY_PASSWORD }}
107
+
108
+ - name : Log in to Artifactory
109
+ uses : docker/login-action@v3
110
+ with :
111
+ registry : artifactory.corp.mongodb.com
112
+ username : ${{ secrets.MDB_ARTIFACTORY_USERNAME }}
113
+ password : ${{ secrets.MDB_ARTIFACTORY_PASSWORD }}
114
+
115
+ - name : Install devbox
116
+ uses :
jetify-com/[email protected]
117
+
118
+ # This step configures all of the dynamic variables needed for later steps
119
+ - name : Configure job environment for downstream steps
120
+ id : tags
121
+ run : |
122
+ promoted_tag="promoted-${IMAGE_SHA}"
123
+ release_tag="${VERSION}"
124
+ certified_tag="certified-${release_tag}"
125
+
126
+ docker_image_url="${DOCKER_RELEASE_REPO}:${release_tag}"
127
+ quay_image_url="${QUAY_RELEASE_REPO}:${release_tag}"
128
+ quay_certified_image_url="${QUAY_RELEASE_REPO}:${certified_tag}"
129
+
130
+ echo "promoted_tag=$promoted_tag" >> $GITHUB_OUTPUT
131
+ echo "release_tag=$release_tag" >> $GITHUB_OUTPUT
132
+ echo "certified_tag=$certified_tag" >> $GITHUB_OUTPUT
133
+ echo "docker_image_url=$docker_image_url" >> $GITHUB_OUTPUT
134
+ echo "quay_image_url=$quay_image_url" >> $GITHUB_OUTPUT
135
+ echo "quay_certified_image_url=$quay_certified_image_url" >> $GITHUB_OUTPUT
136
+
137
+ # Move prerelease images to official release registries in Docker Hub and Quay
138
+ - name : Move image to Docker registry release from prerelease
139
+ run : devbox run -- ./scripts/move-image.sh
140
+ env :
141
+ IMAGE_SRC_REPO : ${{ env.DOCKER_PRERELEASE_REPO }}
142
+ IMAGE_DEST_REPO : ${{ env.DOCKER_RELEASE_REPO }}
143
+ IMAGE_SRC_TAG : ${{ steps.tags.outputs.promoted_tag }}
144
+ IMAGE_DEST_TAG : ${{ steps.tags.outputs.release_tag }}
145
+
146
+ - name : Move image to Quay registry release from prerelease
147
+ run : devbox run -- ./scripts/move-image.sh
148
+ env :
149
+ IMAGE_SRC_REPO : ${{ env.QUAY_PRERELEASE_REPO }}
150
+ IMAGE_DEST_REPO : ${{ env.QUAY_RELEASE_REPO }}
151
+ IMAGE_SRC_TAG : ${{ steps.tags.outputs.promoted_tag }}
152
+ IMAGE_DEST_TAG : ${{ steps.tags.outputs.release_tag }}
153
+
154
+ # Create Openshift certified images
155
+ - name : Create OpenShift certified image on Quay
156
+ run : devbox run -- ./scripts/move-image.sh
157
+ env :
158
+ IMAGE_SRC_REPO : ${{ env.QUAY_PRERELEASE_REPO }}
159
+ IMAGE_DEST_REPO : ${{ env.QUAY_RELEASE_REPO }}
160
+ IMAGE_SRC_TAG : ${{ steps.tags.outputs.promoted_tag }}
161
+ IMAGE_DEST_TAG : ${{ steps.tags.outputs.certified_tag }}
162
+
163
+ # Link updates to pr: all-in-one.yml, helm-updates, sdlc requirements
164
+ - name : Generate deployment configurations
165
+ uses : ./.github/actions/gen-install-scripts
166
+ with :
167
+ ENV : prod
168
+ IMAGE_URL : ${{ steps.tags.outputs.docker_image_url }}
169
+
170
+ - name : Bump Helm chart version
171
+ run : devbox run -- ./scripts/bump-helm-chart-version.sh
172
+
173
+ # Prepare SDLC requirement: signatures, sboms, compliance reports
174
+ # Note, signed images will live in mongodb/release and mongodb/signature repos
175
+ - name : Sign released images
176
+ run : |
177
+ devbox run -- make sign IMG="${{ steps.tags.outputs.docker_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_RELEASE_REPO }}"
178
+ devbox run -- make sign IMG="${{ steps.tags.outputs.quay_image_url }}" SIGNATURE_REPO="${{ env.QUAY_RELEASE_REPO }}"
179
+ devbox run -- make sign IMG="${{ steps.tags.outputs.docker_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_SIGNATURE_REPO }}"
180
+ devbox run -- make sign IMG="${{ steps.tags.outputs.quay_certified_image_url }}" SIGNATURE_REPO="${{ env.QUAY_RELEASE_REPO }}"
181
+ devbox run -- make sign IMG="${{ steps.tags.outputs.quay_certified_image_url }}" SIGNATURE_REPO="${{ env.DOCKER_SIGNATURE_REPO }}"
182
+ env :
183
+ PKCS11_URI : ${{ secrets.PKCS11_URI }}
184
+ GRS_USERNAME : ${{ secrets.GRS_USERNAME }}
185
+ GRS_PASSWORD : ${{ secrets.GRS_PASSWORD }}
186
+
187
+ - name : Generate SBOMs
188
+ run : devbox run -- make generate-sboms RELEASED_OPERATOR_IMAGE="${{ env.DOCKER_RELEASE_REPO }}"
189
+
190
+ - name : Create SDLC report
191
+ run : devbox run -- make gen-sdlc-checklist
192
+
193
+ # Create PR on release branch with all updates generated
194
+ - name : Create release branch with updates, tag new updates
195
+ env :
196
+ GITHUB_TOKEN : ${{ steps.generate_token.outputs.token }}
197
+ run : |
198
+ git config --global user.name "${{ steps.generate_token.outputs.user-name }}"
199
+ git config --global user.email "${{ steps.generate_token.outputs.user-email }}"
200
+
201
+ export BRANCH="new-release/${VERSION}"
202
+ export COMMIT_MESSAGE="feat: release ${VERSION} from release-image workflow"
203
+ export RELEASE_DIR="docs/releases/${VERSION}"
204
+
205
+ git checkout -b "$BRANCH"
206
+
207
+ mkdir -p "$RELEASE_DIR"
208
+ mv deploy "$RELEASE_DIR"/deploy
209
+ mv bundle "$RELEASE_DIR"/bundle
210
+ mv bundle.Dockerfile "$RELEASE_DIR"/bundle.Dockerfile
211
+
212
+ git add -f "$RELEASE_DIR"
213
+ scripts/create-signed-commit.sh
214
+
215
+ gh pr create \
216
+ --draft \
217
+ --head="$BRANCH" \
218
+ --title "$COMMIT_MESSAGE" \
219
+ --body "This is an autogenerated PR to prepare for the release"
220
+
59
221
prepare-environment :
60
222
name : Set up Environment Variables
61
223
runs-on : ubuntu-latest
@@ -151,7 +313,7 @@ jobs:
151
313
echo "quay_image_url=$quay_image_url" >> $GITHUB_OUTPUT
152
314
echo "quay_certified_image_url=$quay_certified_image_url" >> $GITHUB_OUTPUT
153
315
154
- release-image :
316
+ release-image1 :
155
317
runs-on : ubuntu-latest
156
318
if : false
157
319
environment : release
@@ -205,6 +367,7 @@ jobs:
205
367
short_sha="${sha:0:6}"
206
368
echo "promoted_tag=promoted-${short_sha}" >> "$GITHUB_OUTPUT"
207
369
370
+ # Move prerelease images to official release registries in Docker Hub and Quay
208
371
- name : Move image to Docker registry release from prerelease
209
372
run : devbox run -- ./scripts/move-image.sh
210
373
env :
@@ -220,6 +383,15 @@ jobs:
220
383
IMAGE_DEST_REPO : ${{ env.QUAY_RELEASE_REPO }}
221
384
IMAGE_SRC_TAG : ${{ steps.tags.outputs.promoted_tag }}
222
385
IMAGE_DEST_TAG : ${{ github.event.inputs.version }}
386
+
387
+ # Create Openshift certified images
388
+ - name : Create OpenShift certified image on Quay
389
+ run : devbox run -- ./scripts/move-image.sh
390
+ env :
391
+ IMAGE_SRC_REPO : ${{ env.QUAY_PRERELEASE_REPO }}
392
+ IMAGE_DEST_REPO : ${{ env.QUAY_RELEASE_REPO }}
393
+ IMAGE_SRC_TAG : ${{ steps.tags.outputs.promoted_tag }}
394
+ IMAGE_DEST_TAG : ${{ steps.tags.outputs.certified_tag }}
223
395
224
396
- name : Create deploy configurations
225
397
uses : ./.github/actions/gen-install-scripts
0 commit comments