ccman 1.0.1 → 2.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.
Files changed (91) hide show
  1. package/.env.development +3 -0
  2. package/.env.production +3 -0
  3. package/.github/workflows/release.yml +5 -5
  4. package/CLAUDE.md +246 -185
  5. package/README.md +282 -249
  6. package/README_zh.md +283 -250
  7. package/dev-test.sh +40 -0
  8. package/dist/cli.js +425 -369
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/lang.d.ts +3 -0
  11. package/dist/commands/lang.d.ts.map +1 -0
  12. package/dist/commands/lang.js +99 -0
  13. package/dist/commands/lang.js.map +1 -0
  14. package/dist/config/static-env.d.ts +14 -0
  15. package/dist/config/static-env.d.ts.map +1 -0
  16. package/dist/config/static-env.js +17 -0
  17. package/dist/config/static-env.js.map +1 -0
  18. package/dist/core/CCMConfigManager.d.ts +52 -0
  19. package/dist/core/CCMConfigManager.d.ts.map +1 -0
  20. package/dist/core/CCMConfigManager.js +203 -0
  21. package/dist/core/CCMConfigManager.js.map +1 -0
  22. package/dist/core/ClaudeConfigManager.d.ts +35 -0
  23. package/dist/core/ClaudeConfigManager.d.ts.map +1 -0
  24. package/dist/core/ClaudeConfigManager.js +149 -0
  25. package/dist/core/ClaudeConfigManager.js.map +1 -0
  26. package/dist/i18n/LanguageManager.d.ts +43 -0
  27. package/dist/i18n/LanguageManager.d.ts.map +1 -0
  28. package/dist/i18n/LanguageManager.js +157 -0
  29. package/dist/i18n/LanguageManager.js.map +1 -0
  30. package/dist/i18n/messages.d.ts +65 -0
  31. package/dist/i18n/messages.d.ts.map +1 -0
  32. package/dist/i18n/messages.js +144 -0
  33. package/dist/i18n/messages.js.map +1 -0
  34. package/dist/index.d.ts +3 -3
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +3 -8
  37. package/dist/index.js.map +1 -1
  38. package/dist/providers/ProviderManager.d.ts +58 -0
  39. package/dist/providers/ProviderManager.d.ts.map +1 -0
  40. package/dist/providers/ProviderManager.js +335 -0
  41. package/dist/providers/ProviderManager.js.map +1 -0
  42. package/dist/types/index.d.ts +78 -38
  43. package/dist/types/index.d.ts.map +1 -1
  44. package/dist/types/index.js +1 -0
  45. package/dist/types/index.js.map +1 -1
  46. package/dist/utils/env-config.d.ts +27 -0
  47. package/dist/utils/env-config.d.ts.map +1 -0
  48. package/dist/{config/constants.js → utils/env-config.js} +36 -50
  49. package/dist/utils/env-config.js.map +1 -0
  50. package/dist/utils/version.d.ts +2 -64
  51. package/dist/utils/version.d.ts.map +1 -1
  52. package/dist/utils/version.js +12 -158
  53. package/dist/utils/version.js.map +1 -1
  54. package/package.json +17 -16
  55. package/release-temp/README.md +282 -249
  56. package/release-temp/package.json +17 -16
  57. package/scripts/build-env.js +75 -0
  58. package/scripts/modules/create-tag.sh +53 -10
  59. package/scripts/modules/monitor-release.sh +40 -12
  60. package/scripts/modules/version-bump.sh +14 -17
  61. package/scripts/smart-release-v3.sh +20 -26
  62. package/src/cli.ts +462 -394
  63. package/src/commands/lang.ts +105 -0
  64. package/src/core/CCMConfigManager.ts +185 -0
  65. package/src/core/ClaudeConfigManager.ts +125 -0
  66. package/src/i18n/LanguageManager.ts +169 -0
  67. package/src/i18n/messages.ts +233 -0
  68. package/src/index.ts +4 -5
  69. package/src/providers/ProviderManager.ts +393 -0
  70. package/src/types/index.ts +80 -39
  71. package/src/utils/env-config.ts +53 -0
  72. package/src/utils/version.ts +11 -184
  73. package/dist/config/ConfigManager.d.ts +0 -67
  74. package/dist/config/ConfigManager.d.ts.map +0 -1
  75. package/dist/config/ConfigManager.js +0 -226
  76. package/dist/config/ConfigManager.js.map +0 -1
  77. package/dist/config/EnvironmentManager.d.ts +0 -83
  78. package/dist/config/EnvironmentManager.d.ts.map +0 -1
  79. package/dist/config/EnvironmentManager.js +0 -280
  80. package/dist/config/EnvironmentManager.js.map +0 -1
  81. package/dist/config/constants.d.ts +0 -40
  82. package/dist/config/constants.d.ts.map +0 -1
  83. package/dist/config/constants.js.map +0 -1
  84. package/dist/shell/ShellManager.d.ts +0 -81
  85. package/dist/shell/ShellManager.d.ts.map +0 -1
  86. package/dist/shell/ShellManager.js +0 -490
  87. package/dist/shell/ShellManager.js.map +0 -1
  88. package/src/config/ConfigManager.ts +0 -227
  89. package/src/config/EnvironmentManager.ts +0 -327
  90. package/src/config/constants.ts +0 -64
  91. package/src/shell/ShellManager.ts +0 -526
