fix:ci流程调整为sky分支构建
This commit is contained in:
parent
35f7dd38e3
commit
5af587466c
@ -16,10 +16,10 @@ variables:
|
|||||||
- macos
|
- macos
|
||||||
- flutter
|
- flutter
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "develop"
|
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||||
- if: $CI_COMMIT_BRANCH == "release"
|
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
- if: $CI_COMMIT_BRANCH == "canary_release_sky"
|
||||||
- if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$/
|
- if: $CI_COMMIT_TAG =~ /^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$/
|
||||||
|
|
||||||
.notify_rule:
|
.notify_rule:
|
||||||
@ -27,8 +27,8 @@ variables:
|
|||||||
- macos
|
- macos
|
||||||
- flutter
|
- flutter
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "develop"
|
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||||
- if: $CI_COMMIT_BRANCH == "release"
|
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||||
|
|
||||||
.generate_tag_rule:
|
.generate_tag_rule:
|
||||||
@ -36,16 +36,16 @@ variables:
|
|||||||
- macos
|
- macos
|
||||||
- flutter
|
- flutter
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "master"
|
- if: $CI_COMMIT_BRANCH == "master_sky"
|
||||||
|
|
||||||
.generate_next_version_rule:
|
.generate_next_version_rule:
|
||||||
tags:
|
tags:
|
||||||
- macos
|
- macos
|
||||||
- flutter
|
- flutter
|
||||||
rules:
|
rules:
|
||||||
- if: $CI_COMMIT_BRANCH == "develop"
|
- if: $CI_COMMIT_BRANCH == "develop_sky"
|
||||||
- if: $CI_COMMIT_BRANCH == "release"
|
- if: $CI_COMMIT_BRANCH == "release_sky"
|
||||||
- if: $CI_COMMIT_BRANCH == "canary_release"
|
- if: $CI_COMMIT_BRANCH == "canary_release_sky"
|
||||||
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
- if: $CI_COMMIT_BRANCH =~ /feat_[a-zA-Z]+/
|
||||||
|
|
||||||
.print_env:
|
.print_env:
|
||||||
|
|||||||
@ -8,8 +8,9 @@ export ENV_BUILD_WORKSPACE=${CI_PROJECT_DIR}
|
|||||||
echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
|
echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
|
||||||
cd ${CI_PROJECT_DIR}/android
|
cd ${CI_PROJECT_DIR}/android
|
||||||
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
||||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
|
# 只支持 v1.2.3_sky 这种tag格式
|
||||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
|
regex='^v[0-9]+\.[0-9]+\.[0-9]+_sky$'
|
||||||
|
if [[ "${ENV_BUILD_BRANCH}" == "canary_release_sky" ]]; then
|
||||||
echo "===build canary_release: ${NEXT_VERSION}"
|
echo "===build canary_release: ${NEXT_VERSION}"
|
||||||
export ENV_BUILD_TAG=${NEXT_VERSION}
|
export ENV_BUILD_TAG=${NEXT_VERSION}
|
||||||
bundle exec fastlane release_apk flavor:xhj --verbose
|
bundle exec fastlane release_apk flavor:xhj --verbose
|
||||||
@ -20,11 +21,11 @@ elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
|
|||||||
bundle exec fastlane release_apk flavor:sky --verbose
|
bundle exec fastlane release_apk flavor:sky --verbose
|
||||||
bundle exec fastlane release_bundle flavor:xhj_bundle --verbose
|
bundle exec fastlane release_bundle flavor:xhj_bundle --verbose
|
||||||
bundle exec fastlane release_bundle flavor:sky --verbose
|
bundle exec fastlane release_bundle flavor:sky --verbose
|
||||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
|
elif [[ "${ENV_BUILD_BRANCH}" == "develop_sky" ]]; then
|
||||||
echo "===build dev===${NEXT_VERSION}"
|
echo "===build dev===${NEXT_VERSION}"
|
||||||
bundle exec fastlane beta flavor:xhj env:dev --verbose
|
bundle exec fastlane beta flavor:xhj env:dev --verbose
|
||||||
bundle exec fastlane beta flavor:sky env:dev --verbose
|
bundle exec fastlane beta flavor:sky env:dev --verbose
|
||||||
elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then
|
elif [[ "${ENV_BUILD_BRANCH}" == "release_sky" || "${ENV_BUILD_BRANCH}" == "feat_devops_sky" ]] ; then
|
||||||
echo "===build pre===${NEXT_VERSION}"
|
echo "===build pre===${NEXT_VERSION}"
|
||||||
bundle exec fastlane beta flavor:xhj env:pre --verbose
|
bundle exec fastlane beta flavor:xhj env:pre --verbose
|
||||||
bundle exec fastlane beta flavor:sky env:pre --verbose
|
bundle exec fastlane beta flavor:sky env:pre --verbose
|
||||||
|
|||||||
@ -9,8 +9,9 @@ echo "GITLAB_WORKSPACE: ${CI_PROJECT_DIR}"
|
|||||||
cd ${CI_PROJECT_DIR}/ios
|
cd ${CI_PROJECT_DIR}/ios
|
||||||
#bundle exec pod install
|
#bundle exec pod install
|
||||||
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
echo "ENV_BUILD_TAG:${ENV_BUILD_TAG},ENV_BUILD_BRANCH:${ENV_BUILD_BRANCH}"
|
||||||
regex='^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z]+\.[0-9]+)?$'
|
# 只支持 v1.2.3_sky 这种tag格式
|
||||||
if [[ "${ENV_BUILD_BRANCH}" == "canary_release" ]]; then
|
regex='^v[0-9]+\.[0-9]+\.[0-9]+_sky$'
|
||||||
|
if [[ "${ENV_BUILD_BRANCH}" == "canary_release_sky" ]]; then
|
||||||
echo "===build canary_release: ${NEXT_VERSION}"
|
echo "===build canary_release: ${NEXT_VERSION}"
|
||||||
export ENV_BUILD_TAG=${NEXT_VERSION}
|
export ENV_BUILD_TAG=${NEXT_VERSION}
|
||||||
bundle exec fastlane release_ipa flavor:xhj --verbose
|
bundle exec fastlane release_ipa flavor:xhj --verbose
|
||||||
@ -19,11 +20,11 @@ elif [[ $ENV_BUILD_TAG =~ $regex ]]; then
|
|||||||
echo "===build release===$ENV_BUILD_TAG"
|
echo "===build release===$ENV_BUILD_TAG"
|
||||||
bundle exec fastlane release_ipa flavor:xhj --verbose
|
bundle exec fastlane release_ipa flavor:xhj --verbose
|
||||||
bundle exec fastlane release_ipa flavor:sky --verbose
|
bundle exec fastlane release_ipa flavor:sky --verbose
|
||||||
elif [[ "${ENV_BUILD_BRANCH}" == "develop" ]]; then
|
elif [[ "${ENV_BUILD_BRANCH}" == "develop_sky" ]]; then
|
||||||
echo "===build dev===${NEXT_VERSION}"
|
echo "===build dev===${NEXT_VERSION}"
|
||||||
bundle exec fastlane beta flavor:xhj env:Dev --verbose
|
bundle exec fastlane beta flavor:xhj env:Dev --verbose
|
||||||
bundle exec fastlane beta flavor:sky env:Dev --verbose
|
bundle exec fastlane beta flavor:sky env:Dev --verbose
|
||||||
elif [[ "${ENV_BUILD_BRANCH}" == "release" ]] || [[ "${ENV_BUILD_BRANCH}" == "feat_devops" ]] ; then
|
elif [[ "${ENV_BUILD_BRANCH}" == "release_sky" || "${ENV_BUILD_BRANCH}" == "feat_devops_sky" ]] ; then
|
||||||
echo "===build pre===${NEXT_VERSION}"
|
echo "===build pre===${NEXT_VERSION}"
|
||||||
bundle exec fastlane beta flavor:xhj env:Pre --verbose
|
bundle exec fastlane beta flavor:xhj env:Pre --verbose
|
||||||
bundle exec fastlane beta flavor:sky env:Pre --verbose
|
bundle exec fastlane beta flavor:sky env:Pre --verbose
|
||||||
|
|||||||
@ -2,13 +2,13 @@
|
|||||||
set -e
|
set -e
|
||||||
APP_PRODUCT_NAME=$APP_PRODUCT_NAME
|
APP_PRODUCT_NAME=$APP_PRODUCT_NAME
|
||||||
BUILD_STATUS=$1
|
BUILD_STATUS=$1
|
||||||
if [[ "${CI_COMMIT_BRANCH}" == "release" ]] ; then
|
if [[ "${CI_COMMIT_BRANCH}" == "release_sky" ]] ; then
|
||||||
WECAHT_WEBHOOK_URL=$PRE_QYWECAHT_WEBHOOK_URL
|
WECAHT_WEBHOOK_URL=$PRE_QYWECAHT_WEBHOOK_URL
|
||||||
SKY_IOS_DOWNLOAD_URL=$PRE_SKY_IOS_DOWNLOAD_URL
|
SKY_IOS_DOWNLOAD_URL=$PRE_SKY_IOS_DOWNLOAD_URL
|
||||||
SKY_ANDROID_DOWNLOAD_URL=$PRE_SKY_ANDROID_DOWNLOAD_URL
|
SKY_ANDROID_DOWNLOAD_URL=$PRE_SKY_ANDROID_DOWNLOAD_URL
|
||||||
XHJ_IOS_DOWNLOAD_URL=$PRE_XHJ_IOS_DOWNLOAD_URL
|
XHJ_IOS_DOWNLOAD_URL=$PRE_XHJ_IOS_DOWNLOAD_URL
|
||||||
XHJ_ANDROID_DOWNLOAD_URL=$PRE_XHJ_ANDROID_DOWNLOAD_URL
|
XHJ_ANDROID_DOWNLOAD_URL=$PRE_XHJ_ANDROID_DOWNLOAD_URL
|
||||||
elif [[ "${CI_COMMIT_BRANCH}" == "develop" ]] || [[ "${CI_COMMIT_BRANCH}" == "feat_devops" ]]; then
|
elif [[ "${CI_COMMIT_BRANCH}" == "develop_sky" ]] || [[ "${CI_COMMIT_BRANCH}" == "feat_devops_sky" ]]; then
|
||||||
WECAHT_WEBHOOK_URL=$DEV_QYWECAHT_WEBHOOK_URL
|
WECAHT_WEBHOOK_URL=$DEV_QYWECAHT_WEBHOOK_URL
|
||||||
SKY_IOS_DOWNLOAD_URL=$DEV_SKY_IOS_DOWNLOAD_URL
|
SKY_IOS_DOWNLOAD_URL=$DEV_SKY_IOS_DOWNLOAD_URL
|
||||||
SKY_ANDROID_DOWNLOAD_URL=$DEV_SKY_ANDROID_DOWNLOAD_URL
|
SKY_ANDROID_DOWNLOAD_URL=$DEV_SKY_ANDROID_DOWNLOAD_URL
|
||||||
|
|||||||
@ -1,63 +1,106 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# 读取环境变量
|
# ========================
|
||||||
URL=$CI_API_V4_URL
|
# tag_generator.sh
|
||||||
TOKEN=$GITLAB_ACCESS_TOKEN
|
# 用于自动识别并递增以 _sky 结尾的 tag(如 v1.5.556_sky),并生成下一个 tag。
|
||||||
PROJECT_ID=$CI_PROJECT_ID
|
# 递增规则:feat: 提交递增 minor,fix: 或其他提交递增 patch。
|
||||||
next_tag=""
|
# ========================
|
||||||
newest_tag=""
|
|
||||||
|
# 读取环境变量(由 CI/CD 系统注入)
|
||||||
|
URL=$CI_API_V4_URL # GitLab API v4 地址
|
||||||
|
TOKEN=$GITLAB_ACCESS_TOKEN # GitLab 访问 Token
|
||||||
|
PROJECT_ID=$CI_PROJECT_ID # 当前项目 ID
|
||||||
|
next_tag="" # 新的 tag 变量
|
||||||
|
newest_tag="" # 最新 tag 变量
|
||||||
|
|
||||||
echo "PRIVATE-TOKEN: $TOKEN $URL/projects/$PROJECT_ID/repository/tags"
|
echo "PRIVATE-TOKEN: $TOKEN $URL/projects/$PROJECT_ID/repository/tags"
|
||||||
|
# 获取项目所有 tag 的 json 列表
|
||||||
|
# 需要 jq 工具解析 json
|
||||||
|
# tags_json 是所有 tag 的原始 json 数据
|
||||||
tags_json=$(curl -H "Content-Type: application/json" -H "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/tags")
|
tags_json=$(curl -H "Content-Type: application/json" -H "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/tags")
|
||||||
#echo "tags_json:$tags_json\n"
|
# 提取所有 tag 名称,按时间倒序排列(最新的在前)
|
||||||
tags=$(echo "$tags_json" | jq -r '.[].name')
|
tags=$(echo "$tags_json" | jq -r '.[].name')
|
||||||
tags_length=$(echo "$tags_json" | jq -r 'length')
|
|
||||||
if [ "$tags_length" -lt 1 ]; then
|
# 只保留以 _sky 结尾的 tag(即只处理 v1.2.3_sky 这种格式的 tag)
|
||||||
next_tag="v1.0.0"
|
sky_tags=$(echo "$tags" | grep '_sky$')
|
||||||
|
# 取最新的 _sky tag(即第一个)
|
||||||
|
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)
|
||||||
|
if [ -n "$latest_tag" ]; then
|
||||||
|
# 提取版本号部分(去掉前缀v和后缀_sky等)
|
||||||
|
version_part=${latest_tag#v} # 去掉v
|
||||||
|
version_part=${version_part%_sky} # 去掉_sky(如果有)
|
||||||
|
IFS='.' read -r major minor patch <<< "$version_part"
|
||||||
|
next_tag="v$major.$minor.$patch_sky"
|
||||||
|
else
|
||||||
|
next_tag="v1.0.0_sky"
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
newest_tag=$(echo "$tags" | head -n 1)
|
# 解析版本号部分(去掉 _sky 后缀和 v 前缀)
|
||||||
IFS='.' read -r major minor patch <<< "$newest_tag"
|
# 例如 v1.5.556_sky -> 1.5.556
|
||||||
major="${major#v}"
|
version_part=${newest_sky_tag%_sky} # 去掉 _sky 后缀
|
||||||
compare_json=""
|
version_part=${version_part#v} # 去掉 v 前缀
|
||||||
|
IFS='.' read -r major minor patch <<< "$version_part" # 拆分出主、次、修订号
|
||||||
|
compare_json="" # 用于存储 commit 对比结果
|
||||||
|
# 判断命令参数,决定对比范围
|
||||||
if [[ "$1" == "generate_tag" ]];then
|
if [[ "$1" == "generate_tag" ]];then
|
||||||
echo "generate_tag:$newest_tag-to-master\n"
|
# 生成 tag 时,对比最新 _sky tag 和 master 之间的提交
|
||||||
compare_json=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/compare?from=$newest_tag&to=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
|
elif [[ "$1" == "generate_version" ]]; then
|
||||||
echo "generate_version:master-to-$CI_COMMIT_BRANCH\n"
|
# 生成版本号时,对比 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")
|
compare_json=$(curl -s --header "PRIVATE-TOKEN: $TOKEN" "$URL/projects/$PROJECT_ID/repository/compare?from=master&to=$CI_COMMIT_BRANCH")
|
||||||
fi
|
fi
|
||||||
echo "compare_json:$compare_json\n"
|
echo "compare_json:$compare_json\n"
|
||||||
new_patch=$patch
|
new_patch=$patch # 新的 patch 号
|
||||||
new_minor=$minor
|
new_minor=$minor # 新的 minor 号
|
||||||
|
# 遍历所有 commit,根据提交信息递增版本号
|
||||||
while IFS= read -r commit_json; do
|
while IFS= read -r commit_json; do
|
||||||
# 使用 jq 解析每一行的 JSON 对象
|
# 解析每个 commit 的 id 和 message
|
||||||
commit_id=$(echo "$commit_json" | jq -r '.id')
|
commit_id=$(echo "$commit_json" | jq -r '.id')
|
||||||
commit_message=$(echo "$commit_json" | jq -r '.message')
|
commit_message=$(echo "$commit_json" | jq -r '.message')
|
||||||
echo "----$commit_message"
|
echo "----$commit_message"
|
||||||
|
# 如果有 feat: 类型提交,minor 递增(只递增一次)
|
||||||
if [[ "$commit_message" =~ ("feat:"*) ]] && [[ $new_minor == $minor ]]; then
|
if [[ "$commit_message" =~ ("feat:"*) ]] && [[ $new_minor == $minor ]]; then
|
||||||
((new_minor++))
|
((new_minor++))
|
||||||
# new_patch=0
|
# 如果有 fix: 类型提交,patch 递增
|
||||||
# break
|
|
||||||
elif [[ "$commit_message" =~ ("fix:"*) ]]; then
|
elif [[ "$commit_message" =~ ("fix:"*) ]]; then
|
||||||
((new_patch++))
|
((new_patch++))
|
||||||
|
# 其他类型提交(非 Merge/Revert),patch 递增
|
||||||
elif [[ ! "$commit_message" =~ ("Merge"* | "Revert"*) ]]; then
|
elif [[ ! "$commit_message" =~ ("Merge"* | "Revert"*) ]]; then
|
||||||
((new_patch++))
|
((new_patch++))
|
||||||
fi
|
fi
|
||||||
done < <(echo "$compare_json" | jq -c '.commits[] | {id: .id, message: .message}')
|
done < <(echo "$compare_json" | jq -c '.commits[] | {id: .id, message: .message}')
|
||||||
next_tag="v$major.$new_minor.$new_patch"
|
# 组装新的 tag,格式为 v<major>.<minor>.<patch>_sky
|
||||||
|
next_tag="v$major.$new_minor.$new_patch_sky"
|
||||||
fi
|
fi
|
||||||
echo "New Tag:$newest_tag;New version: $next_tag;command: $1"
|
|
||||||
|
echo "New Tag:$newest_sky_tag;New version: $next_tag;command: $1"
|
||||||
|
|
||||||
|
# 如果是 generate_tag 命令,且新 tag 和最新 tag 一致,则跳过生成
|
||||||
if [[ "$1" == "generate_tag" ]];then
|
if [[ "$1" == "generate_tag" ]];then
|
||||||
if [ "$next_tag" == "$newest_tag" ]; then
|
if [ "$next_tag" == "$newest_sky_tag" ]; then
|
||||||
echo "no change from master,skip to generate tag"
|
echo "no change from master,skip to generate tag"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
# 配置 git 用户名(可根据需要补充邮箱等)
|
||||||
git config user.name
|
git config user.name
|
||||||
|
# 创建并推送新 tag
|
||||||
git tag $next_tag
|
git tag $next_tag
|
||||||
git push -u origin $next_tag
|
git push -u origin $next_tag
|
||||||
echo "generate tag: $next_tag"
|
echo "generate tag: $next_tag"
|
||||||
elif [[ "$1" == "generate_version" ]]; then
|
elif [[ "$1" == "generate_version" ]]; then
|
||||||
|
# 如果是 generate_version 命令,仅导出新版本号到环境变量
|
||||||
export NEXT_VERSION="$next_tag"
|
export NEXT_VERSION="$next_tag"
|
||||||
echo "generate version: $NEXT_VERSION"
|
echo "generate version: $NEXT_VERSION"
|
||||||
fi
|
fi
|
||||||
|
# 无论哪种情况,都把新 tag 写入 app_new.version 文件
|
||||||
|
# 供后续流程使用
|
||||||
|
|
||||||
echo "$next_tag" > app_new.version
|
echo "$next_tag" > app_new.version
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user