Skip to content

Commit 5dc3665

Browse files
committed
Add logic to retag lcm imgs, one for each cluster
1 parent b7c9d88 commit 5dc3665

3 files changed

Lines changed: 112 additions & 47 deletions

File tree

.github/workflows/lcm-pipeline.yaml

Lines changed: 95 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ jobs:
3737
pipeline_identifier: ${{ github.run_id }}
3838
service_version: ${{ steps.read-version.outputs.service_version }}
3939
service_major_version: ${{ steps.read-version.outputs.service_major_version }}
40+
is_revert: ${{ steps.revert-check.outputs.is_revert }}
41+
revert_image_tag: ${{ steps.revert-check.outputs.revert_image_tag }}
42+
revert_major_version: ${{ steps.revert-check.outputs.revert_major_version }}
4043
steps:
4144
- uses: actions/checkout@v5
4245
with:
@@ -64,6 +67,31 @@ jobs:
6467
echo "service_version=$version" >> $GITHUB_OUTPUT
6568
major=$(echo "$version" | cut -d. -f1)
6669
echo "service_major_version=M$major" >> $GITHUB_OUTPUT
70+
- name: Detect revert and find previous stable tag
71+
id: revert-check
72+
env:
73+
GH_TOKEN: ${{ secrets.TOKEN_GITHUB_YENKINS }}
74+
run: |
75+
is_revert=false
76+
revert_image_tag=""
77+
title="${{ github.event.pull_request.title }}"
78+
body="${{ github.event.pull_request.body }}"
79+
80+
if [[ "$title" == Revert* ]]; then
81+
is_revert=true
82+
original_pr=$(echo "$body" | grep -oP 'Reverts [^#]+#\K[0-9]+')
83+
if [[ -n "$original_pr" ]]; then
84+
merge_sha=$(gh pr view "$original_pr" --json mergeCommit -q '.mergeCommit.oid')
85+
prev_version=$(git show "${merge_sha}^1:VERSION" | tr -d '\n')
86+
revert_image_tag="${prev_version}"
87+
prev_major=$(echo "$prev_version" | cut -d. -f1)
88+
revert_major_version="M${prev_major}"
89+
fi
90+
fi
91+
92+
echo "is_revert=$is_revert" >> $GITHUB_OUTPUT
93+
echo "revert_image_tag=$revert_image_tag" >> $GITHUB_OUTPUT
94+
echo "revert_major_version=$revert_major_version" >> $GITHUB_OUTPUT
6795
6896
dockerfiles-validation:
6997
needs: [ prepare-build ]
@@ -174,30 +202,31 @@ jobs:
174202
ecr-url: '${{ secrets.ECR_URL }}'
175203
dry-run: ${{ !inputs.deploy }}
176204

177-
register-bricks-staging:
178-
runs-on:
179-
group: infra1-runners-arc
180-
labels: runners-small
181-
needs: [ prepare-build, services-build ]
182-
if: |
183-
!cancelled() &&
184-
!contains(needs.*.result, 'failure') &&
185-
needs.prepare-build.outputs.images != '[]' &&
186-
needs.prepare-build.outputs.images != ''
187-
steps:
188-
- name: Checkout repository
189-
uses: actions/checkout@v5
190-
- name: Register bricks to staging
191-
uses: ./.github/actions/rundeck
192-
with:
193-
server: '${{ secrets.RUNDECK_URL }}'
194-
project: stg1-ansible
195-
job-group: ansible/msf/hotfix
196-
job-name: stg1_lcm_pipeline_component_tool
197-
vault-url: ${{ secrets.VAULT_ADDRESS }}
205+
# register-bricks-staging:
206+
# runs-on:
207+
# group: infra1-runners-arc
208+
# labels: runners-small
209+
# needs: [ prepare-build, services-build ]
210+
# if: |
211+
# !cancelled() &&
212+
# !contains(needs.*.result, 'failure') &&
213+
# needs.prepare-build.outputs.images != '[]' &&
214+
# needs.prepare-build.outputs.images != ''
215+
# steps:
216+
# - name: Checkout repository
217+
# uses: actions/checkout@v5
218+
# - name: Register bricks to staging
219+
# uses: ./.github/actions/rundeck
220+
# with:
221+
# server: '${{ secrets.RUNDECK_URL }}'
222+
# project: stg1-ansible
223+
# job-group: ansible/msf/hotfix
224+
# job-name: stg1_lcm_pipeline_component_tool
225+
# vault-url: ${{ secrets.VAULT_ADDRESS }}
198226

199227
build-helmreleases:
200-
needs: [ prepare-build, services-build, helm-charts-build, register-bricks-staging ]
228+
# needs: [ prepare-build, services-build, helm-charts-build, register-bricks-staging ]
229+
needs: [ prepare-build, services-build, helm-charts-build ]
201230
if: |
202231
!cancelled() &&
203232
!contains(needs.*.result, 'failure') &&
@@ -242,11 +271,15 @@ jobs:
242271
pipeline_identifier: ${{ needs.prepare-build.outputs.pipeline_identifier }}
243272

244273
lcm-integration-e2e:
245-
needs: [ prepare-build, register-bricks-staging, build-helmreleases, wait-for-deployment ]
274+
needs: [ prepare-build, build-helmreleases, wait-for-deployment ]
275+
# needs: [ prepare-build, register-bricks-staging, build-helmreleases, wait-for-deployment ]
276+
# if: |
277+
# !cancelled() &&
278+
# !contains(needs.*.result, 'failure') &&
279+
# needs.register-bricks-staging.result == 'success'
246280
if: |
247281
!cancelled() &&
248-
!contains(needs.*.result, 'failure') &&
249-
needs.register-bricks-staging.result == 'success'
282+
!contains(needs.*.result, 'failure')
250283
uses: ./.github/workflows/lcm-integration-e2e.yaml
251284
secrets: inherit
252285
permissions:
@@ -288,34 +321,54 @@ jobs:
288321
image_tag: ${{ needs.prepare-build.outputs.service_major_version }}
289322
secrets: inherit
290323

