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
This commit is contained in:
		
					parent
					
						
							
								e38d7a4d5c
							
						
					
				
			
			
				commit
				
					
						d8c790df9c
					
				
			
		
					 1 changed files with 30 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue