From 262ba651c72e1c24f0a5e7db632885726aed8620 Mon Sep 17 00:00:00 2001 From: Shiv Verma Date: Tue, 28 Jul 2026 13:27:57 +0530 Subject: [PATCH] fix(release): improve previous tag detection and use stable goreleaser image Restructure release.sh to detect patch vs minor release before resolving the previous tag, so patch releases correctly scope tag lookup to the same minor version. Simplify changelog commit range to use git rev range (prev_tag..HEAD) instead of date-based --since filtering. Pin goreleaser to stable v2.17.1, replacing the nightly build. Signed-off-by: Shiv Verma --- tekton/release-pipeline.yml | 3 +-- tekton/release.sh | 54 ++++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 24 deletions(-) diff --git a/tekton/release-pipeline.yml b/tekton/release-pipeline.yml index d0bad50ff..cca641833 100644 --- a/tekton/release-pipeline.yml +++ b/tekton/release-pipeline.yml @@ -104,8 +104,7 @@ spec: - name: github-token-secret-key value: $(params.github-token-secret-key) - name: image - # TODO: update the goreleaser image to latest once go v1.25.6 is supported in latest goreleaser image - value: goreleaser/goreleaser:v2.18.0-ae4debbe-nightly + value: goreleaser/goreleaser:v2.17.1 - name: flags value: --timeout=60m workspaces: diff --git a/tekton/release.sh b/tekton/release.sh index fe4ab0b1c..729b4d76d 100755 --- a/tekton/release.sh +++ b/tekton/release.sh @@ -11,7 +11,11 @@ CATALOG_TASKS="lint build test" BINARIES="kubectl jq tkn git" -GOLANGCI_VERSION="$(cat tools/go.mod | grep golangci-lint | awk '{ print $3 }')" +GOLANGCI_VERSION="$(grep -A2 'golangci-lint' .github/workflows/ci.yaml | grep 'version:' | awk '{ print $2 }')" +[[ -z ${GOLANGCI_VERSION} ]] && { + echo "WARNING: unable to detect golangci-lint version from .github/workflows/ci.yaml, using 'latest'" + GOLANGCI_VERSION="latest" +} GO_VERSION="$(cat go.mod | grep "go" | awk 'NR==1{ print $2 }')" set -e @@ -38,18 +42,26 @@ kubectl get pipeline 2>/dev/null >/dev/null || { [[ ${RELEASE_VERSION} =~ v[0-9]+\.[0-9]*\.[0-9]+ ]] || { echo "invalid version provided, need to match v\d+\.\d+\.\d+"; exit 1 ;} -RELEASE_BRANCH="release-${RELEASE_VERSION%.*}.x" +MINOR_BRANCH="release-${RELEASE_VERSION%.*}.x" git fetch -a --tags ${UPSTREAM_REMOTE} >/dev/null -lasttag=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | grep -v "^${RELEASE_VERSION}$" | head -1) -[[ -z ${lasttag} ]] && { echo "no previous release tag found for ${RELEASE_VERSION}"; exit 1; } -git ls-remote --exit-code ${UPSTREAM_REMOTE} refs/heads/${RELEASE_BRANCH} >/dev/null 2>&1 && { - echo "Patch release detected: ${RELEASE_BRANCH} exists on ${UPSTREAM_REMOTE}, previous tag ${lasttag}" +git ls-remote --exit-code ${UPSTREAM_REMOTE} refs/heads/${MINOR_BRANCH} >/dev/null 2>&1 && { patch_release=true -} || { - echo "New release detected: creating ${RELEASE_BRANCH} from ${DEFAULT_BRANCH}, previous tag ${lasttag}" -} +} || true + +if [[ -n ${patch_release} ]];then + RELEASE_BRANCH="release-${RELEASE_VERSION}" + version_prefix="${RELEASE_VERSION%.*}" + prev_tag=$(git tag --sort=-v:refname -l "${version_prefix}.*" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | grep -v "^${RELEASE_VERSION}$" | head -1) + [[ -z ${prev_tag} ]] && { echo "no previous patch release tag found for ${version_prefix}"; exit 1; } + echo "Patch release detected: creating ${RELEASE_BRANCH} from ${MINOR_BRANCH} on ${UPSTREAM_REMOTE}, previous tag ${prev_tag}" +else + RELEASE_BRANCH="${MINOR_BRANCH}" + prev_tag=$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.0$' | grep -v "^${RELEASE_VERSION}$" | head -1) + [[ -z ${prev_tag} ]] && { echo "no previous release tag found for ${RELEASE_VERSION}"; exit 1; } + echo "New minor release detected: creating ${RELEASE_BRANCH} from ${DEFAULT_BRANCH}, previous tag ${prev_tag}" +fi cd ${GOPATH}/src/github.com/tektoncd/cli @@ -60,13 +72,13 @@ cd ${GOPATH}/src/github.com/tektoncd/cli } if [[ -n ${patch_release} ]];then - echo "Checking out existing ${RELEASE_BRANCH} from ${UPSTREAM_REMOTE}" - git checkout -B ${RELEASE_BRANCH} ${UPSTREAM_REMOTE}/${RELEASE_BRANCH} >/dev/null + echo "Creating ${RELEASE_BRANCH} from ${UPSTREAM_REMOTE}/${MINOR_BRANCH}" + git checkout -B ${RELEASE_BRANCH} ${UPSTREAM_REMOTE}/${MINOR_BRANCH} >/dev/null else echo "New release ${RELEASE_VERSION%.*} detected: creating ${RELEASE_BRANCH} from ${UPSTREAM_REMOTE}/${DEFAULT_BRANCH}" git checkout ${DEFAULT_BRANCH} git reset --hard ${UPSTREAM_REMOTE}/${DEFAULT_BRANCH} - git checkout -B ${RELEASE_BRANCH} ${DEFAULT_BRANCH} >/dev/null + git checkout -B ${RELEASE_BRANCH} ${UPSTREAM_REMOTE}/${DEFAULT_BRANCH} >/dev/null fi # HACK:! this is temporary to disable the upload to homebrew when we do our testing @@ -77,16 +89,9 @@ fi git cherry-pick 052b0b4ce989fe9aee01027e67e61538b48e1179 >/dev/null } -if [[ -n ${patch_release} ]];then - version_prefix="${RELEASE_VERSION%.*}" - prev_tag=$(git tag --sort=-v:refname -l "${version_prefix}.*" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | grep -v "^${RELEASE_VERSION}$" | head -1) - [[ -z ${prev_tag} ]] && { echo "no previous patch release tag found for ${version_prefix}"; exit 1; } -else - prev_tag=${lasttag} -fi -COMMITS=$(git log --reverse --no-merges \ - --pretty=format:'%H' HEAD \ - --since "$(git log --pretty=format:%cd -1 ${prev_tag})") +COMMITS=$(git log --reverse --no-merges --pretty=format:'%H' ${prev_tag}..HEAD) + +echo "Creating changelog for ${RELEASE_VERSION} from ${prev_tag}..HEAD" changelog="" for c in ${COMMITS};do @@ -96,6 +101,8 @@ for c in ${COMMITS};do " done +echo "${changelog}" + # Add our VERSION so Makefile will pick it up when compiling echo ${RELEASE_VERSION#v} > VERSION git add VERSION @@ -107,6 +114,9 @@ git tag --sign -m \ git push --force ${PUSH_REMOTE} ${RELEASE_VERSION} git push --force ${PUSH_REMOTE} ${RELEASE_BRANCH} +echo "Checkout to ${DEFAULT_BRANCH} to use the release pipeline" +git reset --hard ${UPSTREAM_REMOTE}/${DEFAULT_BRANCH} + kubectl create namespace ${TARGET_NAMESPACE} 2>/dev/null || true for task in ${CATALOG_TASKS};do