Skip to content

Commit d415bcd

Browse files
vdemeestertekton-robot
authored andcommitted
release: add a small script to "automate" bugfix releases
Adding a `bugfix-release.sh` script to automate bugfix releases. Today it is meant to be started by a maintainer, like the following ``` ./tekton/bugfix-release upstream/release-v0.47.x ``` - It will detect the old version, and commit related to the version - It will compute the new version number - It will detect the release name - If there is no different between the old version and the new one (aka, no commit in the release branch since last release), it will be exit gracefully. The idea is that, from there, we can automate the bugfix release completely. We could run this script weekly for each "supported" release branch, and it would automatically do the release for us. Signed-off-by: Vincent Demeester <[email protected]>
1 parent c19b6e6 commit d415bcd

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

tekton/bugfix-release.sh

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env bash
2+
set -eu -o pipefail
3+
4+
RELEASE_BRANCH=${1:-$(git rev-parse --abbrev-ref HEAD)}
5+
shift
6+
7+
echo "> Make sure our remotes are up-to-date"
8+
git fetch -p --all
9+
10+
TEKTON_RELEASE_GIT_SHA=$(git rev-parse "${RELEASE_BRANCH}")
11+
TEKTON_OLD_VERSION=$(git describe --tags --abbrev=0 "${TEKTON_RELEASE_GIT_SHA}")
12+
TEKTON_OLD_VERSION_COMMIT_SHA=$(git rev-list -n 1 "${TEKTON_OLD_VERSION}")
13+
TEKTON_RELEASE_NAME=$(gh release view v0.47.7 --json name | jq .name | sed -e 's/.*\\"\(.*\)\\"\"/\1/')
14+
15+
if [[ "${TEKTON_RELEASE_GIT_SHA}" == "${TEKTON_OLD_VERSION_COMMIT_SHA}" ]]; then
16+
echo "> No new commit in ${RELEASE_BRANCH} (${TEKTON_RELEASE_GIT_SHA}==${TEKTON_OLD_VERSION_COMMIT_SHA})"
17+
return 0
18+
fi
19+
20+
TEKTON_VERSION=$(echo ${TEKTON_OLD_VERSION} | awk -F. -v OFS=. '{$NF += 1 ; print}')
21+
22+
echo "> Old version : ${TEKTON_OLD_VERSION}"
23+
echo "> Old version commit : ${TEKTON_OLD_VERSION_COMMIT_SHA}"
24+
echo "> New version : ${TEKTON_VERSION}"
25+
echo "> New version commit: ${TEKTON_RELEASE_GIT_SHA}"
26+
echo "> Tekton Release Name: ${TEKTON_RELEASE_NAME}"
27+
28+
# Might be overkill
29+
git --no-pager diff "${TEKTON_OLD_VERSION_COMMIT_SHA}" "${TEKTON_RELEASE_GIT_SHA}"
30+
31+
cat <<EOF > workspace-template.yaml
32+
spec:
33+
accessModes:
34+
- ReadWriteOnce
35+
resources:
36+
requests:
37+
storage: 1Gi
38+
EOF
39+
40+
echo "> Starting the release pipeline"
41+
tkn pipeline start pipeline-release \
42+
--serviceaccount=release-right-meow \
43+
--param=gitRevision="${TEKTON_RELEASE_GIT_SHA}" \
44+
--param=serviceAccountPath=release.json \
45+
--param=versionTag="${TEKTON_VERSION}" \
46+
--param=releaseBucket=gs://tekton-releases/pipeline \
47+
--param=releaseAsLatest="false" \
48+
--workspace name=release-secret,secret=release-secret \
49+
--workspace name=workarea,volumeClaimTemplateFile=workspace-template.yaml --use-param-defaults --pipeline-timeout 3h --showlog
50+
51+
RELEASE_FILE=https://storage.googleapis.com/tekton-releases/pipeline/previous/${TEKTON_VERSION}/release.yaml
52+
CONTROLLER_IMAGE_SHA=$(curl $RELEASE_FILE | egrep 'gcr.io.*controller' | cut -d'@' -f2)
53+
REKOR_UUID=$(rekor-cli search --sha $CONTROLLER_IMAGE_SHA | grep -v Found | head -1)
54+
echo -e "CONTROLLER_IMAGE_SHA: ${CONTROLLER_IMAGE_SHA}\nREKOR_UUID: ${REKOR_UUID}"
55+
56+
echo "> Starting the release-draft pipeline"
57+
tkn pipeline start release-draft \
58+
--workspace name=shared,volumeClaimTemplateFile=workspace-template.yaml \
59+
--workspace name=credentials,secret=release-secret \
60+
-p package="tektoncd/pipeline" \
61+
-p git-revision="${TEKTON_RELEASE_GIT_SHA}" \
62+
-p release-tag="${TEKTON_VERSION}" \
63+
-p previous-release-tag="${TEKTON_OLD_VERSION}" \
64+
-p release-name="${TEKTON_RELEASE_NAME}" \
65+
-p bucket="gs://tekton-releases/pipeline" \
66+
-p rekor-uuid="$REKOR_UUID" \
67+
--showlog

0 commit comments

Comments
 (0)