long-git-cli 1.0.11 → 1.0.13

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 (71) hide show
  1. package/README.md +148 -0
  2. package/dist/commands/config.d.ts +9 -0
  3. package/dist/commands/config.d.ts.map +1 -0
  4. package/dist/commands/config.js +33 -0
  5. package/dist/commands/config.js.map +1 -0
  6. package/dist/commands/deploy.d.ts +14 -0
  7. package/dist/commands/deploy.d.ts.map +1 -0
  8. package/dist/commands/deploy.js +342 -0
  9. package/dist/commands/deploy.js.map +1 -0
  10. package/dist/commands/tag.d.ts.map +1 -1
  11. package/dist/commands/tag.js +4 -4
  12. package/dist/commands/tag.js.map +1 -1
  13. package/dist/devops/api/bitbucket-client.d.ts +101 -0
  14. package/dist/devops/api/bitbucket-client.d.ts.map +1 -0
  15. package/dist/devops/api/bitbucket-client.js +335 -0
  16. package/dist/devops/api/bitbucket-client.js.map +1 -0
  17. package/dist/devops/api/jenkins-client.d.ts +96 -0
  18. package/dist/devops/api/jenkins-client.d.ts.map +1 -0
  19. package/dist/devops/api/jenkins-client.js +240 -0
  20. package/dist/devops/api/jenkins-client.js.map +1 -0
  21. package/dist/devops/config/config-manager.d.ts +96 -0
  22. package/dist/devops/config/config-manager.d.ts.map +1 -0
  23. package/dist/devops/config/config-manager.js +331 -0
  24. package/dist/devops/config/config-manager.js.map +1 -0
  25. package/dist/devops/config/encryption.d.ts +39 -0
  26. package/dist/devops/config/encryption.d.ts.map +1 -0
  27. package/dist/devops/config/encryption.js +133 -0
  28. package/dist/devops/config/encryption.js.map +1 -0
  29. package/dist/devops/config/storage.d.ts +37 -0
  30. package/dist/devops/config/storage.d.ts.map +1 -0
  31. package/dist/devops/config/storage.js +132 -0
  32. package/dist/devops/config/storage.js.map +1 -0
  33. package/dist/devops/constants.d.ts +51 -0
  34. package/dist/devops/constants.d.ts.map +1 -0
  35. package/dist/devops/constants.js +95 -0
  36. package/dist/devops/constants.js.map +1 -0
  37. package/dist/devops/deployer/full-deployer.d.ts +77 -0
  38. package/dist/devops/deployer/full-deployer.d.ts.map +1 -0
  39. package/dist/devops/deployer/full-deployer.js +221 -0
  40. package/dist/devops/deployer/full-deployer.js.map +1 -0
  41. package/dist/devops/deployer/jenkins-deployer.d.ts +55 -0
  42. package/dist/devops/deployer/jenkins-deployer.d.ts.map +1 -0
  43. package/dist/devops/deployer/jenkins-deployer.js +110 -0
  44. package/dist/devops/deployer/jenkins-deployer.js.map +1 -0
  45. package/dist/devops/monitor/pipeline-monitor.d.ts +48 -0
  46. package/dist/devops/monitor/pipeline-monitor.d.ts.map +1 -0
  47. package/dist/devops/monitor/pipeline-monitor.js +170 -0
  48. package/dist/devops/monitor/pipeline-monitor.js.map +1 -0
  49. package/dist/devops/test-ui.d.ts +6 -0
  50. package/dist/devops/test-ui.d.ts.map +1 -0
  51. package/dist/devops/test-ui.js +31 -0
  52. package/dist/devops/test-ui.js.map +1 -0
  53. package/dist/devops/types.d.ts +138 -0
  54. package/dist/devops/types.d.ts.map +1 -0
  55. package/dist/devops/types.js +20 -0
  56. package/dist/devops/types.js.map +1 -0
  57. package/dist/devops/ui/server.d.ts +53 -0
  58. package/dist/devops/ui/server.d.ts.map +1 -0
  59. package/dist/devops/ui/server.js +1310 -0
  60. package/dist/devops/ui/server.js.map +1 -0
  61. package/dist/index.js +31 -1
  62. package/dist/index.js.map +1 -1
  63. package/dist/utils/message.d.ts +0 -2
  64. package/dist/utils/message.d.ts.map +1 -1
  65. package/dist/utils/message.js +7 -15
  66. package/dist/utils/message.js.map +1 -1
  67. package/dist/utils/tag.d.ts +65 -6
  68. package/dist/utils/tag.d.ts.map +1 -1
  69. package/dist/utils/tag.js +148 -14
  70. package/dist/utils/tag.js.map +1 -1
  71. package/package.json +19 -2
