diff --git a/tag_generator.sh b/tag_generator.sh index 84811faf..03937d48 100755 --- a/tag_generator.sh +++ b/tag_generator.sh @@ -28,68 +28,60 @@ newest_sky_tag=$(echo "$sky_tags" | head -n 1) # 如果没有 _sky 结尾的 tag,则从最新的 tag 提取版本号,生成 vX.Y.Z_sky if [ -z "$newest_sky_tag" ]; then - # 取最新的 tag(不管是否带_sky) latest_tag=$(echo "$tags" | head -n 1) echo "DEBUG: tags=[$tags]" echo "DEBUG: latest_tag=[$latest_tag]" if [ -n "$latest_tag" ]; then - # 提取版本号部分(去掉前缀v和后缀_sky等) - version_part=${latest_tag#v} # 去掉v - version_part=${version_part%_sky} # 去掉_sky(如果有) + version_part=${latest_tag#v} + version_part=${version_part%_sky} version_part=$(echo "$version_part" | tr -d ' \n\r') echo "DEBUG: version_part=[$version_part]" - IFS='.' read -r major minor patch <<< "$version_part" - if [ -z "$major" ]; then major=1; fi - if [ -z "$minor" ]; then minor=0; fi - if [ -z "$patch" ]; then patch=0; fi - next_tag="v$major.$minor.$patch_sky" + major=$(echo "$version_part" | awk -F. '{print $1}') + minor=$(echo "$version_part" | awk -F. '{print $2}') + patch=$(echo "$version_part" | awk -F. '{print $3}') + [ -z "$major" ] && major=1 + [ -z "$minor" ] && minor=0 + [ -z "$patch" ] && patch=0 + next_tag="v${major}.${minor}.${patch}_sky" else next_tag="v1.0.0_sky" fi else # 解析版本号部分(去掉 _sky 后缀和 v 前缀) - # 例如 v1.5.556_sky -> 1.5.556 - version_part=${newest_sky_tag%_sky} # 去掉 _sky 后缀 - version_part=${version_part#v} # 去掉 v 前缀 + version_part=${newest_sky_tag%_sky} + version_part=${version_part#v} version_part=$(echo "$version_part" | tr -d ' \n\r') echo "DEBUG: version_part=[$version_part]" - IFS='.' read -r major minor patch <<< "$version_part" # 拆分出主、次、修订号 - if [ -z "$major" ]; then major=1; fi - if [ -z "$minor" ]; then minor=0; fi - if [ -z "$patch" ]; then patch=0; fi - compare_json="" # 用于存储 commit 对比结果 - # 判断命令参数,决定对比范围 + major=$(echo "$version_part" | awk -F. '{print $1}') + minor=$(echo "$version_part" | awk -F. '{print $2}') + patch=$(echo "$version_part" | awk -F. '{print $3}') + [ -z "$major" ] && major=1 + [ -z "$minor" ] && minor=0 + [ -z "$patch" ] && patch=0 + compare_json="" if [[ "$1" == "generate_tag" ]];then - # 生成 tag 时,对比最新 _sky tag 和 master 之间的提交 echo "generate_tag:$newest_sky_tag-to-master\n" compare_json=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/compare?from=$newest_sky_tag&to=master") elif [[ "$1" == "generate_version" ]]; then - # 生成版本号时,对比 master 和当前分支之间的提交 echo "generate_version:master-to-$CI_COMMIT_BRANCH\n" compare_json=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/compare?from=master&to=$CI_COMMIT_BRANCH") fi echo "compare_json:$compare_json\n" - new_patch=$patch # 新的 patch 号 - new_minor=$minor # 新的 minor 号 - # 遍历所有 commit,根据提交信息递增版本号 + new_patch=$patch + new_minor=$minor while IFS= read -r commit_json; do - # 解析每个 commit 的 id 和 message commit_id=$(echo "$commit_json" | jq -r '.id') commit_message=$(echo "$commit_json" | jq -r '.message') echo "----$commit_message" - # 如果有 feat: 类型提交,minor 递增(只递增一次) if [[ "$commit_message" =~ ("feat:"*) ]] && [[ $new_minor == $minor ]]; then ((new_minor++)) - # 如果有 fix: 类型提交,patch 递增 elif [[ "$commit_message" =~ ("fix:"*) ]]; then ((new_patch++)) - # 其他类型提交(非 Merge/Revert),patch 递增 elif [[ ! "$commit_message" =~ ("Merge"* | "Revert"*) ]]; then ((new_patch++)) fi done < <(echo "$compare_json" | jq -c '.commits[] | {id: .id, message: .message}') - # 组装新的 tag,格式为 v.._sky - next_tag="v$major.$new_minor.$new_patch_sky" + next_tag="v${major}.${new_minor}.${new_patch}_sky" fi echo "New Tag:$newest_sky_tag;New version: $next_tag;command: $1"