Skip to content

Commit 228ca93

Browse files
authored
Merge pull request #404 from DirectXMan12/infra/release-notes-cross-version
🏃 support release notes on new version
2 parents b56d269 + 7499995 commit 228ca93

File tree

2 files changed

+64
-17
lines changed

2 files changed

+64
-17
lines changed

hack/release/common.sh

Lines changed: 62 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,52 @@ git::ensure-release-branch() {
6666
fi
6767
}
6868
69+
# git::export-version-from-branch outputs the current version
70+
# for the given branch (as the argument) as exported variables
71+
# (${maj,min,patch}_ver, last_tag).
72+
git::export-version-from-branch() {
73+
local target_branch=${1?must specify a branch}
74+
local current_branch=$(git branch --show-current -q)
75+
76+
local expected_maj_ver
77+
local expected_min_ver
78+
if [[ ${target_branch} =~ release-0.([[:digit:]]+) ]]; then
79+
expected_maj_ver=0
80+
expected_min_ver=${BASH_REMATCH[1]}
81+
elif [[ ${target_branch} =~ release-([[:digit:]]+) ]]; then
82+
expected_maj_ver=${BASH_REMATCH[1]}
83+
else
84+
echo "branch ${target_branch} does not appear to be for a release -- it should be release-X or release-0.Y" >&2
85+
exit 1
86+
fi
87+
88+
local tag_pattern='v([[:digit:]]+).([[:digit:]]+).([[:digit:]]+)'
89+
90+
git checkout -q ${target_branch}
91+
92+
# make sure we've got a tag that matches *some* release
93+
last_tag=$(git describe --tags --abbrev=0) # try to fetch just the "current" tag name
94+
if [[ ! ${last_tag} =~ ${tag_pattern} ]]; then
95+
# it's probably for a previous version
96+
echo "tag ${last_tag} does not appear to be for a release -- it should be vX.Y.Z" >&2
97+
git checkout -q ${current_branch}
98+
exit 1
99+
fi
100+
101+
export min_ver=${BASH_REMATCH[2]}
102+
export patch_ver=${BASH_REMATCH[3]}
103+
export maj_ver=${BASH_REMATCH[1]}
104+
export last_tag=${last_tag}
105+
106+
if ${2:-1} && ([[ ${maj_ver} != ${expected_maj_ver} ]] || [[ ${maj_ver} == 0 && ${min_ver} != ${expected_min_ver} ]]); then
107+
echo "tag ${last_tag} does not appear to be for a the right release (${target_branch})" >&2
108+
git checkout ${current_branch}
109+
exit 1
110+
fi
111+
112+
git checkout -q ${current_branch}
113+
}
114+
69115
# git::export-current-version outputs the current version
70116
# as exported variables (${maj,min,patch}_ver, last_tag) after
71117
# checking that we're on the right release branch.
@@ -75,25 +121,26 @@ git::export-current-version() {
75121
76122
# deal with the release-0.1 branch, or similar
77123
local release_ver=${BASH_REMATCH[1]}
78-
maj_ver=${release_ver}
79-
local tag_pattern='v${maj_ver}.([[:digit:]]+).([[:digit]]+)'
80-
if [[ ${maj_ver} =~ 0\.([[:digit:]]+) ]]; then
81-
maj_ver=0
82-
min_ver=${BASH_REMATCH[1]}
83-
local tag_pattern="v0.(${min_ver}).([[:digit:]]+)"
124+
local expected_maj_ver=${release_ver}
125+
if [[ ${expected_maj_ver} =~ 0\.([[:digit:]]+) ]]; then
126+
expected_maj_ver=0
127+
local expected_min_ver=${BASH_REMATCH[1]}
84128
fi
85129
86-
# make sure we've got a tag that matches our release branch
87-
last_tag=$(git describe --tags --abbrev=0) # try to fetch just the "current" tag name
88-
if [[ ! ${last_tag} =~ ${tag_pattern} ]]; then
89-
echo "tag ${last_tag} does not appear to be a release for this release (${release_ver})-- it should be v${maj_ver}.Y.Z" >&2
90-
exit 1
130+
git::export-version-from-branch "release-${release_ver}" false
131+
132+
local last_tag_branch=""
133+
if [[ ${maj_ver} == "0" && ${min_ver} -eq $((expected_min_ver-1)) ]]; then
134+
echo "most recent tag is a release behind (${last_tag}), checking previous release branch to be safe" >&2
135+
last_tag_branch="release-0.${min_ver}"
136+
elif [[ ${maj_ver} -eq $((expected_maj_ver-1)) ]]; then
137+
echo "most recent tag is a release behind (${last_tag}), checking previous release branch to be safe" >&2
138+
last_tag_branch="release-${maj_ver}"
91139
fi
92140

93-
export min_ver=${BASH_REMATCH[1]}
94-
export patch_ver=${BASH_REMATCH[2]}
95-
export maj_ver=${maj_ver}
96-
export last_tag=${last_tag}
141+
if [[ -n "${last_tag_branch}" ]]; then
142+
git::export-version-from-branch ${last_tag_branch} true
143+
fi
97144
}
98145

99146
# git::next-version figures out the next version to tag

hack/release/release-notes.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ done <<<$(git rev-list ${last_tag}..HEAD --merges --pretty=format:%B)
6464

6565
# TODO: sort non merge commits with tags
6666

67-
[[ -n "${breaking}" ]] && printf '\e[1;31mbreaking changes this version\e[0m' >&2
68-
[[ -n "${unknown}" ]] && printf '\e[1;35munknown changes in this release -- categorize manually\e[0m' >&2
67+
[[ -n "${breaking}" ]] && printf '\e[1;31mbreaking changes this version\e[0m\n' >&2
68+
[[ -n "${unknown}" ]] && printf '\e[1;35munknown changes in this release -- categorize manually\e[0m\n' >&2
6969

7070
echo "" >&2
7171
echo "" >&2

0 commit comments

Comments
 (0)