package/README.md CHANGED
@@ -37,6 +37,64 @@ long commit
37
37
  - commit 后再次确认,自动 push
38
38
  - 支持 Bitbucket/GitHub/GitLab,push 后友好提示
39
39
 
40
+ ### 快速部署(frontend-msg-admin 专用)
41
+ ```bash
42
+ long deploy
43
+ ```
44
+ - 专门为 `frontend-msg-admin` 项目定制的快速部署工具
45
+ - 支持 4 个测试环境:test-01, test-02, test-03, test-04
46
+ - 自动创建 tag 并触发构建和部署
47
+ - 实时监听构建和部署状态
48
+ - 支持在仓库目录内外执行
49
+
50
+ **使用方式**:
51
+
52
+ ```bash
53
+ # 交互式选择环境
54
+ long deploy
55
+
56
+ # 直接指定环境(1-4)
57
+ long deploy -e 1
58
+ long deploy --env 2
59
+
60
+ # 测试 Bitbucket 和 Jenkins 连接
61
+ long deploy --test
62
+ long deploy -t
63
+ ```
64
+
65
+ **首次使用**:
66
+
67
+ 1. 运行 `long config` 打开 Web UI 配置界面
68
+ 2. 配置 Bitbucket API Token 和 Jenkins API Token
69
+ 3. 配置完成后运行 `long deploy --test` 测试连接
70
+ 4. 测试通过后即可使用 `long deploy` 命令部署
71
+
72
+ **硬编码配置**:
73
+
74
+ - **Bitbucket**: `https://bitbucket.org/vantagefxcrm/frontend-msg-admin`
75
+ - **Jenkins**: `https://jenkins.app-alpha.com`
76
+ - **环境**: test-01, test-02, test-03, test-04
77
+
78
+ **执行流程**:
79
+
80
+ 1. 检查 API Token 配置
81
+ 2. 选择部署环境(1-4)
82
+ 3. 验证仓库路径
83
+ - 在目标仓库目录:使用本地 Git 创建 tag
84
+ - 不在目标仓库目录:通过 API 创建 tag
85
+ 4. 监听构建状态(AWS CodeBuild)
86
+ 5. 触发 Jenkins 部署
87
+ 6. 监听部署状态
88
+ 7. 显示部署结果
89
+
90
+ ### 配置管理
91
+ ```bash
92
+ long config
93
+ ```
94
+ - 打开 Web UI 配置界面
95
+ - 配置 Bitbucket 和 Jenkins API Token
96
+ - 配置项目和环境信息(用于 Web UI)
97
+
40
98
 
41
99
 
42
100
  ## 交互流程示例
@@ -79,12 +137,102 @@ feat(core): 支持交互式 commit
79
137
  💡 提示:在 Bitbucket 中,你可以在 "Commits" 页面查看
