@cloudglab/zentao-cli 0.1.4 → 0.1.5
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/CHANGELOG.md +18 -0
- package/README.md +121 -263
- package/dist/api/execution.d.ts +33 -0
- package/dist/api/execution.js +363 -0
- package/dist/api/execution.js.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/statistics.d.ts +38 -1
- package/dist/api/statistics.js +307 -1
- package/dist/api/statistics.js.map +1 -1
- package/dist/api/task.js +24 -5
- package/dist/api/task.js.map +1 -1
- package/dist/cli.js +19 -3
- package/dist/cli.js.map +1 -1
- package/dist/core/http.d.ts +1 -0
- package/dist/core/http.js +26 -0
- package/dist/core/http.js.map +1 -1
- package/dist/core/roles.js +1 -1
- package/dist/core/roles.js.map +1 -1
- package/dist/install.d.ts +2 -0
- package/dist/install.js +127 -0
- package/dist/install.js.map +1 -0
- package/dist/tools/execution.js +8 -0
- package/dist/tools/execution.js.map +1 -1
- package/dist/tools/statistics.js +8 -0
- package/dist/tools/statistics.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +10 -3
- package/skills/zentao-cli/SKILL.md +165 -0
- package/skills/zentao-cli/reference/bug.md +93 -0
- package/skills/zentao-cli/reference/build.md +21 -0
- package/skills/zentao-cli/reference/cli.md +25 -0
- package/skills/zentao-cli/reference/execution.md +38 -0
- package/skills/zentao-cli/reference/install.md +68 -0
- package/skills/zentao-cli/reference/overview.md +24 -0
- package/skills/zentao-cli/reference/plan.md +20 -0
- package/skills/zentao-cli/reference/product.md +14 -0
- package/skills/zentao-cli/reference/project.md +14 -0
- package/skills/zentao-cli/reference/statistics.md +30 -0
- package/skills/zentao-cli/reference/story.md +22 -0
- package/skills/zentao-cli/reference/task.md +21 -0
- package/skills/zentao-cli/reference/testcase.md +20 -0
- package/skills/zentao-cli/reference/testtask.md +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.5 - 2026-06-06
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- 新增 `zentao install` / `zentao update` 内置命令,一键安装或更新 CLI 与 skill,并校验禅道配置。
|
|
10
|
+
- 新增 `getExecutionDynamic`,支持按执行 ID 近似读取执行动态摘要。
|
|
11
|
+
- 新增 `getExecutionDailyBugStats`,输出迭代每日 Bug、任务、参与人员和问题明细统计报告。
|
|
12
|
+
- 新增 `getMyWeeklyActivity`,支持上周、本周、最近 N 天、单日和自定义日期范围的个人阶段性工作清单。
|
|
13
|
+
- 新增 Vitest 测试体系、覆盖率配置和 lefthook pre-commit 检查入口。
|
|
14
|
+
- 新增核心函数、API 封装、工具注册、配置、认证和 HTTP 客户端测试。
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- `getMyTasks` 改为尽量拉取完整任务列表后在客户端按状态和分页过滤,以适配部分禅道部署忽略查询参数的问题。
|
|
19
|
+
- QA 角色新增任务相关命令入口。
|
|
20
|
+
- npm 发布文件列表加入 `skills` 目录,确保 skill 随包发布。
|
|
21
|
+
- README、skill 和 reference 文档同步到新增安装、动态和统计能力。
|
|
22
|
+
|
|
5
23
|
## 0.1.4 - 2026-06-05
|
|
6
24
|
|
|
7
25
|
### Changed
|
package/README.md
CHANGED
|
@@ -1,319 +1,177 @@
|
|
|
1
1
|
# @cloudglab/zentao-cli
|
|
2
2
|
|
|
3
|
-
基于 TypeScript 重建的禅道命令行工具,优先适配当前禅道 `18.5` 的 REST v1 API。
|
|
4
|
-
|
|
5
3
|

