ccman 0.0.4 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/shell/ShellManager.d.ts +8 -0
- package/dist/shell/ShellManager.d.ts.map +1 -1
- package/dist/shell/ShellManager.js +132 -33
- package/dist/shell/ShellManager.js.map +1 -1
- package/docs/release-guide.md +68 -10
- package/docs/scripts-guide.md +221 -0
- package/package.json +5 -2
- package/release-temp/package.json +5 -2
- package/scripts/modules/check-uncommitted.sh +109 -0
- package/scripts/modules/create-tag.sh +236 -0
- package/scripts/modules/monitor-release.sh +268 -0
- package/scripts/modules/version-bump.sh +265 -0
- package/scripts/smart-release-v3.sh +289 -0
- package/scripts/smart-release.sh +322 -0
- package/src/shell/ShellManager.ts +143 -33
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# 脚本2: 版本提升模块
|
|
4
|
+
# 功能: 智能选择和执行版本号升级
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# 颜色定义
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
NC='\033[0m'
|
|
14
|
+
|
|
15
|
+
print_success() { echo -e "${GREEN}✅ $1${NC}"; }
|
|
16
|
+
print_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
|
|
17
|
+
print_error() { echo -e "${RED}❌ $1${NC}"; }
|
|
18
|
+
print_info() { echo -e "${BLUE}ℹ️ $1${NC}"; }
|
|
19
|
+
|
|
20
|
+
# 获取当前版本
|
|
21
|
+
get_current_version() {
|
|
22
|
+
if [ ! -f "package.json" ]; then
|
|
23
|
+
print_error "package.json 未找到"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
current_version=$(node -p "require('./package.json').version" 2>/dev/null || echo "")
|
|
28
|
+
if [ -z "$current_version" ]; then
|
|
29
|
+
print_error "无法读取当前版本号"
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
echo "$current_version"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# 计算版本预览
|
|
37
|
+
calculate_version_preview() {
|
|
38
|
+
local version_type=$1
|
|
39
|
+
local preview=$(pnpm version $version_type --dry-run 2>/dev/null)
|
|
40
|
+
if [ $? -eq 0 ] && [ -n "$preview" ]; then
|
|
41
|
+
echo "$preview" | sed 's/^v//' 2>/dev/null || echo "计算失败"
|
|
42
|
+
else
|
|
43
|
+
echo "计算失败"
|
|
44
|
+
fi
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# 分析git提交推荐版本类型
|
|
48
|
+
analyze_commit_history() {
|
|
49
|
+
local commits=$(git log --oneline -10 2>/dev/null | tr '[:upper:]' '[:lower:]' || echo "")
|
|
50
|
+
local suggested_type="patch"
|
|
51
|
+
|
|
52
|
+
if [[ $commits == *"breaking"* ]] || [[ $commits == *"major"* ]]; then
|
|
53
|
+
suggested_type="major"
|
|
54
|
+
elif [[ $commits == *"feat"* ]] || [[ $commits == *"feature"* ]] || [[ $commits == *"add"* ]]; then
|
|
55
|
+
suggested_type="minor"
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
echo "$suggested_type"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# 主函数: 版本选择和升级
|
|
62
|
+
version_bump() {
|
|
63
|
+
local current_version=$(get_current_version)
|
|
64
|
+
local version_type=${1:-""}
|
|
65
|
+
|
|
66
|
+
# 安静模式检测:如果被其他脚本调用,则静默运行
|
|
67
|
+
if [ "$0" != "${BASH_SOURCE[0]}" ] || [ "$version_type" = "test" ]; then
|
|
68
|
+
# 静默模式:只返回结果,不显示菜单
|
|
69
|
+
if [ -n "$version_type" ] && [ "$version_type" != "test" ]; then
|
|
70
|
+
execute_version_bump_quiet "$version_type" "$current_version"
|
|
71
|
+
return $?
|
|
72
|
+
else
|
|
73
|
+
# 测试模式,只返回当前版本
|
|
74
|
+
echo "$current_version"
|
|
75
|
+
return 0
|
|
76
|
+
fi
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
echo "📦 CCM 版本管理器"
|
|
80
|
+
echo "=================="
|
|
81
|
+
print_info "当前版本: $current_version"
|
|
82
|
+
echo ""
|
|
83
|
+
|
|
84
|
+
# 如果已指定版本类型,直接执行
|
|
85
|
+
if [ -n "$version_type" ] && [ "$version_type" != "test" ]; then
|
|
86
|
+
execute_version_bump "$version_type" "$current_version"
|
|
87
|
+
return $?
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
# 获取智能推荐
|
|
91
|
+
local suggested_type=$(analyze_commit_history)
|
|
92
|
+
|
|
93
|
+
# 显示版本选择菜单
|
|
94
|
+
show_version_menu "$current_version" "$suggested_type"
|
|
95
|
+
|
|
96
|
+
# 获取用户选择
|
|
97
|
+
read -p "请选择版本升级类型 (1-5, 回车默认选择推荐): " choice
|
|
98
|
+
|
|
99
|
+
# 处理用户选择
|
|
100
|
+
case ${choice:-""} in
|
|
101
|
+
1|"")
|
|
102
|
+
if [ "$suggested_type" == "patch" ]; then
|
|
103
|
+
version_type="patch"
|
|
104
|
+
elif [ "$suggested_type" == "minor" ]; then
|
|
105
|
+
version_type="minor"
|
|
106
|
+
else
|
|
107
|
+
version_type="major"
|
|
108
|
+
fi
|
|
109
|
+
;;
|
|
110
|
+
2) version_type="patch" ;;
|
|
111
|
+
3) version_type="minor" ;;
|
|
112
|
+
4) version_type="major" ;;
|
|
113
|
+
5) handle_custom_version ;;
|
|
114
|
+
*)
|
|
115
|
+
print_error "无效选择"
|
|
116
|
+
exit 1
|
|
117
|
+
;;
|
|
118
|
+
esac
|
|
119
|
+
|
|
120
|
+
# 确认升级
|
|
121
|
+
confirm_version_bump "$version_type" "$current_version"
|
|
122
|
+
|
|
123
|
+
# 执行升级
|
|
124
|
+
execute_version_bump "$version_type" "$current_version"
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# 显示版本选择菜单
|
|
128
|
+
show_version_menu() {
|
|
129
|
+
local current_version=$1
|
|
130
|
+
local suggested_type=$2
|
|
131
|
+
|
|
132
|
+
print_info "版本升级选项:"
|
|
133
|
+
echo ""
|
|
134
|
+
|
|
135
|
+
# 计算各版本预览
|
|
136
|
+
local patch_version=$(calculate_version_preview "patch")
|
|
137
|
+
local minor_version=$(calculate_version_preview "minor")
|
|
138
|
+
local major_version=$(calculate_version_preview "major")
|
|
139
|
+
|
|
140
|
+
# 显示推荐标记
|
|
141
|
+
local patch_mark=""
|
|
142
|
+
local minor_mark=""
|
|
143
|
+
local major_mark=""
|
|
144
|
+
|
|
145
|
+
case $suggested_type in
|
|
146
|
+
"patch") patch_mark="✨ [推荐] " ;;
|
|
147
|
+
"minor") minor_mark="✨ [推荐] " ;;
|
|
148
|
+
"major") major_mark="✨ [推荐] " ;;
|
|
149
|
+
esac
|
|
150
|
+
|
|
151
|
+
echo "1) ${patch_mark}🔧 Patch (修订版本) $current_version → $patch_version"
|
|
152
|
+
echo " └─ 适用于: bug修复、小改进"
|
|
153
|
+
echo ""
|
|
154
|
+
echo "2) ${minor_mark}✨ Minor (次版本) $current_version → $minor_version"
|
|
155
|
+
echo " └─ 适用于: 新功能、向后兼容改动"
|
|
156
|
+
echo ""
|
|
157
|
+
echo "3) ${major_mark}🚀 Major (主版本) $current_version → $major_version"
|
|
158
|
+
echo " └─ 适用于: 破坏性更改、重大重构"
|
|
159
|
+
echo ""
|
|
160
|
+
echo "4) 📝 Custom (自定义版本)"
|
|
161
|
+
echo " └─ 手动输入版本号"
|
|
162
|
+
echo ""
|
|
163
|
+
|
|
164
|
+
# 显示推荐原因
|
|
165
|
+
case $suggested_type in
|
|
166
|
+
"major")
|
|
167
|
+
print_warning "💡 检测到破坏性更改提交,建议主版本升级"
|
|
168
|
+
;;
|
|
169
|
+
"minor")
|
|
170
|
+
print_warning "💡 检测到新功能提交,建议次版本升级"
|
|
171
|
+
;;
|
|
172
|
+
"patch")
|
|
173
|
+
print_info "💡 建议修订版本升级"
|
|
174
|
+
;;
|
|
175
|
+
esac
|
|
176
|
+
echo ""
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
# 处理自定义版本
|
|
180
|
+
handle_custom_version() {
|
|
181
|
+
read -p "请输入自定义版本号 (格式: x.y.z): " custom_version
|
|
182
|
+
|
|
183
|
+
# 验证版本号格式
|
|
184
|
+
if [[ ! $custom_version =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+(\.[0-9]+)?)?$ ]]; then
|
|
185
|
+
print_error "版本号格式不正确,应为 x.y.z 格式"
|
|
186
|
+
exit 1
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
version_type="$custom_version"
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
# 确认版本升级
|
|
193
|
+
confirm_version_bump() {
|
|
194
|
+
local version_type=$1
|
|
195
|
+
local current_version=$2
|
|
196
|
+
|
|
197
|
+
if [[ "$version_type" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
|
|
198
|
+
local new_version="$version_type"
|
|
199
|
+
else
|
|
200
|
+
local new_version=$(calculate_version_preview "$version_type")
|
|
201
|
+
fi
|
|
202
|
+
|
|
203
|
+
echo ""
|
|
204
|
+
print_info "即将执行版本升级: $current_version → $new_version"
|
|
205
|
+
read -p "确认升级版本? (Y/n): " -n 1 -r
|
|
206
|
+
echo
|
|
207
|
+
|
|
208
|
+
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
|
209
|
+
print_warning "版本升级已取消"
|
|
210
|
+
exit 0
|
|
211
|
+
fi
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
# 执行版本升级(静默模式)
|
|
215
|
+
execute_version_bump_quiet() {
|
|
216
|
+
local version_type=$1
|
|
217
|
+
local current_version=$2
|
|
218
|
+
|
|
219
|
+
# 执行版本升级
|
|
220
|
+
if [[ "$version_type" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
|
|
221
|
+
# 自定义版本
|
|
222
|
+
new_version=$(pnpm version "$version_type" --no-git-tag-version 2>/dev/null)
|
|
223
|
+
else
|
|
224
|
+
# 标准版本类型
|
|
225
|
+
new_version=$(pnpm version "$version_type" --no-git-tag-version 2>/dev/null)
|
|
226
|
+
fi
|
|
227
|
+
|
|
228
|
+
if [ $? -eq 0 ]; then
|
|
229
|
+
new_version=${new_version#v}
|
|
230
|
+
echo "$new_version" # 输出新版本号供其他脚本使用
|
|
231
|
+
else
|
|
232
|
+
exit 1
|
|
233
|
+
fi
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
# 执行版本升级(交互模式)
|
|
237
|
+
execute_version_bump() {
|
|
238
|
+
local version_type=$1
|
|
239
|
+
local current_version=$2
|
|
240
|
+
|
|
241
|
+
print_info "执行版本升级..."
|
|
242
|
+
|
|
243
|
+
# 执行版本升级
|
|
244
|
+
if [[ "$version_type" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
|
|
245
|
+
# 自定义版本
|
|
246
|
+
new_version=$(pnpm version "$version_type" --no-git-tag-version 2>/dev/null)
|
|
247
|
+
else
|
|
248
|
+
# 标准版本类型
|
|
249
|
+
new_version=$(pnpm version "$version_type" --no-git-tag-version 2>/dev/null)
|
|
250
|
+
fi
|
|
251
|
+
|
|
252
|
+
if [ $? -eq 0 ]; then
|
|
253
|
+
new_version=${new_version#v}
|
|
254
|
+
print_success "版本升级成功: $current_version → $new_version"
|
|
255
|
+
echo "$new_version" # 输出新版本号供其他脚本使用
|
|
256
|
+
else
|
|
257
|
+
print_error "版本升级失败"
|
|
258
|
+
exit 1
|
|
259
|
+
fi
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
# 如果直接运行此脚本
|
|
263
|
+
if [ "${BASH_SOURCE[0]}" == "${0}" ]; then
|
|
264
|
+
version_bump "$@"
|
|
265
|
+
fi
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# CCM 智能发布脚本 v3.0 (模块化重构版)
|
|
4
|
+
# 功能: 串联四个独立模块实现完整的智能发布流程
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# 颜色定义
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
RED='\033[0;31m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
PURPLE='\033[0;35m'
|
|
14
|
+
NC='\033[0m'
|
|
15
|
+
|
|
16
|
+
print_success() { echo -e "${GREEN}✅ $1${NC}"; }
|
|
17
|
+
print_warning() { echo -e "${YELLOW}⚠️ $1${NC}"; }
|
|
18
|
+
print_error() { echo -e "${RED}❌ $1${NC}"; exit 1; }
|
|
19
|
+
print_info() { echo -e "${BLUE}ℹ️ $1${NC}"; }
|
|
20
|
+
print_step() { echo -e "${PURPLE}🔸 $1${NC}"; }
|
|
21
|
+
|
|
22
|
+
# 脚本路径配置
|
|
23
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
24
|
+
MODULE_DIR="$SCRIPT_DIR/modules"
|
|
25
|
+
|
|
26
|
+
# 检查模块脚本是否存在
|
|
27
|
+
check_modules() {
|
|
28
|
+
local modules=(
|
|
29
|
+
"check-uncommitted.sh"
|
|
30
|
+
"version-bump.sh"
|
|
31
|
+
"create-tag.sh"
|
|
32
|
+
"monitor-release.sh"
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
for module in "${modules[@]}"; do
|
|
36
|
+
if [ ! -f "$MODULE_DIR/$module" ]; then
|
|
37
|
+
print_error "模块脚本不存在: $MODULE_DIR/$module"
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
if [ ! -x "$MODULE_DIR/$module" ]; then
|
|
41
|
+
chmod +x "$MODULE_DIR/$module"
|
|
42
|
+
fi
|
|
43
|
+
done
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
# 显示帮助信息
|
|
47
|
+
show_help() {
|
|
48
|
+
echo "🚀 CCM 智能发布脚本 v3.0"
|
|
49
|
+
echo "========================="
|
|
50
|
+
echo ""
|
|
51
|
+
echo "用法: $0 [选项]"
|
|
52
|
+
echo ""
|
|
53
|
+
echo "选项:"
|
|
54
|
+
echo " --skip-version 跳过版本升级,直接使用当前版本"
|
|
55
|
+
echo " --version-type 指定版本类型 (patch|minor|major)"
|
|
56
|
+
echo " --no-monitor 跳过发布状态监控"
|
|
57
|
+
echo " -h, --help 显示此帮助信息"
|
|
58
|
+
echo ""
|
|
59
|
+
echo "示例:"
|
|
60
|
+
echo " $0 # 完整智能发布流程"
|
|
61
|
+
echo " $0 --skip-version # 跳过版本升级"
|
|
62
|
+
echo " $0 --version-type minor # 直接使用minor升级"
|
|
63
|
+
echo " $0 --no-monitor # 不监控发布状态"
|
|
64
|
+
echo ""
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# 解析命令行参数
|
|
68
|
+
parse_arguments() {
|
|
69
|
+
SKIP_VERSION=false
|
|
70
|
+
VERSION_TYPE=""
|
|
71
|
+
NO_MONITOR=false
|
|
72
|
+
|
|
73
|
+
while [[ $# -gt 0 ]]; do
|
|
74
|
+
case $1 in
|
|
75
|
+
--skip-version)
|
|
76
|
+
SKIP_VERSION=true
|
|
77
|
+
shift
|
|
78
|
+
;;
|
|
79
|
+
--version-type)
|
|
80
|
+
VERSION_TYPE="$2"
|
|
81
|
+
shift 2
|
|
82
|
+
;;
|
|
83
|
+
--no-monitor)
|
|
84
|
+
NO_MONITOR=true
|
|
85
|
+
shift
|
|
86
|
+
;;
|
|
87
|
+
-h|--help)
|
|
88
|
+
show_help
|
|
89
|
+
exit 0
|
|
90
|
+
;;
|
|
91
|
+
*)
|
|
92
|
+
print_error "未知参数: $1"
|
|
93
|
+
;;
|
|
94
|
+
esac
|
|
95
|
+
done
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# 步骤1: 检查未提交代码
|
|
99
|
+
step_check_uncommitted() {
|
|
100
|
+
print_step "步骤 1/4: 检查工作目录状态"
|
|
101
|
+
echo ""
|
|
102
|
+
|
|
103
|
+
# 调用模块脚本
|
|
104
|
+
source "$MODULE_DIR/check-uncommitted.sh"
|
|
105
|
+
check_uncommitted_changes
|
|
106
|
+
|
|
107
|
+
echo ""
|
|
108
|
+
print_success "步骤1完成: 工作目录状态正常"
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
# 步骤2: 版本升级
|
|
112
|
+
step_version_bump() {
|
|
113
|
+
print_step "步骤 2/4: 版本管理"
|
|
114
|
+
echo ""
|
|
115
|
+
|
|
116
|
+
if [ "$SKIP_VERSION" = true ]; then
|
|
117
|
+
print_info "跳过版本升级,使用当前版本"
|
|
118
|
+
local current_version=$(node -p "require('./package.json').version")
|
|
119
|
+
print_info "当前版本: v$current_version"
|
|
120
|
+
NEW_VERSION="$current_version"
|
|
121
|
+
else
|
|
122
|
+
print_info "是否需要版本升级?"
|
|
123
|
+
echo "1) 是,需要升级版本"
|
|
124
|
+
echo "2) 否,使用当前版本"
|
|
125
|
+
echo ""
|
|
126
|
+
|
|
127
|
+
read -p "请选择 (1-2, 默认1): " version_choice
|
|
128
|
+
|
|
129
|
+
case ${version_choice:-1} in
|
|
130
|
+
1)
|
|
131
|
+
print_info "启动版本升级流程..."
|
|
132
|
+
# 静默调用版本升级模块,捕获输出
|
|
133
|
+
NEW_VERSION=$("$MODULE_DIR/version-bump.sh" "$VERSION_TYPE" 2>/dev/null | tail -1)
|
|
134
|
+
if [ -z "$NEW_VERSION" ]; then
|
|
135
|
+
print_error "版本升级失败"
|
|
136
|
+
fi
|
|
137
|
+
print_success "版本升级成功: v$NEW_VERSION"
|
|
138
|
+
;;
|
|
139
|
+
2)
|
|
140
|
+
local current_version=$(node -p "require('./package.json').version")
|
|
141
|
+
print_info "使用当前版本: v$current_version"
|
|
142
|
+
NEW_VERSION="$current_version"
|
|
143
|
+
;;
|
|
144
|
+
*)
|
|
145
|
+
print_error "无效选择"
|
|
146
|
+
;;
|
|
147
|
+
esac
|
|
148
|
+
fi
|
|
149
|
+
|
|
150
|
+
echo ""
|
|
151
|
+
print_success "步骤2完成: 版本为 v$NEW_VERSION"
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
# 步骤3: 创建tag和提交
|
|
155
|
+
step_create_tag() {
|
|
156
|
+
print_step "步骤 3/4: 创建tag和提交"
|
|
157
|
+
echo ""
|
|
158
|
+
|
|
159
|
+
print_info "将为版本 v$NEW_VERSION 创建tag并提交..."
|
|
160
|
+
echo ""
|
|
161
|
+
|
|
162
|
+
# 静默调用tag创建模块,避免颜色代码泄露
|
|
163
|
+
TAG_NAME=$("$MODULE_DIR/create-tag.sh" --quiet)
|
|
164
|
+
if [ -z "$TAG_NAME" ]; then
|
|
165
|
+
print_error "tag创建失败"
|
|
166
|
+
fi
|
|
167
|
+
|
|
168
|
+
echo ""
|
|
169
|
+
print_success "步骤3完成: tag $TAG_NAME 已创建并推送"
|
|
170
|
+
print_info "GitHub Actions 已自动触发"
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
# 步骤4: 监控发布状态
|
|
174
|
+
step_monitor_release() {
|
|
175
|
+
print_step "步骤 4/4: 监控发布状态"
|
|
176
|
+
echo ""
|
|
177
|
+
|
|
178
|
+
if [ "$NO_MONITOR" = true ]; then
|
|
179
|
+
print_info "跳过发布状态监控"
|
|
180
|
+
print_info "请手动检查:"
|
|
181
|
+
echo " 🔗 GitHub Actions: https://github.com/2ue/ccm/actions"
|
|
182
|
+
echo " 🔗 NPM Package: https://www.npmjs.com/package/ccman"
|
|
183
|
+
echo " 🔗 GitHub Release: https://github.com/2ue/ccm/releases/tag/v$NEW_VERSION"
|
|
184
|
+
return 0
|
|
185
|
+
fi
|
|
186
|
+
|
|
187
|
+
# 给GitHub Actions一些时间启动
|
|
188
|
+
print_info "等待 GitHub Actions 启动... (10秒)"
|
|
189
|
+
sleep 10
|
|
190
|
+
|
|
191
|
+
# 直接执行监控模块
|
|
192
|
+
"$MODULE_DIR/monitor-release.sh"
|
|
193
|
+
local monitor_status=$?
|
|
194
|
+
|
|
195
|
+
echo ""
|
|
196
|
+
case $monitor_status in
|
|
197
|
+
0)
|
|
198
|
+
print_success "步骤4完成: 发布监控成功,所有组件已发布"
|
|
199
|
+
;;
|
|
200
|
+
1)
|
|
201
|
+
print_error "步骤4失败: 发布过程中出现错误"
|
|
202
|
+
;;
|
|
203
|
+
2)
|
|
204
|
+
print_warning "步骤4部分完成: 发布可能仍在进行中"
|
|
205
|
+
;;
|
|
206
|
+
*)
|
|
207
|
+
print_warning "步骤4完成: 发布状态需要手动确认"
|
|
208
|
+
;;
|
|
209
|
+
esac
|
|
210
|
+
|
|
211
|
+
return $monitor_status
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
# 显示最终总结
|
|
215
|
+
show_final_summary() {
|
|
216
|
+
local status=$1
|
|
217
|
+
|
|
218
|
+
echo ""
|
|
219
|
+
echo "🎊 智能发布流程总结"
|
|
220
|
+
echo "==================="
|
|
221
|
+
echo ""
|
|
222
|
+
print_info "📦 版本信息:"
|
|
223
|
+
echo " 版本: v$NEW_VERSION"
|
|
224
|
+
echo " Tag: $TAG_NAME"
|
|
225
|
+
echo ""
|
|
226
|
+
print_info "🔗 相关链接:"
|
|
227
|
+
echo " 安装命令: npm install -g ccman@$NEW_VERSION"
|
|
228
|
+
echo " NPM页面: https://www.npmjs.com/package/ccman/v/$NEW_VERSION"
|
|
229
|
+
echo " GitHub Release: https://github.com/2ue/ccm/releases/tag/v$NEW_VERSION"
|
|
230
|
+
echo ""
|
|
231
|
+
|
|
232
|
+
case $status in
|
|
233
|
+
0)
|
|
234
|
+
print_success "🎉 智能发布完全成功!"
|
|
235
|
+
;;
|
|
236
|
+
1)
|
|
237
|
+
print_error "❌ 发布过程中出现错误,请检查上述链接"
|
|
238
|
+
;;
|
|
239
|
+
*)
|
|
240
|
+
print_warning "⚠️ 发布可能仍在进行中,请稍后检查"
|
|
241
|
+
;;
|
|
242
|
+
esac
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
# 主函数
|
|
246
|
+
main() {
|
|
247
|
+
echo "🚀 CCM 智能发布脚本 v3.0 (模块化架构)"
|
|
248
|
+
echo "======================================="
|
|
249
|
+
echo ""
|
|
250
|
+
print_info "使用模块化架构,四个独立步骤:"
|
|
251
|
+
echo " 1. 检查工作目录状态"
|
|
252
|
+
echo " 2. 版本管理"
|
|
253
|
+
echo " 3. 创建tag和提交"
|
|
254
|
+
echo " 4. 监控发布状态"
|
|
255
|
+
echo ""
|
|
256
|
+
|
|
257
|
+
# 检查环境
|
|
258
|
+
check_modules
|
|
259
|
+
|
|
260
|
+
# 确认开始
|
|
261
|
+
if [ "$SKIP_VERSION" != true ] && [ -z "$VERSION_TYPE" ] && [ "$NO_MONITOR" != true ]; then
|
|
262
|
+
read -p "开始智能发布流程? (Y/n): " -n 1 -r
|
|
263
|
+
echo
|
|
264
|
+
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
|
265
|
+
print_warning "发布已取消"
|
|
266
|
+
exit 0
|
|
267
|
+
fi
|
|
268
|
+
echo ""
|
|
269
|
+
fi
|
|
270
|
+
|
|
271
|
+
# 执行四个步骤
|
|
272
|
+
step_check_uncommitted
|
|
273
|
+
step_version_bump
|
|
274
|
+
step_create_tag
|
|
275
|
+
step_monitor_release
|
|
276
|
+
local final_status=$?
|
|
277
|
+
|
|
278
|
+
# 显示最终总结
|
|
279
|
+
show_final_summary $final_status
|
|
280
|
+
|
|
281
|
+
exit $final_status
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
# 错误处理
|
|
285
|
+
trap 'print_error "智能发布过程中出现错误"' ERR
|
|
286
|
+
|
|
287
|
+
# 解析参数并运行
|
|
288
|
+
parse_arguments "$@"
|
|
289
|
+
main
|