80
138
  ```
81
139
 
140
+ #### long deploy
141
+ ```
142
+ Frontend Msg Admin 部署工具
143
+
144
+ ? 选择部署环境: 1. test-01 (app-test-hy-service/frontend-msg-admin)
145
+
146
+ 部署到: test-01
147
+ Jenkins Job: app-test-hy-service/frontend-msg-admin
148
+
149
+ [1/4] 创建 Tag (本地 Git)
150
+ 拉取最新 tag...
151
+ 当前最新: test-v00.00.0262
152
+ 新 tag: test-v00.00.0263
153
+ 推送到 Bitbucket...
154
+ Tag 已创建: test-v00.00.0263
155
+
156
+ [2/4] 监听构建状态
157
+ 获取 commit hash: abc123d
158
+ 等待 build status 出现...
159
+ AWS CodeBuild us-east-1 (frontend-msg-admin-ci): INPROGRESS (0分15秒)
160
+ AWS CodeBuild us-east-1 (frontend-msg-admin-ci): SUCCESSFUL (1分45秒)
161
+ 构建完成
162
+
163
+ [3/4] 触发 Jenkins 部署
164
+ 触发 Jenkins 部署: app-test-hy-service/frontend-msg-admin
165
+ 构建已加入队列: 12345
166
+ 等待构建开始...
167
+ 构建已开始: #678
168
+
169
+ [4/4] 监听部署状态
170
+ 构建状态: BUILDING (0分10秒)
171
+ 构建状态: SUCCESS (0分35秒)
172
+
173
+ 部署成功!
174
+
175
+ Tag: test-v00.00.0263
176
+ Jenkins 构建: #678 - SUCCESS
177
+ 构建 URL: https://jenkins.example.com/job/app-test-hy-service/job/frontend-msg-admin/678/
178
+ ```
179
+
82
180
  ## 扩展性说明
83
181
 
84
182
  - 所有 git 操作、tag 处理、交互、常量、类型均已抽取为公共模块
85
183
  - 新增命令/支持更多平台/自定义交互,只需在 utils/constants/types 里维护
86
184
  - 代码高度解耦,便于单元测试和团队协作
87
185
 
186
+ ## 配置文件
187
+
188
+ 配置文件位置:`~/.long-cli/config.json`
189
+
190
+ 该文件存储:
191
+ - Bitbucket API Token(加密)
192
+ - Jenkins API Token(加密)
193
+ - 项目和环境配置(用于 Web UI)
194
+
195
+ **注意**:
196
+ - `long deploy` 命令只使用 API Token 配置,项目和环境配置是硬编码的
197
+ - `long config` 打开的 Web UI 可以配置多项目多环境,用于更灵活的部署场景
198
+
199
+ ## 故障排除
200
+
201
+ ### long deploy 提示"未找到配置"
202
+
203
+ **解决方法**:
204
+ 1. 运行 `long config` 打开 Web UI
205
+ 2. 配置 Bitbucket API Token 和 Jenkins API Token
206
+ 3. 保存配置后重新运行 `long deploy`
207
+
208
+ ### long deploy 提示"Bitbucket 配置不完整"
209
+
210
+ **解决方法**:
211
+ 1. 运行 `long config` 打开 Web UI
212
+ 2. 检查 Bitbucket 配置是否完整(用户名和 API Token)
213
+ 3. 重新保存配置
214
+
215
+ ### long deploy 提示"未找到 Jenkins (app) 配置"
216
+
217
+ **解决方法**:
218
+ 1. 运行 `long config` 打开 Web UI
219
+ 2. 添加 Jenkins 实例,类型选择 "app"
220
+ 3. 填写 Jenkins URL、用户名和 API Token
221
+ 4. 保存配置
222
+
223
+ ### 如何重新配置
224
+
225
+ 如果需要重新配置 API Token:
226
+ 1. 运行 `long config` 打开 Web UI
227
+ 2. 在配置界面重新输入新的 Token
228
+ 3. 保存配置
229
+
230
+ 或者直接删除配置文件:
231
+ ```bash
232
+ rm ~/.long-cli/config.json
233
+ ```
234
+ 然后重新运行 `long config` 进行配置。
235
+
88
236
  ## 贡献
89
237
 
90
238
  欢迎提 issue 或 PR,或根据自身需求 fork 扩展!
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Config 命令
3
+ * 启动 Web UI 配置界面
4
+ */
5
+ /**
6
+ * Config 命令处理函数
7
+ */
8
+ export declare function configCommand(): Promise<void>;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAkBnD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * Config 命令
4
+ * 启动 Web UI 配置界面
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.configCommand = configCommand;
11
+ const server_1 = require("../devops/ui/server");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ /**
14
+ * Config 命令处理函数
15
+ */
16
+ async function configCommand() {
17
+ try {
18
+ console.log(chalk_1.default.cyan("正在启动 Web UI 配置界面...\n"));
19
+ const server = new server_1.WebUIServer();
20
+ await server.start();
21
+ await server.openBrowser();
22
+ console.log(chalk_1.default.green("Web UI 已启动"));
23
+ console.log(chalk_1.default.gray("在浏览器中完成配置后,可以关闭此窗口\n"));
24
+ console.log(chalk_1.default.yellow("按 Ctrl+C 停止服务器"));
25
+ /** 保持进程运行 */
26
+ await new Promise(() => { });
27
+ }
28
+ catch (error) {
29
+ console.error(chalk_1.default.red("启动失败:"), error.message);
30
+ process.exit(1);
31
+ }
32
+ }
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAQH,sCAkBC;AAxBD,gDAAkD;AAClD,kDAA0B;AAE1B;;GAEG;AACI,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAI,oBAAW,EAAE,CAAC;QACjC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;QAE3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAE5C,aAAa;QACb,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Deploy 命令
3
+ * 专门为 frontend-msg-admin 项目定制的快速部署工具
4
+ */
5
+ interface DeployOptions {
6
+ env?: number;
7
+ test?: boolean;
8
+ }
9
+ /**
10
+ * Deploy 命令处理函数
11
+ */
12
+ export declare function deployCommand(options: DeployOptions): Promise<void>;
13
+ export {};
14
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoDH,UAAU,aAAa;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA+PzE"}
@@ -0,0 +1,342 @@
1
+ "use strict";
2
+ /**
3
+ * Deploy 命令
4
+ * 专门为 frontend-msg-admin 项目定制的快速部署工具
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.deployCommand = deployCommand;
11
+ const chalk_1 = __importDefault(require("chalk"));
12
+ const inquirer_1 = __importDefault(require("inquirer"));
13
+ const config_manager_1 = require("../devops/config/config-manager");
14
+ const bitbucket_client_1 = require("../devops/api/bitbucket-client");
15
+ const jenkins_client_1 = require("../devops/api/jenkins-client");
16
+ const pipeline_monitor_1 = require("../devops/monitor/pipeline-monitor");
17
+ const jenkins_deployer_1 = require("../devops/deployer/jenkins-deployer");
18
+ const tag_1 = require("./tag");
19
+ const simple_git_1 = require("simple-git");
20
+ const git = (0, simple_git_1.simpleGit)();
21
+ // 硬编码配置
22
+ const DEPLOY_CONFIG = {
23
+ project: {
24
+ workspace: "vantagefxcrm",
25
+ repoSlug: "frontend-msg-admin",
26
+ repoUrl: "https://bitbucket.org/vantagefxcrm/frontend-msg-admin",
27
+ tagFormat: "test-v00.00.0000",
28
+ },
29
+ bitbucket: {
30
+ baseUrl: "https://bitbucket.org/vantagefxcrm/frontend-msg-admin",
31
+ },
32
+ jenkins: {
33
+ baseUrl: "https://jenkins.app-alpha.com",
34
+ },
35
+ environments: [
36
+ {
37
+ id: 1,
38
+ name: "test-01",
39
+ jenkinsJob: "app-test-hy-service/frontend-msg-admin",
40
+ },
41
+ {
42
+ id: 2,
43
+ name: "test-02",
44
+ jenkinsJob: "app-test-hy-service/frontend-msg-admin2",
45
+ },
46
+ {
47
+ id: 3,
48
+ name: "test-03",
49
+ jenkinsJob: "app-test-hy-service/frontend-msg-admin3",
50
+ },
51
+ {
52
+ id: 4,
53
+ name: "test-04",
54
+ jenkinsJob: "app-test-hy-service/frontend-msg-admin4",
55
+ },
56
+ ],
57
+ };
58
+ /**
59
+ * Deploy 命令处理函数
60
+ */
61
+ async function deployCommand(options) {
62
+ // 添加 SIGINT 处理
63
+ process.on("SIGINT", () => {
64
+ console.log(chalk_1.default.yellow("\n\n部署已中断"));
65
+ console.log(chalk_1.default.gray("注意: 已触发的构建和部署可能仍在进行中"));
66
+ process.exit(0);
67
+ });
68
+ try {
69
+ console.log(chalk_1.default.cyan("Frontend Msg Admin 部署工具\n"));
70
+ // 1. 检查配置
71
+ const configManager = new config_manager_1.ConfigManager();
72
+ const hasConfig = await configManager.configExists();
73
+ if (!hasConfig) {
74
+ console.log(chalk_1.default.yellow("未找到配置,需要配置 API Token\n"));
75
+ // 交互式输入 Bitbucket Token
76
+ console.log(chalk_1.default.cyan("配置 Bitbucket API Token"));
77
+ const bitbucketAnswers = await inquirer_1.default.prompt([
78
+ {
79
+ type: "input",
80
+ name: "username",
81
+ message: "Bitbucket 用户名 (邮箱):",
82
+ validate: (input) => (input.trim() ? true : "用户名不能为空"),
83
+ },
84
+ {
85
+ type: "password",
86
+ name: "token",
87
+ message: "Bitbucket API Token:",
88
+ validate: (input) => (input.trim() ? true : "Token 不能为空"),
89
+ },
90
+ ]);
91
+ // 保存 Bitbucket 配置
92
+ await configManager.updateBitbucketConfig(bitbucketAnswers.username, bitbucketAnswers.token);
93
+ console.log(chalk_1.default.green("Bitbucket 配置已保存\n"));
94
+ // 交互式输入 Jenkins Token
95
+ console.log(chalk_1.default.cyan("配置 Jenkins API Token"));
96
+ const jenkinsAnswers = await inquirer_1.default.prompt([
97
+ {
98
+ type: "input",
99
+ name: "username",
100
+ message: "Jenkins 用户名:",
101
+ validate: (input) => (input.trim() ? true : "用户名不能为空"),
102
+ },
103
+ {
104
+ type: "password",
105
+ name: "token",
106
+ message: "Jenkins API Token:",
107
+ validate: (input) => (input.trim() ? true : "Token 不能为空"),
108
+ },
109
+ ]);
110
+ // 保存 Jenkins 配置
111
+ await configManager.addJenkinsInstance("app", DEPLOY_CONFIG.jenkins.baseUrl, jenkinsAnswers.username, jenkinsAnswers.token);
112
+ console.log(chalk_1.default.green("Jenkins 配置已保存\n"));
113
+ }
114
+ const config = await configManager.loadConfig();
115
+ // 验证配置完整性
116
+ if (!config.bitbucket?.username || !config.bitbucket?.appPasswordHash) {
117
+ console.log(chalk_1.default.yellow("Bitbucket 配置不完整"));
118
+ console.log(chalk_1.default.cyan("请运行 long config 完成配置\n"));
119
+ return;
120
+ }
121
+ // 查找 app 类型的 Jenkins 实例
122
+ const jenkinsConfig = config.jenkins?.find((j) => j.type === "app");
123
+ if (!jenkinsConfig) {
124
+ console.log(chalk_1.default.yellow("未找到 Jenkins (app) 配置"));
125
+ console.log(chalk_1.default.cyan("请运行 long config 添加 Jenkins 配置\n"));
126
+ return;
127
+ }
128
+ // 如果是测试连接模式
129
+ if (options.test) {
130
+ await testConnections(configManager, config, jenkinsConfig);
131
+ return;
132
+ }
133
+ // 2. 选择环境
134
+ let envId = options.env;
135
+ if (!envId) {
136
+ const answer = await inquirer_1.default.prompt([
137
+ {
138
+ type: "list",
139
+ name: "envId",
140
+ message: "选择部署环境:",
141
+ choices: DEPLOY_CONFIG.environments.map((env) => ({
142
+ name: `${env.id}. ${env.name} (${env.jenkinsJob})`,
143
+ value: env.id,
144
+ })),
145
+ },
146
+ ]);
147
+ envId = answer.envId;
148
+ }
149
+ const environment = DEPLOY_CONFIG.environments.find((e) => e.id === envId);
150
+ if (!environment) {
151
+ console.log(chalk_1.default.red(`错误: 环境 ${envId} 不存在`));
152
+ console.log(chalk_1.default.yellow("可用环境: 1, 2, 3, 4"));
153
+ return;
154
+ }
155
+ console.log(chalk_1.default.gray(`\n部署到: ${environment.name}`));
156
+ console.log(chalk_1.default.gray(`Jenkins Job: ${environment.jenkinsJob}\n`));
157
+ // 3. 验证仓库路径
158
+ let isGitRepo = false;
159
+ let isLocalRepo = false;
160
+ try {
161
+ isGitRepo = await git.checkIsRepo();
162
+ }
163
+ catch {
164
+ isGitRepo = false;
165
+ }
166
+ if (isGitRepo) {
167
+ try {
168
+ const remotes = await git.getRemotes(true);
169
+ const originUrl = remotes.find((r) => r.name === "origin")?.refs.fetch || "";
170
+ isLocalRepo = originUrl.includes(DEPLOY_CONFIG.project.repoSlug);
171
+ }
172
+ catch {
173
+ isLocalRepo = false;
174
+ }
175
+ }
176
+ // 4. 创建 Tag
177
+ let tagName;
178
+ if (isLocalRepo) {
179
+ console.log(chalk_1.default.cyan("[1/4] 创建 Tag (本地 Git)"));
180
+ // 复用 long tag 命令
181
+ await (0, tag_1.tagCommand)({ pass: true });
182
+ // 获取最新 tag
183
+ const tags = await git.tags();
184
+ tagName = tags.latest || "";
185
+ console.log(chalk_1.default.green(` Tag 已创建: ${tagName}\n`));
186
+ }
187
+ else {
188
+ console.log(chalk_1.default.cyan("[1/4] 创建 Tag (Bitbucket API)"));
189
+ // 询问分支
190
+ const branchAnswer = await inquirer_1.default.prompt([
191
+ {
192
+ type: "input",
193
+ name: "branch",
194
+ message: "要从哪个分支创建 tag:",
195
+ validate: (input) => (input.trim() ? true : "分支名称不能为空"),
196
+ },
197
+ ]);
198
+ // 通过 API 创建 tag
199
+ const bitbucketToken = await configManager.getBitbucketPassword();
200
+ if (!bitbucketToken) {
201
+ throw new Error("未找到 Bitbucket Token");
202
+ }
203
+ const bitbucketClient = new bitbucket_client_1.BitbucketClient(config.bitbucket.username, bitbucketToken);
204
+ // 获取分支最新 commit
205
+ const commitHash = await bitbucketClient.getBranchLatestCommit(DEPLOY_CONFIG.project.workspace, DEPLOY_CONFIG.project.repoSlug, branchAnswer.branch);
206
+ // 生成 tag 名称
207
+ tagName = await generateNextTag(bitbucketClient);
208
+ // 创建 tag
209
+ await bitbucketClient.createTag(DEPLOY_CONFIG.project.workspace, DEPLOY_CONFIG.project.repoSlug, tagName, commitHash);
210
+ console.log(chalk_1.default.green(` Tag 已创建: ${tagName}\n`));
211
+ }
212
+ // 5. 监听构建状态
213
+ console.log(chalk_1.default.cyan("[2/4] 监听构建状态"));
214
+ const bitbucketToken = await configManager.getBitbucketPassword();
215
+ if (!bitbucketToken) {
216
+ throw new Error("未找到 Bitbucket Token");
217
+ }
218
+ const bitbucketClient = new bitbucket_client_1.BitbucketClient(config.bitbucket.username, bitbucketToken);
219
+ const pipelineMonitor = new pipeline_monitor_1.PipelineMonitor(bitbucketClient);
220
+ await pipelineMonitor.monitorBuildStatus(DEPLOY_CONFIG.project.workspace, DEPLOY_CONFIG.project.repoSlug, tagName);
221
+ console.log(chalk_1.default.green(" 构建完成\n"));
222
+ // 6. 触发 Jenkins 部署
223
+ console.log(chalk_1.default.cyan("[3/4] 触发 Jenkins 部署"));
224
+ const jenkinsToken = await configManager.getJenkinsToken("app");
225
+ if (!jenkinsToken) {
226
+ throw new Error("未找到 Jenkins Token");
227
+ }
228
+ const jenkinsClient = new jenkins_client_1.JenkinsClient(DEPLOY_CONFIG.jenkins.baseUrl, jenkinsConfig.username, jenkinsToken);
229
+ const jenkinsDeployer = new jenkins_deployer_1.JenkinsDeployer(jenkinsClient);
230
+ console.log(chalk_1.default.cyan("[4/4] 监听部署状态"));
231
+ const buildInfo = await jenkinsDeployer.deploy(environment.jenkinsJob, {
232
+ TAG_VERSION: tagName,
233
+ action: "approve",
234
+ });
235
+ // 7. 显示结果
236
+ console.log(chalk_1.default.green("\n部署成功!\n"));
237
+ console.log(chalk_1.default.hex('#FFA500')(`Tag: ${tagName}`));
238
+ console.log(chalk_1.default.hex('#FFA500')(`Jenkins 构建: #${buildInfo.number} - ${buildInfo.result}`));
239
+ console.log(chalk_1.default.hex('#FFA500')(`构建 URL: ${buildInfo.url}\n`));
240
+ }
241
+ catch (error) {
242
+ console.error(chalk_1.default.red("\n部署失败:"), error.message);
243
+ process.exit(1);
244
+ }
245
+ }
246
+ /**
247
+ * 生成下一个 tag
248
+ */
249
+ async function generateNextTag(client) {
250
+ try {
251
+ // 获取所有 test-v 开头的 tag
252
+ const tags = await client.getTags(DEPLOY_CONFIG.project.workspace, DEPLOY_CONFIG.project.repoSlug);
253
+ // 过滤出 test-v 开头的 tag
254
+ const testTags = tags
255
+ .filter((tag) => tag.name.startsWith("test-v"))
256
+ .map((tag) => tag.name);
257
+ if (testTags.length === 0) {
258
+ return "test-v00.00.0001";
259
+ }
260
+ // 解析版本号并找到最大值
261
+ let maxVersion = 0;
262
+ for (const tag of testTags) {
263
+ const match = tag.match(/test-v(\d+)\.(\d+)\.(\d+)/);
264
+ if (match) {
265
+ const version = parseInt(match[3], 10);
266
+ if (version > maxVersion) {
267
+ maxVersion = version;
268
+ }
269
+ }
270
+ }
271
+ // 生成新版本号
272
+ const newVersion = maxVersion + 1;
273
+ const versionStr = String(newVersion).padStart(4, "0");
274
+ return `test-v00.00.${versionStr}`;
275
+ }
276
+ catch (error) {
277
+ console.log(chalk_1.default.yellow(" 无法获取现有 tag,使用默认版本"));
278
+ return "test-v00.00.0001";
279
+ }
280
+ }
281
+ /**
282
+ * 测试 Bitbucket 和 Jenkins 连接
283
+ */
284
+ async function testConnections(configManager, config, jenkinsConfig) {
285
+ console.log(chalk_1.default.cyan("测试连接\n"));
286
+ let allSuccess = true;
287
+ // 测试 Bitbucket 连接
288
+ console.log(chalk_1.default.cyan("[1/2] 测试 Bitbucket 连接"));
289
+ console.log(chalk_1.default.gray(` URL: ${DEPLOY_CONFIG.bitbucket.baseUrl}`));
290
+ console.log(chalk_1.default.gray(` 用户名: ${config.bitbucket.username}`));
291
+ try {
292
+ const bitbucketToken = await configManager.getBitbucketPassword();
293
+ if (!bitbucketToken) {
294
+ throw new Error("未找到 Bitbucket Token");
295
+ }
296
+ const bitbucketClient = new bitbucket_client_1.BitbucketClient(config.bitbucket.username, bitbucketToken);
297
+ const success = await bitbucketClient.testConnection();
298
+ if (success) {
299
+ console.log(chalk_1.default.green(" 连接成功\n"));
300
+ }
301
+ else {
302
+ console.log(chalk_1.default.red(" 连接失败\n"));
303
+ allSuccess = false;
304
+ }
305
+ }
306
+ catch (error) {
307
+ console.log(chalk_1.default.red(` 连接失败: ${error.message}\n`));
308
+ allSuccess = false;
309
+ }
310
+ // 测试 Jenkins 连接
311
+ console.log(chalk_1.default.cyan("[2/2] 测试 Jenkins 连接"));
312
+ console.log(chalk_1.default.gray(` URL: ${DEPLOY_CONFIG.jenkins.baseUrl}`));
313
+ console.log(chalk_1.default.gray(` 用户名: ${jenkinsConfig.username}`));
314
+ try {
315
+ const jenkinsToken = await configManager.getJenkinsToken("app");
316
+ if (!jenkinsToken) {
317
+ throw new Error("未找到 Jenkins Token");
318
+ }
319
+ const jenkinsClient = new jenkins_client_1.JenkinsClient(DEPLOY_CONFIG.jenkins.baseUrl, jenkinsConfig.username, jenkinsToken);
320
+ const success = await jenkinsClient.testConnection();
321
+ if (success) {
322
+ console.log(chalk_1.default.green(" 连接成功\n"));
323
+ }
324
+ else {
325
+ console.log(chalk_1.default.red(" 连接失败\n"));
326
+ allSuccess = false;
327
+ }
328
+ }
329
+ catch (error) {
330
+ console.log(chalk_1.default.red(` 连接失败: ${error.message}\n`));
331
+ allSuccess = false;
332
+ }
333
+ // 显示总结
334
+ if (allSuccess) {
335
+ console.log(chalk_1.default.green("所有连接测试通过\n"));
336
+ }
337
+ else {
338
+ console.log(chalk_1.default.red("部分连接测试失败,请检查配置\n"));
339
+ process.exit(1);
340
+ }
341
+ }
342
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD5E"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"AAgBA;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiD5E"}
@@ -74,11 +74,11 @@ async function tagCommand(options) {
74
74
  }
