@elvis1513/auto-coding-skill 1.0.1 → 1.0.3
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/README.md +12 -20
- package/cli/assets/skill/SKILL.md +5 -7
- package/cli/assets/skill/data/templates/ENGINEERING.md +16 -25
- package/cli/assets/skill/data/templates/docs/reviews/_TEMPLATE-REVIEW.md +4 -5
- package/cli/assets/skill/data/templates/docs/tasks/summaries/_TEMPLATE-TASK-SUMMARY.md +1 -1
- package/cli/assets/skill/scripts/ap.py +31 -52
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
|
|
|
35
35
|
- Synced reusable workflow improvements from a production project back into this skill.
|
|
36
36
|
- Moved repo-side helper entrypoint to `docs/tools/autopipeline`.
|
|
37
37
|
- Tightened regression matrix rules: rows start as `TODO`, and `PASS` requires real execution evidence.
|
|
38
|
-
- Added Jenkins API verification flow with credentials sourced from `docs/ENGINEERING.md
|
|
38
|
+
- Added Jenkins API verification flow with credentials sourced from `docs/ENGINEERING.md`.
|
|
39
39
|
|
|
40
40
|
## Optimized Standard Flow
|
|
41
41
|
|
|
@@ -53,12 +53,11 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
|
|
|
53
53
|
3. 开发实现
|
|
54
54
|
- 只修改本次任务必要文件,不做无关重构。
|
|
55
55
|
4. 本地轻量校验
|
|
56
|
-
-
|
|
57
|
-
-
|
|
58
|
-
- lint / typecheck
|
|
59
|
-
- API 文档检查
|
|
60
|
-
- Jenkinsfile / 脚本语法检查
|
|
56
|
+
- 优先执行一个项目自定义快速门禁命令
|
|
57
|
+
- 若未配置,再执行 quick test / test / build 中最先配置的一项
|
|
61
58
|
- `git diff --check`
|
|
59
|
+
- API 文档检查
|
|
60
|
+
- Jenkins 配置检查
|
|
62
61
|
5. 立即提交推送
|
|
63
62
|
- 本地轻量校验通过后,commit + push,触发 Jenkins。
|
|
64
63
|
6. Jenkins 验证
|
|
@@ -75,7 +74,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
|
|
|
75
74
|
默认不做:
|
|
76
75
|
- 本地 Docker Compose 启动
|
|
77
76
|
- 本地 Docker build
|
|
78
|
-
- 本地完整
|
|
77
|
+
- 本地完整 regression
|
|
79
78
|
- 每个小改动强制 `check-matrix`
|
|
80
79
|
- 每个小改动强制生成 summary
|
|
81
80
|
- 未真实执行就要求 regression matrix 全 `PASS`
|
|
@@ -83,7 +82,7 @@ npm install -g git+https://github.com/elvis1513/auto-coding-skill.git
|
|
|
83
82
|
|
|
84
83
|
按需保留:
|
|
85
84
|
- `runtime-up` / `runtime-down`
|
|
86
|
-
- 本地 health
|
|
85
|
+
- 本地 health
|
|
87
86
|
- `check-matrix`
|
|
88
87
|
- `gen-summary`
|
|
89
88
|
- deployment runbook / deployment record
|
|
@@ -120,9 +119,7 @@ It must be committed to Git. Do not add it to `.gitignore`.
|
|
|
120
119
|
|
|
121
120
|
默认必填:
|
|
122
121
|
- `project.name`
|
|
123
|
-
- `commands.build`
|
|
124
|
-
- `commands.quick_test` 或 `commands.test`
|
|
125
|
-
- `commands.lint` 或 `commands.typecheck`
|
|
122
|
+
- `commands.light_gate` 或 `commands.quick_test` 或 `commands.test` 或 `commands.build`
|
|
126
123
|
- `target_env.name`
|
|
127
124
|
- `target_env.frontend_base_url`
|
|
128
125
|
- `target_env.frontend_username`
|
|
@@ -130,6 +127,8 @@ It must be committed to Git. Do not add it to `.gitignore`.
|
|
|
130
127
|
- `target_env.backend_base_url`
|
|
131
128
|
- `target_env.backend_username`
|
|
132
129
|
- `target_env.backend_password`
|
|
130
|
+
- `target_env.backend_root_username`
|
|
131
|
+
- `target_env.backend_root_password`
|
|
133
132
|
- `target_env.health_base_url`
|
|
134
133
|
- `target_env.health_path`
|
|
135
134
|
- `jenkins.base_url`
|
|
@@ -200,6 +199,7 @@ It must be committed to Git. Do not add it to `.gitignore`.
|
|
|
200
199
|
- How to record:
|
|
201
200
|
- Fill YAML frontmatter once.
|
|
202
201
|
- Keep target env front/backend usernames and passwords, Jenkins UI/API usernames and passwords, commands, docs paths here only.
|
|
202
|
+
- Target environment also includes backend server root username/password.
|
|
203
203
|
- This file is expected to be committed to Git and maintained in plaintext for this workflow.
|
|
204
204
|
- Remaining environment keys are all mandatory; blank values, TODO-like placeholders, and incorrect URL/path formats are treated as blocking errors by `doctor`.
|
|
205
205
|
- Do not duplicate config elsewhere.
|
|
@@ -291,12 +291,6 @@ python3 docs/tools/autopipeline/ap.py commit-push <TASK_ID> \
|
|
|
291
291
|
Available on-demand commands:
|
|
292
292
|
|
|
293
293
|
```bash
|
|
294
|
-
python3 docs/tools/autopipeline/ap.py run build
|
|
295
|
-
python3 docs/tools/autopipeline/ap.py run test
|
|
296
|
-
python3 docs/tools/autopipeline/ap.py run quick_test
|
|
297
|
-
python3 docs/tools/autopipeline/ap.py run lint
|
|
298
|
-
python3 docs/tools/autopipeline/ap.py run typecheck
|
|
299
|
-
python3 docs/tools/autopipeline/ap.py run script_syntax
|
|
300
294
|
python3 docs/tools/autopipeline/ap.py doctor
|
|
301
295
|
python3 docs/tools/autopipeline/ap.py verify-api-docs
|
|
302
296
|
python3 docs/tools/autopipeline/ap.py verify-jenkins
|
|
@@ -306,8 +300,6 @@ python3 docs/tools/autopipeline/ap.py verify-jenkins-build --job-url <job-url> -
|
|
|
306
300
|
python3 docs/tools/autopipeline/ap.py verify-jenkins-build --multibranch-root-job <root-job> --branch-name <branch> --build-number <number>
|
|
307
301
|
python3 docs/tools/autopipeline/ap.py runtime-up
|
|
308
302
|
python3 docs/tools/autopipeline/ap.py wait-health --scope runtime
|
|
309
|
-
python3 docs/tools/autopipeline/ap.py run smoke
|
|
310
|
-
python3 docs/tools/autopipeline/ap.py run regression
|
|
311
303
|
python3 docs/tools/autopipeline/ap.py runtime-down
|
|
312
304
|
python3 docs/tools/autopipeline/ap.py check-matrix
|
|
313
305
|
python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
|
|
@@ -332,7 +324,7 @@ python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
|
|
|
332
324
|
- `doctor`
|
|
333
325
|
- Checks whether the default lightweight workflow is actually configured instead of silently skipping gates.
|
|
334
326
|
- `light-gate`
|
|
335
|
-
- Now
|
|
327
|
+
- Now prefers one curated fast gate command instead of serially running every expensive check.
|
|
336
328
|
- `verify-target`
|
|
337
329
|
- Performs real target-environment verification beyond health checks when you provide key backend/frontend paths.
|
|
338
330
|
- `commit-push --record-closure`
|
|
@@ -77,9 +77,7 @@ Do not hide `docs/ENGINEERING.md` in `.gitignore`.
|
|
|
77
77
|
|
|
78
78
|
Minimum required config for the default flow:
|
|
79
79
|
- `project.name`
|
|
80
|
-
- `commands.build`
|
|
81
|
-
- `commands.quick_test` or `commands.test`
|
|
82
|
-
- `commands.lint` or `commands.typecheck`
|
|
80
|
+
- `commands.light_gate` or `commands.quick_test` or `commands.test` or `commands.build`
|
|
83
81
|
- `target_env.name`
|
|
84
82
|
- `target_env.frontend_base_url`
|
|
85
83
|
- `target_env.frontend_username`
|
|
@@ -87,6 +85,8 @@ Minimum required config for the default flow:
|
|
|
87
85
|
- `target_env.backend_base_url`
|
|
88
86
|
- `target_env.backend_username`
|
|
89
87
|
- `target_env.backend_password`
|
|
88
|
+
- `target_env.backend_root_username`
|
|
89
|
+
- `target_env.backend_root_password`
|
|
90
90
|
- `target_env.health_base_url`
|
|
91
91
|
- `target_env.health_path`
|
|
92
92
|
- `jenkins.base_url`
|
|
@@ -138,8 +138,6 @@ On-demand commands:
|
|
|
138
138
|
```bash
|
|
139
139
|
python3 docs/tools/autopipeline/ap.py runtime-up
|
|
140
140
|
python3 docs/tools/autopipeline/ap.py wait-health --scope runtime
|
|
141
|
-
python3 docs/tools/autopipeline/ap.py run smoke
|
|
142
|
-
python3 docs/tools/autopipeline/ap.py run regression
|
|
143
141
|
python3 docs/tools/autopipeline/ap.py runtime-down
|
|
144
142
|
python3 docs/tools/autopipeline/ap.py check-matrix
|
|
145
143
|
python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
|
|
@@ -147,9 +145,9 @@ python3 docs/tools/autopipeline/ap.py gen-summary <TASK_ID>
|
|
|
147
145
|
|
|
148
146
|
## Quality policy
|
|
149
147
|
|
|
150
|
-
- Default local gate is lightweight
|
|
148
|
+
- Default local gate is lightweight and time-bounded: prefer one curated project command via `commands.light_gate`, then run only diff/API/Jenkins checks.
|
|
151
149
|
- `doctor` should be used early to catch missing or invalid config before the first implementation loop.
|
|
152
|
-
- `light-gate` now fails if
|
|
150
|
+
- `light-gate` now fails if no usable fast gate command is configured.
|
|
153
151
|
- `doctor`, `light-gate`, and `commit-push` all fail when required environment fields are missing, placeholder-like, or syntactically invalid.
|
|
154
152
|
- Do not require local Docker Compose or full local regression for every small change.
|
|
155
153
|
- Jenkins and target environment verification are more valuable than repeated local simulation of deploy-only problems.
|
|
@@ -10,26 +10,17 @@ project:
|
|
|
10
10
|
jenkinsfile: "Jenkinsfile"
|
|
11
11
|
|
|
12
12
|
commands:
|
|
13
|
+
light_gate: ""
|
|
13
14
|
build: ""
|
|
14
15
|
test: ""
|
|
15
16
|
quick_test: ""
|
|
16
17
|
lint: ""
|
|
17
18
|
typecheck: ""
|
|
18
19
|
format: ""
|
|
19
|
-
script_syntax: ""
|
|
20
|
-
diff_check: ""
|
|
21
|
-
docker_build: ""
|
|
22
|
-
compose_up: ""
|
|
23
|
-
compose_down: ""
|
|
24
|
-
smoke: ""
|
|
25
|
-
regression: ""
|
|
26
20
|
|
|
27
21
|
runtime:
|
|
28
22
|
docker_compose_file: ""
|
|
29
23
|
docker_service: ""
|
|
30
|
-
container_name: ""
|
|
31
|
-
image: ""
|
|
32
|
-
app_port: ""
|
|
33
24
|
health_base_url: ""
|
|
34
25
|
health_path: ""
|
|
35
26
|
env_file: ""
|
|
@@ -43,6 +34,8 @@ target_env:
|
|
|
43
34
|
backend_base_url: ""
|
|
44
35
|
backend_username: ""
|
|
45
36
|
backend_password: ""
|
|
37
|
+
backend_root_username: ""
|
|
38
|
+
backend_root_password: ""
|
|
46
39
|
health_base_url: ""
|
|
47
40
|
health_path: ""
|
|
48
41
|
|
|
@@ -79,7 +72,7 @@ docs:
|
|
|
79
72
|
默认原则:
|
|
80
73
|
- 默认不要求本地 Docker Compose 启动。
|
|
81
74
|
- 默认不要求本地 Docker build。
|
|
82
|
-
- 默认不要求本地完整
|
|
75
|
+
- 默认不要求本地完整 regression。
|
|
83
76
|
- 默认不要求每个小改动生成长 summary。
|
|
84
77
|
- 默认不要求 regression matrix 全 PASS。
|
|
85
78
|
- 默认不要求 deployment record。
|
|
@@ -97,21 +90,20 @@ docs:
|
|
|
97
90
|
## 0. 配置填写(必须)
|
|
98
91
|
|
|
99
92
|
先填写 `docs/ENGINEERING.md` frontmatter 中的所有空值。重点包括:
|
|
100
|
-
- `commands
|
|
93
|
+
- `commands.light_gate`:推荐配置一个项目级快速门禁命令,作为默认本地校验入口
|
|
101
94
|
- `target_env.*`:目标环境前端 / 后端地址、用户名、密码,必须全部填写且真实可用
|
|
102
95
|
- `jenkins.*`:Jenkins UI/API 用户名、密码、Job、分支、镜像、部署环境,必须全部填写且真实可用
|
|
103
96
|
|
|
104
97
|
字段说明:
|
|
105
98
|
- `target_env.backend_username` / `target_env.backend_password`:目标环境后台账号
|
|
99
|
+
- `target_env.backend_root_username` / `target_env.backend_root_password`:目标环境后台服务器 root 账号
|
|
106
100
|
- `target_env.frontend_username` / `target_env.frontend_password`:目标环境前端登录账号
|
|
107
101
|
- `jenkins.ui_username` / `jenkins.ui_password`:Jenkins 页面登录账号
|
|
108
102
|
- `jenkins.api_user` / `jenkins.api_password`:Jenkins API 用户名 / 密码
|
|
109
103
|
|
|
110
104
|
默认必填:
|
|
111
105
|
- `project.name`
|
|
112
|
-
- `commands.build`
|
|
113
|
-
- `commands.quick_test` 或 `commands.test`
|
|
114
|
-
- `commands.lint` 或 `commands.typecheck`
|
|
106
|
+
- `commands.light_gate` 或 `commands.quick_test` 或 `commands.test` 或 `commands.build`
|
|
115
107
|
- `target_env.name`
|
|
116
108
|
- `target_env.frontend_base_url`
|
|
117
109
|
- `target_env.frontend_username`
|
|
@@ -119,6 +111,8 @@ docs:
|
|
|
119
111
|
- `target_env.backend_base_url`
|
|
120
112
|
- `target_env.backend_username`
|
|
121
113
|
- `target_env.backend_password`
|
|
114
|
+
- `target_env.backend_root_username`
|
|
115
|
+
- `target_env.backend_root_password`
|
|
122
116
|
- `target_env.health_base_url`
|
|
123
117
|
- `target_env.health_path`
|
|
124
118
|
- `jenkins.ui_username`
|
|
@@ -133,7 +127,7 @@ docs:
|
|
|
133
127
|
|
|
134
128
|
按需填写:
|
|
135
129
|
- `runtime.*`:仅在本地运行诊断时使用
|
|
136
|
-
- `commands.
|
|
130
|
+
- `commands.build` / `commands.test` / `commands.quick_test` / `commands.lint` / `commands.typecheck` / `commands.format`:按项目实际情况保留
|
|
137
131
|
|
|
138
132
|
---
|
|
139
133
|
|
|
@@ -197,13 +191,12 @@ docs:
|
|
|
197
191
|
只修改本次任务必要文件,不做无关重构。
|
|
198
192
|
|
|
199
193
|
4. 本地轻量校验
|
|
200
|
-
|
|
201
|
-
-
|
|
202
|
-
-
|
|
203
|
-
- lint / typecheck
|
|
204
|
-
- API 文档检查
|
|
205
|
-
- Jenkinsfile / 脚本语法检查
|
|
194
|
+
默认只跑最少必要检查:
|
|
195
|
+
- 优先执行 `commands.light_gate`
|
|
196
|
+
- 若未配置,则执行 `quick_test` / `test` / `build` 中最先配置的一项
|
|
206
197
|
- `git diff --check`
|
|
198
|
+
- API 文档检查
|
|
199
|
+
- Jenkins 配置检查
|
|
207
200
|
|
|
208
201
|
5. 立即提交推送
|
|
209
202
|
轻量校验通过后,commit + push,触发 Jenkins。
|
|
@@ -250,8 +243,6 @@ docs:
|
|
|
250
243
|
- `runtime-up`
|
|
251
244
|
- `runtime-down`
|
|
252
245
|
- 本地 health check
|
|
253
|
-
- 本地 `smoke`
|
|
254
|
-
- 本地 `regression`
|
|
255
246
|
- `check-matrix`
|
|
256
247
|
- `gen-summary`
|
|
257
248
|
|
|
@@ -271,7 +262,7 @@ docs:
|
|
|
271
262
|
|
|
272
263
|
说明:
|
|
273
264
|
- `doctor`:检查默认流程必填项和常见配置错误。
|
|
274
|
-
- `light-gate
|
|
265
|
+
- `light-gate`:默认轻量门禁,优先执行项目自定义快速门禁命令。
|
|
275
266
|
- `verify-target`:目标环境健康检查 + 按需关键 API / 页面验证。
|
|
276
267
|
- `record-closure`:默认轻量闭环记录。
|
|
277
268
|
- `check-matrix`、`gen-summary`、`runtime-up/down`:保留为按需工具。
|
|
@@ -3,18 +3,17 @@
|
|
|
3
3
|
> 仅在任务需要独立 review 记录时使用;不是每个小改动的默认强制文档。
|
|
4
4
|
|
|
5
5
|
## 1. 静态分析结果
|
|
6
|
-
- Command:
|
|
6
|
+
- Command:light_gate / diff_check / verify_api_docs / verify_jenkins
|
|
7
7
|
- Summary:
|
|
8
8
|
- Issues:
|
|
9
9
|
|
|
10
10
|
## 2. 本地轻量校验
|
|
11
|
-
- build:
|
|
12
|
-
- test or quick_test:
|
|
11
|
+
- light_gate or quick_test/test/build:
|
|
13
12
|
- api docs:
|
|
14
|
-
-
|
|
13
|
+
- jenkins:
|
|
15
14
|
|
|
16
15
|
## 3. 按需本地运行验证(如果有)
|
|
17
|
-
- runtime-up / health
|
|
16
|
+
- runtime-up / health:
|
|
18
17
|
|
|
19
18
|
## 4. Jenkins 与目标环境
|
|
20
19
|
- Jenkins readiness:
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
- 兼容性影响:
|
|
20
20
|
|
|
21
21
|
## 3. 质量证据
|
|
22
|
-
- 本地轻量校验:
|
|
22
|
+
- 本地轻量校验:light_gate or quick_test/test/build / api docs / jenkins / diff-check
|
|
23
23
|
- Jenkins Build:
|
|
24
24
|
- 目标环境验证:
|
|
25
25
|
- 闭环记录:`docs/tasks/closure-log.md`
|
|
@@ -317,12 +317,12 @@ def _resolve_jenkins_job_candidates(
|
|
|
317
317
|
) -> List[str]:
|
|
318
318
|
jenkins_cfg = (cfg.get("jenkins") or {})
|
|
319
319
|
effective_branch = str(branch_name or "").strip()
|
|
320
|
-
|
|
320
|
+
effective_root = str(multibranch_root_job or "").strip()
|
|
321
|
+
if not effective_branch and effective_root:
|
|
321
322
|
inferred_branch = _resolve_git_branch_name(repo, git_ref or "HEAD")
|
|
322
323
|
if inferred_branch:
|
|
323
324
|
effective_branch = inferred_branch
|
|
324
325
|
|
|
325
|
-
effective_root = str(multibranch_root_job or "").strip()
|
|
326
326
|
explicit_url = str(job_url or "").strip()
|
|
327
327
|
explicit_name = str(job_name or "").strip()
|
|
328
328
|
configured_url = str(jenkins_cfg.get("job_url") or "").strip()
|
|
@@ -423,6 +423,8 @@ def cmd_gen_summary(args: argparse.Namespace) -> None:
|
|
|
423
423
|
staged = run(["git", "diff", "--cached", "--name-only"], cwd=repo, check=False).stdout.strip()
|
|
424
424
|
unstaged = run(["git", "diff", "--name-only"], cwd=repo, check=False).stdout.strip()
|
|
425
425
|
status = run(["git", "status", "--porcelain=v1"], cwd=repo, check=False).stdout.strip()
|
|
426
|
+
staged_block = "- " + staged.replace("\n", "\n- ") if staged else "- (none)"
|
|
427
|
+
unstaged_block = "- " + unstaged.replace("\n", "\n- ") if unstaged else "- (none)"
|
|
426
428
|
|
|
427
429
|
content = f"""# Task Summary — {task_id} — {title}
|
|
428
430
|
|
|
@@ -442,9 +444,9 @@ def cmd_gen_summary(args: argparse.Namespace) -> None:
|
|
|
442
444
|
## 2. 变更概览
|
|
443
445
|
### Git change snapshot
|
|
444
446
|
- Staged files:
|
|
445
|
-
{
|
|
447
|
+
{staged_block}
|
|
446
448
|
- Unstaged files:
|
|
447
|
-
{
|
|
449
|
+
{unstaged_block}
|
|
448
450
|
- Status:
|
|
449
451
|
```text
|
|
450
452
|
{status}
|
|
@@ -454,7 +456,7 @@ def cmd_gen_summary(args: argparse.Namespace) -> None:
|
|
|
454
456
|
- 变更记录位置:`{api_change_log}`
|
|
455
457
|
|
|
456
458
|
## 4. 质量证据
|
|
457
|
-
- 本地轻量校验:
|
|
459
|
+
- 本地轻量校验:light_gate or quick_test/test/build / api docs / jenkins / diff-check — TODO
|
|
458
460
|
- Jenkins Build:TODO
|
|
459
461
|
- 目标环境验证:TODO
|
|
460
462
|
- 闭环记录:TODO
|
|
@@ -572,14 +574,8 @@ def _require_explicit_field(missing: List[str], field: str, value: object) -> No
|
|
|
572
574
|
|
|
573
575
|
|
|
574
576
|
def _run_git_diff_check(repo: Path, cfg: dict) -> None:
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
if configured:
|
|
578
|
-
print(f"[diff-check] {configured}")
|
|
579
|
-
run_shell(configured, cwd=repo)
|
|
580
|
-
else:
|
|
581
|
-
print("[diff-check] git diff --check")
|
|
582
|
-
run(["git", "diff", "--check"], cwd=repo)
|
|
577
|
+
print("[diff-check] git diff --check")
|
|
578
|
+
run(["git", "diff", "--check"], cwd=repo)
|
|
583
579
|
print("[diff-check] OK")
|
|
584
580
|
|
|
585
581
|
|
|
@@ -613,38 +609,20 @@ def cmd_light_gate(args: argparse.Namespace) -> None:
|
|
|
613
609
|
executed: List[str] = []
|
|
614
610
|
missing: List[str] = []
|
|
615
611
|
|
|
616
|
-
if
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
executed.append("build")
|
|
621
|
-
|
|
622
|
-
if str(commands.get("quick_test") or "").strip():
|
|
612
|
+
if str(commands.get("light_gate") or "").strip():
|
|
613
|
+
_run_configured_command(repo, cfg, "light_gate")
|
|
614
|
+
executed.append("light_gate")
|
|
615
|
+
elif str(commands.get("quick_test") or "").strip():
|
|
623
616
|
_run_configured_command(repo, cfg, "quick_test")
|
|
624
617
|
executed.append("quick_test")
|
|
625
618
|
elif str(commands.get("test") or "").strip():
|
|
626
619
|
_run_configured_command(repo, cfg, "test")
|
|
627
620
|
executed.append("test")
|
|
621
|
+
elif str(commands.get("build") or "").strip():
|
|
622
|
+
_run_configured_command(repo, cfg, "build")
|
|
623
|
+
executed.append("build")
|
|
628
624
|
else:
|
|
629
|
-
missing.append("commands.quick_test or commands.test")
|
|
630
|
-
|
|
631
|
-
static_executed = False
|
|
632
|
-
if str(commands.get("lint") or "").strip():
|
|
633
|
-
_run_configured_command(repo, cfg, "lint")
|
|
634
|
-
executed.append("lint")
|
|
635
|
-
static_executed = True
|
|
636
|
-
|
|
637
|
-
if str(commands.get("typecheck") or "").strip():
|
|
638
|
-
_run_configured_command(repo, cfg, "typecheck")
|
|
639
|
-
executed.append("typecheck")
|
|
640
|
-
static_executed = True
|
|
641
|
-
|
|
642
|
-
if not static_executed:
|
|
643
|
-
missing.append("commands.lint or commands.typecheck")
|
|
644
|
-
|
|
645
|
-
if str(commands.get("script_syntax") or "").strip():
|
|
646
|
-
_run_configured_command(repo, cfg, "script_syntax")
|
|
647
|
-
executed.append("script_syntax")
|
|
625
|
+
missing.append("commands.light_gate or commands.quick_test or commands.test or commands.build")
|
|
648
626
|
|
|
649
627
|
if missing:
|
|
650
628
|
raise APError(
|
|
@@ -664,8 +642,6 @@ def cmd_runtime_up(args: argparse.Namespace) -> None:
|
|
|
664
642
|
repo = Path(args.repo).resolve()
|
|
665
643
|
cfg = _load_cfg(repo)
|
|
666
644
|
runtime_cfg = (cfg.get("runtime") or {})
|
|
667
|
-
if _run_configured_command(repo, cfg, "compose_up"):
|
|
668
|
-
return
|
|
669
645
|
compose_args = _compose_base_args(runtime_cfg) + ["up", "-d"]
|
|
670
646
|
docker_service = str(runtime_cfg.get("docker_service") or "").strip()
|
|
671
647
|
if docker_service:
|
|
@@ -679,8 +655,6 @@ def cmd_runtime_down(args: argparse.Namespace) -> None:
|
|
|
679
655
|
repo = Path(args.repo).resolve()
|
|
680
656
|
cfg = _load_cfg(repo)
|
|
681
657
|
runtime_cfg = (cfg.get("runtime") or {})
|
|
682
|
-
if _run_configured_command(repo, cfg, "compose_down"):
|
|
683
|
-
return
|
|
684
658
|
compose_args = _compose_base_args(runtime_cfg) + ["down", "--remove-orphans"]
|
|
685
659
|
print(f"[runtime-down] {' '.join(compose_args)}")
|
|
686
660
|
run(compose_args, cwd=repo)
|
|
@@ -811,12 +785,13 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
811
785
|
|
|
812
786
|
if not str(project_cfg.get("name") or "").strip():
|
|
813
787
|
missing.append("project.name")
|
|
814
|
-
if not
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
788
|
+
if not (
|
|
789
|
+
str(commands.get("light_gate") or "").strip()
|
|
790
|
+
or str(commands.get("quick_test") or "").strip()
|
|
791
|
+
or str(commands.get("test") or "").strip()
|
|
792
|
+
or str(commands.get("build") or "").strip()
|
|
793
|
+
):
|
|
794
|
+
missing.append("commands.light_gate or commands.quick_test or commands.test or commands.build")
|
|
820
795
|
_require_explicit_field(missing, "target_env.name", target_cfg.get("name"))
|
|
821
796
|
_require_explicit_field(missing, "target_env.frontend_base_url", target_cfg.get("frontend_base_url"))
|
|
822
797
|
_require_explicit_field(missing, "target_env.frontend_username", target_cfg.get("frontend_username"))
|
|
@@ -824,6 +799,8 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
824
799
|
_require_explicit_field(missing, "target_env.backend_base_url", target_cfg.get("backend_base_url"))
|
|
825
800
|
_require_explicit_field(missing, "target_env.backend_username", target_cfg.get("backend_username"))
|
|
826
801
|
_require_explicit_field(missing, "target_env.backend_password", target_cfg.get("backend_password"))
|
|
802
|
+
_require_explicit_field(missing, "target_env.backend_root_username", target_cfg.get("backend_root_username"))
|
|
803
|
+
_require_explicit_field(missing, "target_env.backend_root_password", target_cfg.get("backend_root_password"))
|
|
827
804
|
_require_explicit_field(missing, "target_env.health_base_url", target_cfg.get("health_base_url"))
|
|
828
805
|
_require_explicit_field(missing, "target_env.health_path", target_cfg.get("health_path"))
|
|
829
806
|
|
|
@@ -856,8 +833,8 @@ def cmd_doctor(args: argparse.Namespace) -> None:
|
|
|
856
833
|
_validate_url_field(warnings, "jenkins.job_url", jenkins_cfg.get("job_url"))
|
|
857
834
|
|
|
858
835
|
runtime_enabled = any(str(runtime_cfg.get(key) or "").strip() for key in ["docker_compose_file", "docker_service", "health_base_url", "health_path"])
|
|
859
|
-
if runtime_enabled and not
|
|
860
|
-
warnings.append("runtime config is partially enabled but
|
|
836
|
+
if runtime_enabled and not str(runtime_cfg.get("docker_compose_file") or "").strip():
|
|
837
|
+
warnings.append("runtime config is partially enabled but runtime.docker_compose_file is missing")
|
|
861
838
|
|
|
862
839
|
try:
|
|
863
840
|
timeout_s = int(jenkins_cfg.get("deploy_timeout_sec") or 0)
|
|
@@ -893,7 +870,9 @@ def cmd_verify_jenkins_build(args: argparse.Namespace) -> None:
|
|
|
893
870
|
max_builds = int(args.max_builds or 20)
|
|
894
871
|
timeout_s = int(args.timeout_sec or 300)
|
|
895
872
|
poll_s = int(args.poll_sec or 5)
|
|
896
|
-
inferred_branch =
|
|
873
|
+
inferred_branch = ""
|
|
874
|
+
if args.multibranch_root_job and not args.branch_name:
|
|
875
|
+
inferred_branch = _resolve_git_branch_name(repo, git_ref)
|
|
897
876
|
branch_hint = str(args.branch_name or inferred_branch or "").strip()
|
|
898
877
|
root_hint = str(
|
|
899
878
|
args.multibranch_root_job
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elvis1513/auto-coding-skill",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "CLI installer for auto-coding-skill (Claude Code + Codex CLI) with Go fullstack + Jenkins workflow support.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"LICENSE"
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
|
-
"test": "node -c cli/src/index.js",
|
|
16
|
+
"test": "node -c cli/src/index.js && python3 -c \"import ast, pathlib; files = ['src/auto-coding-skill/scripts/ap.py', 'src/auto-coding-skill/scripts/core.py', 'src/auto-coding-skill/scripts/http_checks.py', 'cli/assets/skill/scripts/ap.py', 'cli/assets/skill/scripts/core.py', 'cli/assets/skill/scripts/http_checks.py']; [ast.parse(pathlib.Path(rel).read_text(encoding='utf-8'), filename=rel, feature_version=(3, 11)) for rel in files]; print('python311-grammar-ok')\" && python3 -m py_compile src/auto-coding-skill/scripts/ap.py src/auto-coding-skill/scripts/core.py src/auto-coding-skill/scripts/http_checks.py cli/assets/skill/scripts/ap.py cli/assets/skill/scripts/core.py cli/assets/skill/scripts/http_checks.py && find src cli -type d -name '__pycache__' -prune -exec rm -rf {} +",
|
|
17
17
|
"sync-assets": "node cli/src/sync-assets.js",
|
|
18
18
|
"release:check": "npm run sync-assets && npm run test && npm pack --dry-run"
|
|
19
19
|
},
|