-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathfbc-post-release.yaml
More file actions
123 lines (113 loc) · 5.95 KB
/
Copy pathfbc-post-release.yaml
File metadata and controls
123 lines (113 loc) · 5.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
---
apiVersion: tekton.dev/v1
kind: Pipeline
metadata:
name: fbc-post-release
spec:
description: This tasks gets all the required data of an FBC build and commits it to a payload repository to be used in a GitOps environment.
params:
- name: snapshot
type: string
- name: releaseplan_id
type: string
- name: environment
type: string
tasks:
- name: get-info
params:
- name: SNAPSHOT
value: "$(params.snapshot)"
- name: RELEASEPLAN_ID
value: "$(params.releaseplan_id)"
- name: ENVIRONMENT
value: "$(params.ENVIRONMENT)"
taskSpec:
params:
- name: SNAPSHOT
type: string
- name: RELEASEPLAN_ID
type: string
- name: ENVIRONMENT
type: string
steps:
- name: get-info
image: quay.io/konflux-ci/release-service-utils:0a58b6a6b562879e89395636d97931f2dcbb494c
envFrom:
- secretRef:
name: cnv-ci-release-token
script: |
#!/usr/bin/env bash
set -eo pipefail
snapshot_id=$(echo "$(params.SNAPSHOT)" | awk -F'/' '{print $2}')
release_id=$(kubectl get release --sort-by=.metadata.creationTimestamp -o json | \
jq -r --arg snapshot "${snapshot_id}" --arg releaseplan "$(params.RELEASEPLAN_ID)" \
'.items[] | select(.spec.snapshot == $snapshot and .spec.releasePlan == $releaseplan) | .metadata.name' | tail -n 1)
released_status=$(kubectl get release "${release_id}" -oyaml | yq '.status.conditions[] | select(.type == "ManagedPipelineProcessed") | .status')
if [ "$released_status" != "True" ]; then
echo "Release failed. Not continuing with post-release."
exit 1
fi
cnv_version="$(kubectl get release "${release_id}" -oyaml | yq '.metadata.labels["appstudio.openshift.io/component"]' | sed -E 's/^v([0-9]+)-([0-9]+).*/v\1.\2/')"
snapshot_data=$(kubectl get snapshot "${snapshot_id}" -oyaml)
fbc_fragment=$(echo "${snapshot_data}" | yq '.spec.components[0].containerImage')
index_image=$(kubectl get release "${release_id}" -oyaml | yq '.status.artifacts.index_image.index_image')
from_index="registry-proxy.engineering.redhat.com/rh-osbs/iib-pub-pending:${cnv_version}"
git_commit=$(echo "${snapshot_data}" | yq '.spec.components[0].source.git.revision')
git_repo=$(echo "${snapshot_data}" | yq '.spec.components[0].source.git.url')
gitfbcdir=$(mktemp -d) && cd "${gitfbcdir}"
git init
git remote add origin "${git_repo}.git"
git fetch origin "${git_commit}" --depth 1
git checkout "${git_commit}"
image_sha=$(yq '.image' ${cnv_version}/updated_image.yaml)
channel=$(yq '.channel' ${cnv_version}/updated_image.yaml)
hco_bundle_version=$(yq '.hco-bundle-version' ${cnv_version}/updated_image.yaml)
if [[ $hco_bundle_version == v4.99* ]]; then
cnv_version="v4.99"
fi
gitpayloaddir=$(mktemp -d) && cd "${gitpayloaddir}"
git clone https://${github_token}@github.com/openshift-cnv/cnv-fbc-payloads-new.git && cd cnv-fbc-payloads-new
git config --global user.name "${github_username}"
git config --global user.email "no-reply@redhat.com"
case $(params.ENVIRONMENT) in
"production")
NEXT_STAGE="verify-production-release"
;;
"stage")
NEXT_STAGE="stage"
;;
*)
echo "Unknown environment: $(params.ENVIRONMENT)"
exit 1
;;
esac
save_folder="${cnv_version//./-}/lanes/${channel}/${NEXT_STAGE}"
mkdir -p "${save_folder}"
echo "" > "${save_folder}/payload.yaml"
yq e ".index_image = \"${index_image}\"" -i ${save_folder}/payload.yaml
yq e ".snapshot_id = \"${snapshot_id}\"" -i ${save_folder}/payload.yaml
yq e ".from_index = \"${from_index}\"" -i ${save_folder}/payload.yaml
yq e ".fbc_fragment = \"${fbc_fragment}\"" -i ${save_folder}/payload.yaml
yq e ".channel = \"${channel}\"" -i ${save_folder}/payload.yaml
yq e ".hco_bundle_registry_by_sha = \"${image_sha}\"" -i ${save_folder}/payload.yaml
image_base=$(echo "${image_sha}" | cut -d'@' -f1)
yq e ".hco_bundle_registry_by_tag = \"${image_base}:${hco_bundle_version}\"" -i ${save_folder}/payload.yaml
yq e ".hco_bundle_version = \"${hco_bundle_version}\"" -i ${save_folder}/payload.yaml
# Add the minor version number from the bundle for Kargo
yq e '.minorVersion = (.hco_bundle_version | split("-") | .[0])' -i ${save_folder}/payload.yaml
yq e '.rhelVersion = (.minorVersion | split(".") | .[3])' -i ${save_folder}/payload.yaml
yq e ".version = \"${cnv_version//./-}\"" -i ${save_folder}/payload.yaml
yq e ".releasePlan = \"${NEXT_STAGE}\"" -i ${save_folder}/payload.yaml
yq e ".freightName = \"${snapshot_id}\"" -i ${save_folder}/payload.yaml
yq e ".freightID = null" -i ${save_folder}/payload.yaml
yq e ".prNumber = null" -i ${save_folder}/payload.yaml
# add a firstRelease flag to the payload
patch_version=$(echo "$hco_bundle_version" | grep -oP 'v\d+\.\d+\.\K\d+')
if [ "$patch_version" -eq 0 ]; then
yq -i '.firstRelease = true' ${save_folder}/payload.yaml
else
yq -i '.firstRelease = false' ${save_folder}/payload.yaml
fi
git add .
git commit -m "Update payload $hco_bundle_version"
git push origin main