75
75
  // 5. 解析当前 tag
76
76
  const currentTagInfo = (0, tag_1.parseTag)(latestTag);
77
- (0, message_1.printOldMessage)(`当前 tag: ${latestTag}`);
77
+ (0, message_1.printSuccess)(`🏷️ 当前最新 tag: ${latestTag}`);
78
78
  // 6. 生成新版本号
79
79
  const newTagInfo = (0, tag_1.incrementVersion)(currentTagInfo);
80
- const newTag = (0, tag_1.formatTag)(newTagInfo);
81
- (0, message_1.printNewMessage)(`新 tag: ${newTag}`);
80
+ const newTag = (0, tag_1.formatTag)(newTagInfo, { prefix: 'test-v', pattern: '00.00.0000' });
81
+ (0, message_1.printInfo)(`新 tag: ${newTag}`);
82
82
  // 7. 询问用户是否确认
83
83
  if (!(options && options.pass)) {
84
84
  const confirmed = await prompt.confirm(`是否确认创建并推送新 tag: ${newTag}?`);
@@ -89,7 +89,7 @@ async function tagCommand(options) {
89
89
  }
90
90
  // 8. 创建并推送新 tag
91
91
  await createAndPushTag(newTag, remoteInfo);
92
- (0, message_1.printSuccess)('Tag 创建并推送成功!');
92
+ (0, message_1.printSuccess)('Tag 创建并推送成功!');
93
93
  }
94
94
  catch (error) {
95
95
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tag.js","sourceRoot":"","sources":["../../src/commands/tag.ts"],"names":[],"mappings":"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"}