@@ -1,17 +1,18 @@
1
1
  {
2
2
  "name": "ccman",
3
- "version": "1.0.1",
3
+ "version": "2.0.1",
4
4
  "description": "Claude Code Manager - A TypeScript tool to manage Claude Code API configurations",
5
5
  "main": "dist/index.js",
6
- "packageManager": "pnpm@8.15.1",
6
+ "packageManager": "pnpm@7.33.7",
7
7
  "bin": {
8
8
  "ccman": "./dist/cli.js"
9
9
  },
10
10
  "scripts": {
11
- "build": "tsc",
12
- "dev": "tsx src/cli.ts",
13
- "start": "node dist/cli.js",
14
- "test": "jest --passWithNoTests",
11
+ "prebuild": "NODE_ENV=production node scripts/build-env.js",
12
+ "prebuild:dev": "NODE_ENV=development node scripts/build-env.js",
13
+ "build": "pnpm prebuild && tsc",
14
+ "build:dev": "pnpm prebuild:dev && tsc",
15
+ "dev": "pnpm prebuild:dev && tsx src/cli.ts",
15
16
  "lint": "eslint src/**/*.ts",
16
17
  "clean": "rm -rf dist",
17
18
  "release": "./scripts/release.sh",
@@ -35,24 +36,24 @@
35
36
  "author": "",
36
37
  "license": "MIT",
37
38
  "dependencies": {
38
- "commander": "^11.0.0",
39
39
  "chalk": "^4.1.2",
40
- "inquirer": "^8.2.6",
41
- "fs-extra": "^11.0.0"
40
+ "commander": "^11.0.0",
41
+ "fs-extra": "^11.0.0",
42
+ "inquirer": "^8.2.6"
42
43
  },
43
44
  "devDependencies": {
44
- "@types/node": "^20.0.0",
45
- "@types/inquirer": "^9.0.0",
46
45
  "@types/fs-extra": "^11.0.0",
47
- "typescript": "^5.0.0",
48
- "tsx": "^4.0.0",
49
- "eslint": "^8.0.0",
46
+ "@types/inquirer": "^9.0.0",
47
+ "@types/jest": "^29.0.0",
48
+ "@types/node": "^20.0.0",
50
49
  "@typescript-eslint/eslint-plugin": "^6.0.0",
51
50
  "@typescript-eslint/parser": "^6.0.0",
51
+ "eslint": "^8.0.0",
52
52
  "jest": "^29.0.0",
53
- "@types/jest": "^29.0.0",
53
+ "prettier": "^3.0.0",
54
54
  "ts-jest": "^29.0.0",
55
- "prettier": "^3.0.0"
55
+ "tsx": "^4.0.0",
56
+ "typescript": "^5.0.0"
56
57
  },
57
58
  "engines": {
58
59
  "node": ">=16.0.0"
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+
6
+ /**
7
+ * 构建时环境配置生成器
8
+ * 根据NODE_ENV加载对应的.env文件并生成静态配置
9
+ */
10
+
11
+ function main() {
12
+ const nodeEnv = process.env.NODE_ENV || 'production';
13
+ const envFile = `.env.${nodeEnv}`;
14
+ const envPath = path.join(__dirname, '..', envFile);
15
+
16
+ console.log(`🔧 Building environment config for: ${nodeEnv}`);
17
+ console.log(`📂 Loading env file: ${envFile}`);
18
+
19
+ // 检查环境文件是否存在
20
+ if (!fs.existsSync(envPath)) {
21
+ console.error(`❌ Environment file not found: ${envFile}`);
22
+ process.exit(1);
23
+ }
24
+
25
+ // 读取并解析环境文件
26
+ const envContent = fs.readFileSync(envPath, 'utf8');
27
+ const envVars = {};
28
+
29
+ envContent.split('\n').forEach(line => {
30
+ line = line.trim();
31
+ if (line && !line.startsWith('#')) {
32
+ const [key, ...valueParts] = line.split('=');
33
+ if (key && valueParts.length > 0) {
34
+ envVars[key.trim()] = valueParts.join('=').trim();
35
+ }
36
+ }
37
+ });
38
+
39
+ console.log(`✅ Loaded ${Object.keys(envVars).length} environment variables`);
40
+
41
+ // 生成静态配置文件
42
+ const staticEnvContent = `/**
43
+ * 静态环境配置
44
+ * 此文件由 scripts/build-env.js 在编译时自动生成
45
+ * ⚠️ 请勿手动修改此文件
46
+ */
47
+
48
+ export const STATIC_ENV = {
49
+ NODE_ENV: '${nodeEnv}',
50
+ BUILD_TIME: '${new Date().toISOString()}',
51
+ ${Object.entries(envVars).map(([key, value]) => `${key}: '${value}'`).join(',\n ')}
52
+ } as const;
53
+
54
+ export const CCM_CONFIG_DIR = STATIC_ENV.CCM_CONFIG_DIR;
55
+ export const CLAUDE_CONFIG_PATH = STATIC_ENV.CLAUDE_CONFIG_PATH;
56
+ `;
57
+
58
+ // 确保目录存在
59
+ const staticEnvDir = path.join(__dirname, '..', 'src', 'config');
60
+ if (!fs.existsSync(staticEnvDir)) {
61
+ fs.mkdirSync(staticEnvDir, { recursive: true });
62
+ }
63
+
64
+ // 写入静态配置文件
65
+ const staticEnvPath = path.join(staticEnvDir, 'static-env.ts');
66
+ fs.writeFileSync(staticEnvPath, staticEnvContent);
67
+
68
+ console.log(`📝 Generated static config: src/config/static-env.ts`);
69
+ console.log(`🎯 Environment: ${nodeEnv}`);
70
+ console.log(`📋 Variables: ${Object.keys(envVars).join(', ')}`);
71
+ }
72
+
73
+ if (require.main === module) {
74
+ main();
75
+ }
@@ -43,12 +43,40 @@ check_tag_exists() {
43
43
  fi
44
44
  }
45
45
 
46
- # 创建tag
46
+ # 创建tag(静默模式,只返回tag名称)
47
47
  create_tag() {
48
48
  local version=$1
49
49
  local tag_name="v$version"
50
50
  local force_flag=""
51
51
 
52
+ # 静默检查tag是否存在
53
+ if check_tag_exists "$tag_name"; then
54
+ # 静默删除现有tag
55
+ git tag -d "$tag_name" >/dev/null 2>&1
56
+ force_flag="--force"
57
+ fi
58
+
59
+ # 静默创建tag
60
+ local tag_message="Release v$version
61
+
62
+ 📦 发布版本 v$version
63
+ ⏰ $(date '+%Y-%m-%d %H:%M:%S')
64
+
65
+ 🤖 Generated with [Claude Code](https://claude.ai/code)
66
+
67
+ Co-Authored-By: Claude <noreply@anthropic.com>"
68
+
69
+ git tag -a "$tag_name" -m "$tag_message" >/dev/null 2>&1
70
+
71
+ # 只输出tag名称
72
+ echo "$tag_name"
73
+ }
74
+
75
+ # 创建tag(交互模式,带打印信息)
76
+ create_tag_interactive() {
77
+ local version=$1
78
+ local tag_name="v$version"
79
+
52
80
  print_info "检查tag: $tag_name"
53
81
 
54
82
  if check_tag_exists "$tag_name"; then
@@ -59,7 +87,6 @@ create_tag() {
59
87
  if [[ $REPLY =~ ^[Yy]$ ]]; then
60
88
  print_info "删除现有tag: $tag_name"
61
89
  git tag -d "$tag_name"
62
- force_flag="--force"
63
90
  else
64
91
  print_info "跳过tag创建,使用现有tag"
65
92
  echo "$tag_name" # 返回tag名称
@@ -121,11 +148,11 @@ push_to_remote_quiet() {
121
148
  # 推送提交(如果有)
122
149
  if [ "$has_commit" = "true" ]; then
123
150
  local current_branch=$(git branch --show-current)
124
- git push origin "$current_branch" 2>/dev/null
151
+ git push origin "$current_branch" >/dev/null 2>&1
125
152
  fi
126
153
 
127
154
  # 推送tag
128
- git push origin "$tag_name" 2>/dev/null || git push origin "$tag_name" --force 2>/dev/null
155
+ git push origin "$tag_name" >/dev/null 2>&1 || git push origin "$tag_name" --force >/dev/null 2>&1
129
156
  }
130
157
 
131
158
  # 推送tag和提交到远程(交互模式)
@@ -158,8 +185,8 @@ create_tag_quietly() {
158
185
  # 检查tag是否已存在
159
186
  if check_tag_exists "$tag_name"; then
160
187
  # 如果tag存在,删除并重新创建
161
- git tag -d "$tag_name" 2>/dev/null
162
- git push origin --delete "$tag_name" 2>/dev/null
188
+ git tag -d "$tag_name" >/dev/null 2>&1
189
+ git push origin --delete "$tag_name" >/dev/null 2>&1
163
190
  fi
164
191
 
165
192
  # 创建tag
@@ -172,10 +199,10 @@ create_tag_quietly() {
172
199
 
173
200
  Co-Authored-By: Claude <noreply@anthropic.com>"
174
201
 
175
- git tag -a "$tag_name" -m "$tag_message" 2>/dev/null
202
+ git tag -a "$tag_name" -m "$tag_message" >/dev/null 2>&1
176
203
 
177
- # 静默推送
178
- push_to_remote_quiet "$tag_name" "false"
204
+ # 静默推送(始终推送当前分支和tag)
205
+ push_to_remote_quiet "$tag_name" "true"
179
206
 
180
207
  # 输出tag名称
181
208
  echo "$tag_name"
@@ -199,8 +226,24 @@ create_tag_and_commit() {
199
226
  exit 0
200
227
  fi
201
228
 
202
- # 创建tag
229
+ # 创建tag(显示交互信息)
230
+ print_info "检查tag: v$version"
231
+ if check_tag_exists "v$version"; then
232
+ print_warning "tag v$version 已存在"
233
+ read -p "是否要重新创建此tag? (y/N): " -n 1 -r
234
+ echo
235
+
236
+ if [[ $REPLY =~ ^[Yy]$ ]]; then
237
+ print_info "删除现有tag: v$version"
238
+ git tag -d "v$version"
239
+ else
240
+ print_info "跳过tag创建,使用现有tag"
241
+ fi
242
+ fi
243
+
244
+ print_info "创建tag: v$version"
203
245
  local tag_name=$(create_tag "$version")
246
+ print_success "tag $tag_name 创建成功"
204
247
 
205
248
  # 提交更改(如果有)
206
249
  local has_commit="false"
@@ -74,12 +74,13 @@ check_github_actions() {
74
74
  # 检查最新的workflow运行状态
75
75
  local api_response=$(curl -s "https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/actions/runs?per_page=1" 2>/dev/null || echo "")
76
76
 
77
- if [ -n "$api_response" ]; then
77
+ if [ -n "$api_response" ] && ! echo "$api_response" | grep -q '"message"'; then
78
78
  local run_status=$(echo "$api_response" | grep -o '"status":"[^"]*"' | head -1 | cut -d'"' -f4 2>/dev/null || echo "unknown")
79
79
  local run_conclusion=$(echo "$api_response" | grep -o '"conclusion":"[^"]*"' | head -1 | cut -d'"' -f4 2>/dev/null || echo "null")
80
80
 
81
81
  case "$run_status" in
82
82
  "completed")
83
+ echo # 换行
83
84
  if [ "$run_conclusion" = "success" ]; then
84
85
  print_success "GitHub Actions 构建成功! ✨"
85
86
  return 0
@@ -156,9 +157,13 @@ check_github_release() {
156
157
 
157
158
  if [ -n "$release_response" ] && ! echo "$release_response" | grep -q '"message":"Not Found"'; then
158
159
  # 检查release状态
159
- local release_draft=$(echo "$release_response" | grep -o '"draft":[^,}]*' | cut -d':' -f2 2>/dev/null || echo "true")
160
+ local release_draft=$(echo "$release_response" | grep -o '"draft":[^,}]*' | cut -d':' -f2 | tr -d ' ' 2>/dev/null || echo "true")
161
+
162
+ # 调试输出
163
+ # echo "[DEBUG] release_draft = '$release_draft'" >&2
160
164
 
161
165
  if [ "$release_draft" = "false" ]; then
166
+ echo # 换行
162
167
  print_success "GitHub Release v$version 创建成功! 🎉"
163
168
  return 0
164
169
  else
@@ -220,7 +225,7 @@ generate_summary() {
220
225
  fi
221
226
  }
222
227
 
223
- # 主函数: 监控发布状态
228
+ # 主函数: 监控发布状态(只监控NPM和Release)
224
229
  monitor_release() {
225
230
  local version=$(get_version_info)
226
231
  local commit_id=$(get_latest_commit)
@@ -232,8 +237,12 @@ monitor_release() {
232
237
  print_info "超时: ${MAX_WAIT_MINUTES} 分钟"
233
238
  echo ""
234
239
 
235
- # 显示监控链接
236
- show_monitoring_links "$version" "$commit_id"
240
+ # 显示监控链接(只显示需要的)
241
+ print_info "📊 监控链接:"
242
+ echo " 🔗 NPM Package: https://www.npmjs.com/package/${PACKAGE_NAME}"
243
+ echo " 🔗 NPM Version: https://www.npmjs.com/package/${PACKAGE_NAME}/v/${version}"
244
+ echo " 🔗 GitHub Release: https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/tag/v${version}"
245
+ echo ""
237
246
 
238
247
  # 检查curl是否可用
239
248
  if ! command -v curl &> /dev/null; then
@@ -242,16 +251,11 @@ monitor_release() {
242
251
  return 1
243
252
  fi
244
253
 
245
- # 并行监控各个状态
246
254
  print_info "开始监控发布状态... (最长等待 ${MAX_WAIT_MINUTES} 分钟)"
247
255
  echo ""
248
256
 
249
- # 检查GitHub Actions
250
- check_github_actions
251
- local actions_status=$?
252
-
253
257
  # 检查NPM包发布
254
- check_npm_package "$version"
258
+ check_npm_package "$version"
255
259
  local npm_status=$?
256
260
 
257
261
  # 检查GitHub Release
@@ -259,7 +263,31 @@ monitor_release() {
259
263
  local release_status=$?
260
264
 
261
265
  # 生成总结报告
262
- generate_summary "$version" $actions_status $npm_status $release_status
266
+ echo ""
267
+ echo "📋 发布监控总结"
268
+ echo "================"
269
+ echo " 版本: v$version"
270
+ echo " NPM 包发布: $(get_status_icon $npm_status)"
271
+ echo " GitHub Release: $(get_status_icon $release_status)"
272
+ echo ""
273
+
274
+ # 结果判断
275
+ if [ $npm_status -eq 0 ] && [ $release_status -eq 0 ]; then
276
+ print_success "🎉 发布完成!NPM包和GitHub Release都已正常发布"
277
+ return 0
278
+ elif [ $npm_status -eq 2 ] || [ $release_status -eq 2 ]; then
279
+ print_warning "⚠️ 发布监控超时 (${MAX_WAIT_MINUTES}分钟),请手动检查:"
280
+ if [ $npm_status -eq 2 ]; then
281
+ echo " • NPM包状态: https://www.npmjs.com/package/${PACKAGE_NAME}/v/${version}"
282
+ fi
283
+ if [ $release_status -eq 2 ]; then
284
+ echo " • GitHub Release: https://github.com/${REPO_OWNER}/${REPO_NAME}/releases/tag/v${version}"
285
+ fi
286
+ return 2
287
+ else
288
+ print_warning "⚠️ 发布部分失败,请手动检查上述链接"
289
+ return 1
290
+ fi
263
291
  }
264
292
 
265
293
  # 如果直接运行此脚本
@@ -37,8 +37,10 @@ get_current_version() {
37
37
  calculate_version_preview() {
38
38
  local version_type=$1
39
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 "计算失败"
40
+
41
+ if [ -n "$preview" ]; then
42
+ # 移除前缀v并返回
43
+ echo "$preview" | sed 's/^v//'
42
44
  else
43
45
  echo "计算失败"
44
46
  fi
@@ -64,9 +66,9 @@ version_bump() {
64
66
  local version_type=${1:-""}
65
67
 
66
68
  # 安静模式检测:如果被其他脚本调用,则静默运行
67
- if [ "$0" != "${BASH_SOURCE[0]}" ] || [ "$version_type" = "test" ]; then
69
+ if [ "$0" != "${BASH_SOURCE[0]}" ] || [ "$version_type" = "test" ] || [ "$version_type" = "--quiet" ]; then
68
70
  # 静默模式:只返回结果,不显示菜单
69
- if [ -n "$version_type" ] && [ "$version_type" != "test" ]; then
71
+ if [ -n "$version_type" ] && [ "$version_type" != "test" ] && [ "$version_type" != "--quiet" ]; then
70
72
  execute_version_bump_quiet "$version_type" "$current_version"
71
73
  return $?
72
74
  else
@@ -94,23 +96,18 @@ version_bump() {
94
96
  show_version_menu "$current_version" "$suggested_type"
95
97
 
96
98
  # 获取用户选择
97
- read -p "请选择版本升级类型 (1-5, 回车默认选择推荐): " choice
99
+ read -p "请选择版本升级类型 (1-4, 回车默认选择推荐): " choice
98
100
 
99
101
  # 处理用户选择
100
102
  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
103
+ "")
104
+ # 回车默认选择推荐版本
105
+ version_type="$suggested_type"
109
106
  ;;
110
- 2) version_type="patch" ;;
111
- 3) version_type="minor" ;;
112
- 4) version_type="major" ;;
113
- 5) handle_custom_version ;;
107
+ 1) version_type="patch" ;;
108
+ 2) version_type="minor" ;;
109
+ 3) version_type="major" ;;
110
+ 4) handle_custom_version ;;
114
111
  *)
115
112
  print_error "无效选择"
116
113
  exit 1
@@ -119,32 +119,26 @@ step_version_bump() {
119
119
  print_info "当前版本: v$current_version"
120
120
  NEW_VERSION="$current_version"
121
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
122
+ print_info "启动版本升级流程..."
123
+ # 如果指定了版本类型,静默调用
124
+ if [ -n "$VERSION_TYPE" ]; then
125
+ # 使用source方式调用,然后直接调用静默函数
126
+ source "$MODULE_DIR/version-bump.sh"
127
+ NEW_VERSION=$(execute_version_bump_quiet "$VERSION_TYPE" "$(get_current_version)")
128
+ if [ -z "$NEW_VERSION" ]; then
129
+ print_error "版本升级失败"
130
+ fi
131
+ else
132
+ # 没有指定版本类型,调用交互模式
133
+ "$MODULE_DIR/version-bump.sh"
134
+ local version_result=$?
135
+ if [ $version_result -eq 0 ]; then
136
+ NEW_VERSION=$(node -p "require('./package.json').version")
137
+ else
138
+ print_error "版本升级失败"
139
+ fi
140
+ fi
141
+ print_success "版本升级成功: v$NEW_VERSION"
148
142
  fi
149
143
 
150
144
  echo ""