291-
register-bricks-prod:
324+
promote-revert-to-stable:
325+
needs: [ prepare-build ]
326+
if: |
327+
!cancelled() &&
328+
needs.prepare-build.outputs.is_revert == 'true' &&
329+
needs.prepare-build.outputs.revert_image_tag != '' &&
330+
inputs.deploy
331+
uses: ./.github/workflows/promote-to-stable.yaml
332+
with:
333+
images: ${{ needs.prepare-build.outputs.images }}
334+
charts: '{}'
335+
image_tag: ${{ needs.prepare-build.outputs.revert_image_tag }}
336+
stable_tag: ${{ needs.prepare-build.outputs.revert_major_version }}
337+
latest_tag: ${{ needs.prepare-build.outputs.revert_image_tag }}
338+
secrets: inherit
339+
340+
notify-image-available:
292341
runs-on:
293342
group: infra1-runners-arc
294343
labels: runners-small
295-
needs: [ prepare-build, promote-to-stable ]
344+
needs: [ prepare-build ]
345+
permissions:
346+
pull-requests: write
296347
if: |
297348
!cancelled() &&
298349
!contains(needs.*.result, 'failure') &&
299350
needs.prepare-build.outputs.images != '[]' &&
300351
needs.prepare-build.outputs.images != '' &&
301352
inputs.deploy
302-
strategy:
303-
matrix:
304-
cluster: [ na1, ca2, perf1, bom1, syd1, na3, eu1, fra1 ]
305353
steps:
306-
- name: Checkout repository
307-
uses: actions/checkout@v5
308-
- name: Register bricks to ${{ matrix.cluster }}
309-
uses: ./.github/actions/rundeck
310-
with:
311-
server: '${{ secrets.RUNDECK_URL }}'
312-
project: ${{ matrix.cluster }}-ansible
313-
job-group: ansible/msf/hotfix
314-
job-name: ${{ matrix.cluster }}_lcm_pipeline_component_tool
315-
vault-url: ${{ secrets.VAULT_ADDRESS }}
354+
- name: Comment on PR
355+
run: |
356+
gh pr comment ${{ inputs.pr_number }} \
357+
--repo ${{ github.repository }} \
358+
--body "## LCM bricks image available
359+
360+
New image \`stable/lcm-bricks\` available and tagged for all prod clusters.
361+
Please, manually run the respective rundeck job for each: ${{ secrets.RUNDECK_URL }}
362+
363+
| | |
364+
|---|---|
365+
| **Version** | \`${{ needs.prepare-build.outputs.service_version }}\` |
366+
| **Build tag** | \`${{ needs.prepare-build.outputs.image_tag }}\` |
367+
env:
368+
GH_TOKEN: ${{ secrets.TOKEN_GITHUB_YENKINS }}
316369

317370
create-auto-merge-prod-pr:
318-
needs: [ prepare-build, build-helmreleases, register-bricks-prod ]
371+
needs: [ prepare-build, build-helmreleases ]
319372
if: |
320373
!cancelled() &&
321374
!contains(needs.*.result, 'failure') &&
@@ -335,7 +388,7 @@ jobs:
335388
secrets: inherit
336389

337390
create-manual-merge-prod-pr:
338-
needs: [ prepare-build, build-helmreleases, register-bricks-prod ]
391+
needs: [ prepare-build, build-helmreleases ]
339392
if: |
340393
!cancelled() &&
341394
!contains(needs.*.result, 'failure') &&

.github/workflows/promote-to-stable.yaml

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ on:
1414
description: "Tag of the images to promote"
1515
required: true
1616
type: string
17+
latest_tag:
18+
description: "Source tag to copy as stable:latest. Defaults to 'latest' if not set."
19+
required: false
20+
type: string
21+
default: ''
22+
stable_tag:
23+
description: "Destination tag in stable. Defaults to image_tag if not set."
24+
required: false
25+
type: string
26+
default: ''
1727

1828
jobs:
1929
promote-to-stable:
@@ -49,13 +59,15 @@ jobs:
4959
- name: Promote images
5060
run: |
5161
built_images='${{ inputs.images }}'
52-
tag=${{ inputs.image_tag }}
62+
src_tag=${{ inputs.image_tag }}
63+
dst_tag="${{ inputs.stable_tag || inputs.image_tag }}"
64+
latest_src="${{ inputs.latest_tag || 'latest' }}"
5365
for image in $(echo "$built_images" | jq -r '.[]'); do
5466
crane cp \
55-
"${INFRA_REPO_URL}/staging/${image}:${tag}" \
56-
"${INFRA_REPO_URL}/stable/${image}:${tag}"
67+
"${INFRA_REPO_URL}/staging/${image}:${src_tag}" \
68+
"${INFRA_REPO_URL}/stable/${image}:${dst_tag}"
5769
crane cp \
58-
"${INFRA_REPO_URL}/staging/${image}:latest" \
70+
"${INFRA_REPO_URL}/staging/${image}:${latest_src}" \
5971
"${INFRA_REPO_URL}/stable/${image}:latest"
6072
6173
echo "Promoted image ${image} to stable"

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.7.105
1+
3.7.106

0 commit comments

Comments
 (0)