feat(scripts): 增加多环境一键启停管理与分支工作流辅助脚本

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WeiCHEN
2026-09-07 15:59:25 +08:00
co-authored by Cursor
parent 4ce8275a8a
commit dd7675eb89
2 changed files with 295 additions and 0 deletions
+127
View File
@@ -0,0 +1,127 @@
#!/usr/bin/env bash
# =============================================================================
# Git 分支工作流辅助检查工具 (git-workflow-helper.sh)
# 作用:校验分支合规性、协助功能子分支检出与阶段发布节点标记
# =============================================================================
set -eo pipefail
COMMAND="$1"
ARG="$2"
CURRENT_BRANCH="$(git branch --show-current 2>/dev/null || echo '')"
show_help() {
cat <<EOF
Git 3 分支工作流辅助工具:
用法:
$0 check # 检查当前分支状态及工作流提示
$0 feature <name> # 基于 dev 检出 feature/<name> 子分支
$0 fix <name> # 基于 dev 检出 fix/<name> 子分支
$0 merge-to-dev # 将当前功能子分支测试后合回 dev
$0 promote-to-test <tag> # 将 dev 合并到 test 并打候选版本 tag (如 rc-v1.1.0-beta.1)
$0 release-to-main <tag> # 将 test 合并到 main 并打正式版本 tag (如 v1.1.0)
EOF
exit 1
}
case "${COMMAND}" in
check)
echo "=== 当前 Git 分支与工作流检查 ==="
echo "当前分支: [${CURRENT_BRANCH}]"
echo ""
case "${CURRENT_BRANCH}" in
dev)
echo "状态: 正处于【开发分支】。"
echo "提示: 可直接在此分支进行小功能渐进式提交,或创建 feature/<name> 进行复杂功能开发。"
;;
test)
echo "状态: 正处于【测试分支】。"
echo "提示: 仅用于长期实际部署和运维测试。新功能开发请切换至 dev。"
;;
main)
echo "状态: 正处于【主分支 (Release)】。"
echo "警告: 严禁直接在 main 上开发代码!只有经过 test 验证的稳定节点才能合入 main。"
;;
feature/*|fix/*)
echo "状态: 正处于功能子分支 [${CURRENT_BRANCH}]。"
echo "提示: 自测完成后,使用 '$0 merge-to-dev' 合回 dev 分支。"
;;
*)
echo "提示: 当前处于非常规分支 [${CURRENT_BRANCH}]。"
;;
esac
echo ""
git status --short
;;
feature)
if [[ -z "${ARG}" ]]; then
echo "错误: 请提供 feature 名称,例如: $0 feature session-cache"
exit 1
fi
echo "==> 从 dev 切换并创建 feature/${ARG}..."
git checkout dev
git pull --rebase origin dev 2>/dev/null || true
git checkout -b "feature/${ARG}"
echo "成功切换至 feature/${ARG}"
;;
fix)
if [[ -z "${ARG}" ]]; then
echo "错误: 请提供 fix 名称,例如: $0 fix db-pool-leak"
exit 1
fi
echo "==> 从 dev 切换并创建 fix/${ARG}..."
git checkout dev
git pull --rebase origin dev 2>/dev/null || true
git checkout -b "fix/${ARG}"
echo "成功切换至 fix/${ARG}"
;;
merge-to-dev)
if [[ "${CURRENT_BRANCH}" != feature/* && "${CURRENT_BRANCH}" != fix/* ]]; then
echo "错误: 当前分支为 ${CURRENT_BRANCH},不是 feature/* 或 fix/* 分支!"
exit 1
fi
SRC_BRANCH="${CURRENT_BRANCH}"
echo "==> 准备将 ${SRC_BRANCH} 合并回 dev 分支..."
git checkout dev
git pull --rebase origin dev 2>/dev/null || true
git merge --no-ff "${SRC_BRANCH}" -m "merge: 合并 ${SRC_BRANCH} 到开发分支 dev"
echo "合并成功!可运行 'git branch -d ${SRC_BRANCH}' 删除已合入的本地临时分支。"
;;
promote-to-test)
TAG="${ARG}"
if [[ -z "${TAG}" ]]; then
echo "错误: 请提供测试候选 Tag 名称,例如: $0 promote-to-test rc-v1.0.0-beta.1"
exit 1
fi
echo "==> 切换至 test 分支并合并 dev 当前稳定节点..."
git checkout test
git pull --rebase origin test 2>/dev/null || true
git merge --no-ff dev -m "release-candidate: 汇集 dev 功能至 test 分支,准备长期实测 [Tag: ${TAG}]"
git tag -a "${TAG}" -m "实测候选版本: ${TAG}"
echo "已成功合并至 test 并打上标签: ${TAG}!请启动 test 环境进行运维与功能测试。"
;;
release-to-main)
TAG="${ARG}"
if [[ -z "${TAG}" ]]; then
echo "错误: 请提供正式发布 Tag 名称,例如: $0 release-to-main v1.0.0"
exit 1
fi
echo "==> 切换至 main 分支并合并 test 验证节点..."
git checkout main
git pull --rebase origin main 2>/dev/null || true
git merge --no-ff test -m "release: 经长期测试与运维验证通过,正式发布 ${TAG}"
git tag -a "${TAG}" -m "正式发布版本: ${TAG}"
echo "已成功合并至 main 并打上正式发布标签: ${TAG}!"
;;
*)
show_help
;;
esac