From d8c790df9ca4a3c89b2b41691224e3a415a09fa6 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Thu, 26 Jan 2023 14:24:03 -0300 Subject: [PATCH] Fix broken minor release counter for beta build tag gen on latest release branch (#4069) * Fix broken minor release counter * Add comments to facilitate the script understanding * Escape the dot when grepping the version numbers * Typo fix in a comment --- ci/actions/dev-build-tag-gen.sh | 34 +++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/ci/actions/dev-build-tag-gen.sh b/ci/actions/dev-build-tag-gen.sh index d62ab60b..1ad75102 100755 --- a/ci/actions/dev-build-tag-gen.sh +++ b/ci/actions/dev-build-tag-gen.sh @@ -100,11 +100,17 @@ function output_variable { set -o nounset set -o xtrace +# The reference branch is 'develop', that is the current release being developed. Here it is extracting the +# major and minor numbers from the CMakeLists.txt file. current_version_major=$(grep -P "(set)(.)*(CPACK_PACKAGE_VERSION_MAJOR)" "${source_dir}/CMakeLists.txt" | grep -oP "([0-9]+)") current_version_minor=$(grep -P "(set)(.)*(CPACK_PACKAGE_VERSION_MINOR)" "${source_dir}/CMakeLists.txt" | grep -oP "([0-9]+)") current_version_pre_release=$(grep -P "(set)(.)*(CPACK_PACKAGE_VERSION_PRE_RELEASE)" "${source_dir}/CMakeLists.txt" | grep -oP "([0-9]+)") -version_tags=$(git tag | sort -V -r | grep -E "^(V([0-9]+).([0-9]+)(RC[0-9]+)?)$") +# Get the list of version tags that can be either official releases or release candidates. The list comes +# ordered by version, in reverse order. +version_tags=$(git tag | sort -V -r | grep -E "^(V([0-9]+)\.([0-9]+)(RC[0-9]+)?)$") + +# Get the first tag of the list, that means, the latest version. last_tag=$(get_first_item "$version_tags") tag_version_major=$(echo "$last_tag" | grep -oP "\V([0-9]+)\." | grep -oP "[0-9]+") if [[ ${tag_version_major} -ge ${current_version_major} ]]; then @@ -128,14 +134,29 @@ last_tag="" version_tags="" previous_release_major=0 previous_release_minor=0 +# If option -r is set, then the script will handle tag generation as for the release branch, it'd do 'develop' branch +# otherwise. if [[ $previous_release_gen == false ]]; then - version_tags=$(git tag | sort -V -r | grep -E "^(V(${current_version_major}).(${current_version_minor})(DB[0-9]+))$" || true) +# List of all beta-build (DB) tags in reverse version order. + version_tags=$(git tag | sort -V -r | grep -E "^(V(${current_version_major})\.(${current_version_minor})(DB[0-9]+))$" || true) last_tag=$(get_first_item "$version_tags") else previous_release_major=$(( current_version_major - 1 )) - version_tags=$(git tag | sort -V -r | grep -E "^(V(${previous_release_major}).([0-9]+)(DB[0-9]+)?)$" || true) +# List of official release tags in reverse order. + version_tags=$(git tag | sort -V -r | grep -E "^(V(${previous_release_major})\.([0-9]+))$" || true) + if [[ -z "$version_tags" ]]; then +# Previous release minor is 0 if no official release is found in the branch. + previous_release_minor=0 + else +# Previous release minor version is increased by 1 because next beta-build should go on unreleased minor versions. + last_minor_release=$(get_first_item "$version_tags") + last_minor=$(echo "$last_minor_release" | grep -oP "\.([0-9]+)" | grep -oP "[0-9]+") + previous_release_minor=$(( last_minor + 1 )) + fi +# List of tags in reverse version order that may or many not include beta-build (DB) tags. + version_tags=$(git tag | sort -V -r | grep -E "^(V(${previous_release_major})\.(${previous_release_minor})(DB[0-9]+)?)$" || true) last_tag=$(get_first_item "$version_tags") - previous_release_minor=$(echo "$last_tag" | grep -oP "\.([0-9]+)" | grep -oP "[0-9]+") +# The reference release branch in Git repository should follow the pattern 'releases/vXY'. release_branch="releases/v${previous_release_major}" output_variable release_branch fi @@ -143,6 +164,8 @@ popd build_tag="" if [[ -z "$last_tag" ]]; then +# If the last tag was not found previously, it means there was no previous beta-build for this major and minor +# numbers, then the build number is 1. build_number=1 echo "info: no tag found, build_number=${build_number}" if [[ $previous_release_gen == false ]]; then @@ -156,6 +179,8 @@ if [[ -z "$last_tag" ]]; then fi pushd "$source_dir" +# This code block looks for the branch head in order to know if there is already a tag for it. There is no need +# to generate a new tag if the beta-build has already been created. develop_head="" if [[ $previous_release_gen == false ]]; then develop_head=$(git rev-parse "${git_upstream}/develop") @@ -170,6 +195,7 @@ if [[ "$develop_head" == "$tag_head" ]]; then exit 2 fi +# Prepares the build number to be used. latest_build_number=$(echo "$last_tag" | grep -oP "(DB[0-9]+)" | grep -oP "[0-9]+") build_number=$(( latest_build_number + 1 )) if [[ $previous_release_gen == false ]]; then