|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
把禅道任务、Bug、执行、构建、动态和统计能力接到命令行,方便在 CI、脚本和 AI Skill 里直接调用。
|
|
8
6
|
|
|
9
|
-
##
|
|
7
|
+
## 安装方式
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
- `4` 个内置角色:`Dev / QA / PM / Full`
|
|
13
|
-
- 基于 TypeScript 重建,优先适配禅道 `18.5` REST v1 API
|
|
14
|
-
- 发布产物运行时目标:`Node.js >= 16`
|
|
15
|
-
- 默认写保护,写操作需要显式开启并确认,更适合接入智能体和自动化流程
|
|
9
|
+
### 一键安装 CLI + Skill
|
|
16
10
|
|
|
17
|
-
|
|
11
|
+
```bash
|
|
12
|
+
npx -y @cloudglab/zentao-cli@latest install
|
|
13
|
+
```
|
|
18
14
|
|
|
19
|
-
|
|
15
|
+
该命令会依次安装全局 CLI、安装 skill,并在禅道配置缺失或登录校验失败时引导输入配置。
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
后续更新也可以直接运行:
|
|
22
18
|
|
|
23
19
|
```bash
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# 直接运行
|
|
27
|
-
npx -y @cloudglab/zentao-cli@latest
|
|
28
|
-
|
|
29
|
-
# 全局安装
|
|
30
|
-
npm i -g @cloudglab/zentao-cli@latest
|
|
20
|
+
zentao update
|
|
31
21
|
```
|
|
32
22
|
|
|
33
|
-
###
|
|
23
|
+
### CI / 脚本里临时使用
|
|
34
24
|
|
|
35
25
|
```bash
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
export ZENTAO_PASSWORD="your-password"
|
|
39
|
-
export ZENTAO_API_VERSION="v1"
|
|
40
|
-
|
|
41
|
-
# 可选:非标准部署时指定完整 API 基础地址
|
|
42
|
-
# export ZENTAO_API_BASE_URL="https://your-zentao.example.com/custom/api.php/v1"
|
|
26
|
+
npx -y @cloudglab/zentao-cli@latest --help
|
|
27
|
+
npx -y @cloudglab/zentao-cli@latest --role qa getMyTasks --status all --limit 20
|
|
43
28
|
```
|
|
44
29
|
|
|
45
|
-
###
|
|
30
|
+
### 全局安装
|
|
46
31
|
|
|
47
32
|
```bash
|
|
48
|
-
|
|
49
|
-
zentao help
|
|
33
|
+
npm i -g @cloudglab/zentao-cli@latest
|
|
50
34
|
zentao --version
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
zentao list
|
|
54
|
-
zentao getMyTasks --status all --limit 20
|
|
55
|
-
|
|
56
|
-
# 按角色启动
|
|
57
|
-
zentao --role dev getMyTasks --status all
|
|
58
|
-
zentao --role qa getMyBugs --limit 50
|
|
59
|
-
zentao --role pm getProducts
|
|
60
|
-
|
|
61
|
-
# 也可以直接用 npx
|
|
62
|
-
npx -y @cloudglab/zentao-cli@latest --role qa getMyBugs --limit 50
|
|
35
|
+
zentao version
|
|
36
|
+
zentao help
|
|
63
37
|
```
|
|
64
38
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
### CLI
|
|
68
|
-
|
|
69
|
-
适合手动查数据、排查问题、批量执行脚本。
|
|
70
|
-
|
|
71
|
-
常见场景:
|
|
72
|
-
- 查我的任务 / Bug / 统计
|
|
73
|
-
- 查询需求、执行、计划、构建、发布
|
|
74
|
-
- 创建或更新任务、测试用例、测试单
|
|
75
|
-
- 做任务流转、Bug 处理、批量排期、回填工时、同步状态
|
|
76
|
-
- 通过 `Dev / QA / PM / Full` 角色入口提供差异化能力
|
|
77
|
-
|
|
78
|
-
### 智能体 / Skill 接入建议
|
|
79
|
-
|
|
80
|
-
推荐顺序:
|
|
81
|
-
|
|
82
|
-
1. 先检查本机有没有 `zentao`
|
|
83
|
-
2. 没有就安装:`npm i -g @cloudglab/zentao-cli@latest`
|
|
84
|
-
3. skill 内优先调用本地 `zentao`
|
|
85
|
-
4. 只在不能安装时,才退回 `npx -y @cloudglab/zentao-cli@latest`
|
|
86
|
-
|
|
87
|
-
常用检查命令:
|
|
39
|
+
### Skill 安装
|
|
88
40
|
|
|
89
41
|
```bash
|
|
90
|
-
|
|
91
|
-
zentao --version
|
|
42
|
+
npx skills add @cloudglab/zentao-cli -g
|
|
92
43
|
```
|
|
93
44
|
|
|
94
|
-
|
|
45
|
+
Skill / Agent 里推荐优先调用本地命令:
|
|
95
46
|
|
|
96
47
|
```bash
|
|
97
48
|
zentao --role qa getMyBugs --limit 50
|
|
98
|
-
zentao getProductBugs --productId 123 --status all --limit 100
|
|
99
49
|
```
|
|
100
50
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
适合把当前能力包装成可复用的 AI Skill,对外推广更友好。
|
|
104
|
-
|
|
105
|
-
相关文档:
|
|
106
|
-
- `skills/zentao-cli/reference/overview.md`
|
|
107
|
-
- `skills/zentao-cli/reference/install.md`
|
|
108
|
-
|
|
109
|
-
安装 skill 时,统一走:
|
|
51
|
+
本地没有安装时再退回:
|
|
110
52
|
|
|
111
53
|
```bash
|
|
112
|
-
npx
|
|
54
|
+
npx -y @cloudglab/zentao-cli@latest --role qa getMyBugs --limit 50
|
|
113
55
|
```
|
|
114
56
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
- 优先:`zentao`
|
|
118
|
-
- 或按角色:`zentao --role qa`
|
|
119
|
-
- 无本地安装时兜底:`npx -y @cloudglab/zentao-cli@latest`
|
|
120
|
-
|
|
121
|
-
适合场景:
|
|
122
|
-
- 给团队成员提供统一入口
|
|
123
|
-
- 给非开发用户提供更低门槛的禅道操作方式
|
|
124
|
-
- 做内部推广和标准化接入
|
|
125
|
-
|
|
126
|
-
## 当前 MVP 能力
|
|
127
|
-
|
|
128
|
-
- token 登录:仅在明确鉴权失败时才从明文密码回退到 MD5
|
|
129
|
-
- 登录错误分类:区分账号密码错误、token 接口不存在、网络失败、服务端异常
|
|
130
|
-
- 自动清洗 PHP warning + JSON 混合响应
|
|
131
|
-
- `getMyTasks`
|
|
132
|
-
- `getTaskDetail`
|
|
133
|
-
- `getBugDetail`
|
|
134
|
-
- `getStoryDetail`
|
|
135
|
-
- `getExecutionDetail`
|
|
136
|
-
- `getExecutionBugs`
|
|
137
|
-
- `getMyBugs`
|
|
138
|
-
- `getProductBugs`
|
|
139
|
-
- `getComments`
|
|
140
|
-
- 写操作 preview:`updateTask`、`finishTask`、`resolveBug`、`addComment`
|
|
141
|
-
- `getMyProfile`
|
|
142
|
-
- `getMyTaskStatistics`
|
|
143
|
-
- `getMyBugStatistics`
|
|
144
|
-
- `getStoryRelatedBugs`
|
|
145
|
-
- `getBugRelatedStory`
|
|
146
|
-
- `getDevelopmentContext`
|
|
147
|
-
- `getProducts` / `getProductDetail`
|
|
148
|
-
- `getProjects` / `getProjectDetail`
|
|
149
|
-
- `getProjectExecutions` / `getExecutionBuilds`
|
|
150
|
-
- `getProductStories`
|
|
151
|
-
- `getProductTestCases` / `getTestCaseDetail`
|
|
152
|
-
- `getTestTasks` / `getTestTaskDetail`
|
|
153
|
-
- `getPrograms` / `getProgramDetail`
|
|
154
|
-
- `getProductPlans` / `getPlanDetail`
|
|
155
|
-
- `getProjectBuilds` / `getBuildDetail`
|
|
156
|
-
- `getProjectReleases`
|
|
157
|
-
- `searchStories`
|
|
158
|
-
- `searchStoriesByProductName`
|
|
159
|
-
- `updateStory` / `changeStory`(默认 preview)
|
|
160
|
-
- `createTaskFromStory` / `createTaskFromBug`(默认 preview)
|
|
161
|
-
- `linkStoriesToPlan` / `unlinkStoriesFromPlan`(默认 preview)
|
|
162
|
-
- `linkBugsToPlan` / `unlinkBugsFromPlan`(默认 preview)
|
|
163
|
-
- `updateExecution` / `startExecution` / `closeExecution` / `suspendExecution` / `activateExecution` / `putoffExecution`(默认 preview)
|
|
164
|
-
- `createBuild` / `updateBuild`(默认 preview)
|
|
165
|
-
- `createTestCase` / `updateTestCase`(默认 preview)
|
|
166
|
-
- `createTestTask` / `updateTestTask`(默认 preview)
|
|
167
|
-
|
|
168
|
-
`updateExecution` 按禅道 18.5 REST v1 文档/源码需要保留/传入:
|
|
169
|
-
|
|
170
|
-
- `project`
|
|
171
|
-
- `name`
|
|
172
|
-
- `code`
|
|
173
|
-
- `begin`
|
|
174
|
-
- `end`
|
|
175
|
-
|
|
176
|
-
注意:`updateExecution` 在禅道 18.5 且后台启用代号时存在服务端源码问题:`api/v1/entries/execution.php` 中 `$fields .= 'code'` 缺少前置逗号,导致请求体里的 `code` 不会进入服务端 `$_POST`,服务端会误报 `『迭代代号』不能为空。`。客户端无法稳定绕过;工具仍保留,但调用时会直接返回该诊断错误,不做真实写入。
|
|
177
|
-
|
|
178
|
-
`createBuild` 当前按禅道 18.5 实机/参考包契约使用 `POST /projects/{project}/builds`,通常需要提供:
|
|
179
|
-
|
|
180
|
-
- `project`
|
|
181
|
-
- `execution`
|
|
182
|
-
- `product`
|
|
183
|
-
- `name`
|
|
184
|
-
- `builder`
|
|
185
|
-
|
|
186
|
-
补充说明:
|
|
187
|
-
|
|
188
|
-
- `createTaskFromStory` / `createTaskFromBug` 在当前实例上实机验证发现通常需要额外提供:
|
|
189
|
-
- `assignedTo`
|
|
190
|
-
- `estStarted`
|
|
191
|
-
- `deadline`
|
|
192
|
-
- `createTaskFromBug` 当前只保证:
|
|
193
|
-
- 基于 Bug 预填任务内容并尝试创建任务
|
|
194
|
-
- 不保证创建后自动建立 Bug 关联
|
|
195
|
-
- 角色工具过滤:`full` / `dev` / `qa` / `pm`
|
|
196
|
-
- 写操作保护 helper:默认禁用写操作,后续写工具必须配合 `ZENTAO_ENABLE_WRITE=true` 和 `confirm: true`;已知 18.5 不支持或服务端有缺陷的写工具会保留入口,但调用时直接返回明确诊断错误。
|
|
197
|
-
- Phase 3B 写工具(execution / build / testcase / testtask)默认同样返回 preview,真实执行仍需 `ZENTAO_ENABLE_WRITE=true` + `confirm=true`:
|
|
198
|
-
- execution:`updateExecution` / `startExecution` / `closeExecution` / `suspendExecution` / `activateExecution` / `putoffExecution`
|
|
199
|
-
- build:`createBuild` / `updateBuild`
|
|
200
|
-
- testcase:`createTestCase` / `updateTestCase`
|
|
201
|
-
- testtask:`createTestTask` / `updateTestTask`
|
|
202
|
-
- 角色权限:
|
|
203
|
-
- `full` 拥有 `execution-write` + `build-write` + `testcase-write` + `testtask-write`
|
|
204
|
-
- `dev` 拥有 `execution-write` + `build-write`
|
|
205
|
-
- `pm` 仅拥有 `execution-write`
|
|
206
|
-
- `qa` 拥有 `testcase-write` + `testtask-write`
|
|
207
|
-
- `createTestCase` / `updateTestCase` 当前按禅道 18.5 REST v1 契约:
|
|
208
|
-
- 创建路径:`POST /products/{productId}/testcases`
|
|
209
|
-
- 更新路径:`PUT /testcases/{testCaseId}`
|
|
210
|
-
- `steps` 数组每项形如 `{ desc, expect, type? }`,`type` 支持 `step` / `item` / `group`,默认 `step`
|
|
211
|
-
- `module` / `story` 允许传 `0` 表示无模块 / 无关联需求
|
|
212
|
-
- `project` / `execution` / `keywords` 不是禅道 18.5 REST v1 用例创建/更新 entry 接收字段,传入会被服务端忽略;18.5 v1 创建的是产品用例,不会直接绑定项目/执行。
|
|
213
|
-
- `createTestTask` 当前按禅道 18.5 REST v1 契约:
|
|
214
|
-
- 创建路径:`POST /projects/{project}/testtasks`
|
|
215
|
-
- 创建必填:`project` / `productID` / `name` / `build` / `begin` / `end`,`begin` / `end` 格式 `YYYY-MM-DD`
|
|
216
|
-
- 创建请求体实际使用 `product` 字段,工具入参保留 `productID` 并在 API 层映射
|
|
217
|
-
- `build` 兼容数字 ID 和字符串 ID
|
|
218
|
-
- `createTestTask` 当前实例真实写验证通过
|
|
219
|
-
- `updateTestTask`:禅道 18.5 v1 `api/v1/entries/testtask.php` 只有 `get/delete`,没有 `put` 更新入口。工具仍保留,但调用时会直接返回该诊断错误,不做真实写入。
|
|
220
|
-
- `linkBugsToPlan` 已按 18.5 源码修正为 `POST /productplans/{planId}/linkbugs`。
|
|
221
|
-
- `finishTask` 已按 18.5 源码改为 `POST /tasks/{taskId}/finish`,需要 `currentConsumed` / `realStarted` / `finishedDate`。
|
|
222
|
-
- `addComment`:禅道 18.5 v1 没有 `comment/comments` entry,当前只支持 `getComments` 从对象详情 actions 回退读取;`addComment` 工具仍保留,但调用时会直接返回该诊断错误。
|
|
223
|
-
- token 失效后自动重试一次
|
|
224
|
-
- 可选 `ZENTAO_API_BASE_URL`:用于非标准 `/zentao/api.php/v1` 部署
|
|
225
|
-
|
|
226
|
-
## 配置
|
|
227
|
-
|
|
228
|
-
说明:
|
|
229
|
-
|
|
230
|
-
- `getMyBugs` 当前默认语义是“跨所有产品指派给我的 Bug”;传 `productId` 时收窄到指定产品。
|
|
231
|
-
- `getMyBugStatistics` 默认统计跨所有产品指派给我的 Bug;传 `productId` 时收窄到指定产品。
|
|
232
|
-
- `getComments` 在禅道 18.5 上会 fallback 到对象详情里的 `actions`,返回结果会明确标注 `source: "actions-fallback"`。
|
|
233
|
-
- `updateTask` / `finishTask` 不会默认修改 `assignedTo`,只有显式传入才会更新指派人。
|
|
234
|
-
|
|
235
|
-
支持环境变量:
|
|
57
|
+
## 环境变量
|
|
236
58
|
|
|
237
59
|
```bash
|
|
238
|
-
export ZENTAO_URL="https://zentao.
|
|
60
|
+
export ZENTAO_URL="https://your-zentao.example.com"
|
|
239
61
|
export ZENTAO_USERNAME="your-account"
|
|
240
62
|
export ZENTAO_PASSWORD="your-password"
|
|
241
63
|
export ZENTAO_API_VERSION="v1"
|
|
242
|
-
# 可选:非标准部署时直接指定完整 API 基础地址
|
|
243
|
-
# export ZENTAO_API_BASE_URL="https://zentao.cloudglab.cn/custom/api.php/v1"
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
注意:`ZENTAO_URL` 传根域名即可,不要带 `/zentao`。
|
|
247
|
-
|
|
248
|
-
`initZentao` 现在默认只校验并在当前进程内生效,不会自动把密码写入 `~/.zentao/config.json`。
|
|
249
|
-
只有显式传 `save: true` 才会落盘。
|
|
250
|
-
|
|
251
|
-
## 开发
|
|
252
64
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
pnpm typecheck
|
|
256
|
-
pnpm build
|
|
65
|
+
# 可选:非标准部署时指定完整 API 基础地址
|
|
66
|
+
# export ZENTAO_API_BASE_URL="https://your-zentao.example.com/custom/api.php/v1"
|
|
257
67
|
```
|
|
258
68
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
69
|
+
`ZENTAO_URL` 传根域名即可,不要带 `/zentao`。
|
|
70
|
+
|
|
71
|
+
## 可以这样描述场景
|
|
72
|
+
|
|
73
|
+
下面这些话可以交给 AI Skill / Agent 转成对应的 zentao-cli 命令。
|
|
74
|
+
|
|
75
|
+
### 我的任务和 Bug
|
|
76
|
+
|
|
77
|
+
- 我今天的 Bug 有多少?
|
|
78
|
+
- 我今天的任务有多少?
|
|
79
|
+
- 获取我的所有任务。
|
|
80
|
+
- 看我等待中的任务。
|
|
81
|
+
- 看我进行中的任务。
|
|
82
|
+
- 看我已取消的任务。
|
|
83
|
+
- 分页看我的任务。
|
|
84
|
+
- 看我当前指派的 Bug。
|
|
85
|
+
- 统计我当前 Bug 的状态分布。
|
|
86
|
+
- 统计我当前任务的状态分布。
|
|
87
|
+
|
|
88
|
+
### 一段时间内我做了什么
|
|
89
|
+
|
|
90
|
+
- 分析上周我都干了什么。
|
|
91
|
+
- 查一下我本周解决了多少个 Bug。
|
|
92
|
+
- 查一下 lixm1 上周解决了多少个 Bug。
|
|
93
|
+
- 看 lixm1 最近 3 天做了什么。
|
|
94
|
+
- 看我 2026-05-28 做了什么。
|
|
95
|
+
- 拉一下 2026-05-25 到 2026-05-29 的工作清单。
|
|
96
|
+
- 汇总我上周的评论、指派、流转和解决记录。
|
|
97
|
+
- 按天列出我最近几天处理过的 Bug 和任务。
|
|
98
|
+
|
|
99
|
+
### 执行 / 迭代统计
|
|
100
|
+
|
|
101
|
+
- 这个迭代有多少个 Bug?
|
|
102
|
+
- 这个迭代今天解决了多少个问题?
|
|
103
|
+
- 分析 execution 2067 的每日迭代执行统计。
|
|
104
|
+
- 生成 1.2.3 迭代日报。
|
|
105
|
+
- 统计某个迭代今天 Bug 和任务情况。
|
|
106
|
+
- 看这个执行的 Bug、任务、参与人员和风险明细。
|
|
107
|
+
- 统计这个迭代的延期 Bug、reopen Bug 和未解决 Bug。
|
|
108
|
+
- 看这个迭代里测试未及时关闭的问题。
|
|
109
|
+
- 看这个迭代里开发今日未及时解决的问题。
|
|
110
|
+
- 看这个迭代的任务总数、完成数、逾期未完成数和工时消耗。
|
|
111
|
+
- 看这个迭代每个人负责了多少 Bug 和任务。
|
|
112
|
+
|
|
113
|
+
### 禅道页面 URL 查询
|
|
114
|
+
|
|
115
|
+
- 列出 `execution-bug-2130.html` 里面的 Bug。
|
|
116
|
+
- 看 `execution-build-2130.html` 这个执行有哪些版本。
|
|
117
|
+
- 看 `execution-dynamic-2130.html` 这个执行最近的动态。
|
|
118
|
+
- 从禅道 Bug 列表页里提取 execution ID 并列出 Bug。
|
|
119
|
+
- 从禅道版本页里提取 execution ID 并列出构建。
|
|
120
|
+
|
|
121
|
+
### Bug 和版本
|
|
122
|
+
|
|
123
|
+
- 看某个执行下有哪些版本。
|
|
124
|
+
- 解决 Bug 时关联到某个版本。
|
|
125
|
+
- 查某个执行下已解决但还没关闭的 Bug。
|
|
126
|
+
- 查某个执行下延期处理的 Bug。
|
|
127
|
+
- 查某个执行下 reopen 过的 Bug。
|
|
128
|
+
|
|
129
|
+
### 需求、产品、项目和测试
|
|
130
|
+
|
|
131
|
+
- 查某个产品下的需求。
|
|
132
|
+
- 查某个产品下的 Bug。
|
|
133
|
+
- 查某个项目下的执行列表。
|
|
134
|
+
- 查某个执行下的构建列表。
|
|
135
|
+
- 查某个产品下的测试用例。
|
|
136
|
+
- 查某个测试单详情。
|
|
137
|
+
- 搜索包含某个关键词的需求。
|
|
138
|
+
|
|
139
|
+
## 常用命令示例
|
|
282
140
|
|
|
283
141
|
```bash
|
|
284
|
-
|
|
285
|
-
|
|
142
|
+
# 我的任务
|
|
143
|
+
zentao --role qa getMyTasks --status all --limit 100
|
|
144
|
+
zentao --role qa getMyTasks --status wait --limit 50
|
|
145
|
+
|
|
146
|
+
# 我的阶段性工作清单
|
|
147
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --week last
|
|
148
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --dateRange 最近3天
|
|
149
|
+
zentao --role qa getMyWeeklyActivity --account lixm1 --dateRange 2026-05-25到2026-05-29
|
|
150
|
+
|
|
151
|
+
# 执行 Bug / 构建 / 动态
|
|
152
|
+
zentao --role qa getExecutionBugs --executionId 2130 --limit 100
|
|
153
|
+
zentao --role qa getExecutionBuilds --executionId 2130
|
|
154
|
+
zentao --role qa getExecutionDynamic --executionId 2130
|
|
155
|
+
|
|
156
|
+
# 每日迭代执行统计
|
|
157
|
+
zentao --role qa getExecutionDailyBugStats --executionId 2067 --iterationName 1.2.3迭代
|
|
158
|
+
zentao --role qa getExecutionDailyBugStats --executionId 2067 --iterationName 1.2.3迭代 --date 2026-06-06
|
|
286
159
|
```
|
|
287
160
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
- tag `v0.1.0` 是否与 `package.json` 中的 `0.1.0` 一致
|
|
161
|
+
## 写操作保护
|
|
291
162
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
### 推荐顺序
|
|
163
|
+
默认不写入线上。真实写操作需要同时满足:
|
|
295
164
|
|
|
296
165
|
```bash
|
|
297
|
-
|
|
298
|
-
# 2. 提交代码
|
|
299
|
-
# 3. 推送分支
|
|
300
|
-
# 4. 打 tag
|
|
301
|
-
git tag v0.1.0
|
|
302
|
-
git push origin main
|
|
303
|
-
git push origin v0.1.0
|
|
166
|
+
export ZENTAO_ENABLE_WRITE=true
|
|
304
167
|
```
|
|
305
168
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
下面这些仍需要你首次手动完成一次:
|
|
169
|
+
并且命令参数里显式传入 `confirm=true`。
|
|
309
170
|
|
|
310
|
-
|
|
311
|
-
- 首次 commit
|
|
312
|
-
- 创建 GitHub 仓库并 push 上去
|
|
313
|
-
- 在 npm 包侧完成 trusted publisher 绑定
|
|
314
|
-
|
|
315
|
-
## 启动
|
|
171
|
+
## 更多命令
|
|
316
172
|
|
|
317
173
|
```bash
|
|
318
|
-
|
|
174
|
+
zentao help
|
|
175
|
+
zentao list
|
|
176
|
+
zentao --role qa list
|
|
319
177
|
```
|
package/dist/api/execution.d.ts
CHANGED
|
@@ -26,10 +26,15 @@ export interface PutoffExecutionInput {
|
|
|
26
26
|
days: number;
|
|
27
27
|
comment?: string;
|
|
28
28
|
}
|
|
29
|
+
export interface ExecutionDailyBugStatsInput {
|
|
30
|
+
iterationName?: string;
|
|
31
|
+
date?: string;
|
|
32
|
+
}
|
|
29
33
|
export declare class ExecutionApi {
|
|
30
34
|
private readonly http;
|
|
31
35
|
constructor(http: ZentaoHttpClient);
|
|
32
36
|
getExecutionDetail(executionId: number): Promise<ZentaoExecution>;
|
|
37
|
+
getExecutionDynamic(executionId: number): Promise<unknown>;
|
|
33
38
|
getProjectExecutions(projectId: number): Promise<unknown>;
|
|
34
39
|
getExecutionBuilds(executionId: number): Promise<unknown>;
|
|
35
40
|
getExecutionBugs(executionId: number, params?: {
|
|
@@ -37,10 +42,38 @@ export declare class ExecutionApi {
|
|
|
37
42
|
limit?: number;
|
|
38
43
|
status?: string;
|
|
39
44
|
}): Promise<unknown>;
|
|
45
|
+
getExecutionDailyBugStats(executionId: number, input?: ExecutionDailyBugStatsInput): Promise<unknown>;
|
|
40
46
|
updateExecution(executionId: number, update: UpdateExecutionInput): Promise<unknown>;
|
|
41
47
|
startExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
42
48
|
closeExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
43
49
|
suspendExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
44
50
|
activateExecution(executionId: number, payload?: ExecutionActionInput): Promise<unknown>;
|
|
45
51
|
putoffExecution(executionId: number, payload: PutoffExecutionInput): Promise<unknown>;
|
|
52
|
+
private getAllExecutionBugs;
|
|
53
|
+
private getAllExecutionTasks;
|
|
54
|
+
private buildParticipantBugStats;
|
|
55
|
+
private getBugOwner;
|
|
56
|
+
private isDelayedBug;
|
|
57
|
+
private resolveUserNames;
|
|
58
|
+
private buildDailyBugNotes;
|
|
59
|
+
private buildSeveritySummary;
|
|
60
|
+
private buildTaskSummary;
|
|
61
|
+
private buildTaskParticipantStats;
|
|
62
|
+
private buildTaskDetails;
|
|
63
|
+
private getTaskOwner;
|
|
64
|
+
private isOverdueUnfinishedTask;
|
|
65
|
+
private buildBugDetails;
|
|
66
|
+
private formatDailyBugStatsReport;
|
|
67
|
+
private formatBugDetailSection;
|
|
68
|
+
private formatTaskDetailSection;
|
|
69
|
+
private formatCountWithRate;
|
|
70
|
+
private formatCountWithRateOrZero;
|
|
71
|
+
private percent;
|
|
72
|
+
private resolveStatsDate;
|
|
73
|
+
private parseDate;
|
|
74
|
+
private toDateOnly;
|
|
75
|
+
private isOnOrBefore;
|
|
76
|
+
private addDays;
|
|
77
|
+
private formatDate;
|
|
78
|
+
private toString;
|
|
46
79
|
}
|