@fantasticit/sumi 0.8.0 → 0.9.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/README.md +18 -18
- package/dist/adapters.d.ts +1 -0
- package/dist/adapters.js +83 -5
- package/dist/adapters.js.map +1 -1
- package/dist/fix.js +10 -3
- package/dist/fix.js.map +1 -1
- package/dist/trace.d.ts +16 -0
- package/dist/trace.js +30 -0
- package/dist/trace.js.map +1 -0
- package/dist/visualize-page.d.ts +1 -1
- package/dist/visualize-page.js +2 -2
- package/dist/visualize.js +52 -8
- package/dist/visualize.js.map +1 -1
- package/node_modules/@sumi/create/dist/bin.d.ts +2 -0
- package/node_modules/@sumi/create/dist/bin.js +52 -0
- package/node_modules/@sumi/create/dist/bin.js.map +1 -0
- package/node_modules/@sumi/create/package.json +1 -1
- package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +28 -0
- package/node_modules/@sumi/create/template/control/rubrics/behavior.yaml +17 -0
- package/node_modules/@sumi/create/template/control/rubrics/clean-code.yaml +9 -0
- package/node_modules/@sumi/create/template/control/rubrics/device-acceptance.yaml +10 -0
- package/node_modules/@sumi/create/template/control/rubrics/domain.yaml +9 -0
- package/node_modules/@sumi/create/template/control/rubrics/omission.yaml +13 -0
- package/node_modules/@sumi/kernel/dist/brief.d.ts +2 -0
- package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
- package/node_modules/@sumi/kernel/dist/engine.js +29 -13
- package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
- package/node_modules/@sumi/kernel/dist/registry.d.ts +6 -0
- package/node_modules/@sumi/kernel/dist/registry.js +7 -1
- package/node_modules/@sumi/kernel/dist/registry.js.map +1 -1
- package/node_modules/@sumi/kernel/dist/scope.d.ts +4 -2
- package/node_modules/@sumi/kernel/dist/scope.js +12 -39
- package/node_modules/@sumi/kernel/dist/scope.js.map +1 -1
- package/node_modules/@sumi/kernel/dist/step-cache.d.ts +19 -0
- package/node_modules/@sumi/kernel/dist/step-cache.js +185 -0
- package/node_modules/@sumi/kernel/dist/step-cache.js.map +1 -0
- package/node_modules/@sumi/kernel/package.json +2 -2
- package/node_modules/@sumi/plugin-sdk/README.md +3 -1
- package/node_modules/@sumi/plugin-sdk/dist/git.d.ts +16 -1
- package/node_modules/@sumi/plugin-sdk/dist/git.js +45 -5
- package/node_modules/@sumi/plugin-sdk/dist/git.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +7 -0
- package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/snapshot.d.ts +2 -0
- package/node_modules/@sumi/plugin-sdk/dist/snapshot.js +60 -0
- package/node_modules/@sumi/plugin-sdk/dist/snapshot.js.map +1 -0
- package/node_modules/@sumi/plugin-sdk/dist/trace.d.ts +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/trace.js +15 -5
- package/node_modules/@sumi/plugin-sdk/dist/trace.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/dist/validate.js +11 -1
- package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
- package/node_modules/@sumi/plugin-sdk/package.json +1 -1
- package/node_modules/@sumi/plugins-core/README.md +14 -10
- package/node_modules/@sumi/plugins-core/dist/fix/lint.js +3 -3
- package/node_modules/@sumi/plugins-core/dist/fix/lint.js.map +1 -1
- package/node_modules/@sumi/plugins-core/dist/lib.d.ts +6 -2
- package/node_modules/@sumi/plugins-core/dist/lib.js +12 -7
- package/node_modules/@sumi/plugins-core/dist/lib.js.map +1 -1
- package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js +198 -29
- package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js.map +1 -1
- package/node_modules/@sumi/plugins-core/dist/test-batches.d.ts +16 -0
- package/node_modules/@sumi/plugins-core/dist/test-batches.js +83 -0
- package/node_modules/@sumi/plugins-core/dist/test-batches.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/test-checkpoints.d.ts +27 -0
- package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js +121 -0
- package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/tool-batches.d.ts +11 -0
- package/node_modules/@sumi/plugins-core/dist/tool-batches.js +41 -0
- package/node_modules/@sumi/plugins-core/dist/tool-batches.js.map +1 -0
- package/node_modules/@sumi/plugins-core/dist/vitest-runner.js +20 -4
- package/node_modules/@sumi/plugins-core/dist/vitest-runner.js.map +1 -1
- package/node_modules/@sumi/plugins-core/package.json +2 -2
- package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +4 -0
- package/node_modules/@sumi/plugins-governance/README.md +9 -6
- package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +1 -2
- package/node_modules/@sumi/plugins-governance/dist/checkout.js +6 -6
- package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/gate.js +61 -5
- package/node_modules/@sumi/plugins-governance/dist/commands/gate.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +20 -11
- package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/gate-cache.js +42 -5
- package/node_modules/@sumi/plugins-governance/dist/gate-cache.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/hooks.d.ts +2 -0
- package/node_modules/@sumi/plugins-governance/dist/hooks.js +4 -0
- package/node_modules/@sumi/plugins-governance/dist/hooks.js.map +1 -0
- package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js +7 -4
- package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/pr-base.d.ts +9 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-base.js +28 -0
- package/node_modules/@sumi/plugins-governance/dist/pr-base.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.d.ts +16 -4
- package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js +47 -9
- package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js +3 -1
- package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/protected.js +7 -9
- package/node_modules/@sumi/plugins-governance/dist/protected.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/dist/semantic.js +2 -17
- package/node_modules/@sumi/plugins-governance/dist/semantic.js.map +1 -1
- package/node_modules/@sumi/plugins-governance/instructions/push.md +6 -4
- package/node_modules/@sumi/plugins-governance/package.json +2 -2
- package/node_modules/@sumi/plugins-openspec/package.json +4 -4
- package/node_modules/@sumi/plugins-precedent/dist/model.js +2 -15
- package/node_modules/@sumi/plugins-precedent/dist/model.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +28 -3
- package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
- package/node_modules/@sumi/plugins-precedent/package.json +3 -3
- package/node_modules/@sumi/plugins-review/README.md +18 -11
- package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js +4 -1
- package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js +25 -10
- package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/commands/submit.js +8 -1
- package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/dispute.d.ts +9 -0
- package/node_modules/@sumi/plugins-review/dist/dispute.js +91 -0
- package/node_modules/@sumi/plugins-review/dist/dispute.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/index.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/index.js +1 -0
- package/node_modules/@sumi/plugins-review/dist/index.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/model-execution.d.ts +2 -1
- package/node_modules/@sumi/plugins-review/dist/model-execution.js +49 -18
- package/node_modules/@sumi/plugins-review/dist/model-execution.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/model-independence.d.ts +2 -1
- package/node_modules/@sumi/plugins-review/dist/model-independence.js +13 -4
- package/node_modules/@sumi/plugins-review/dist/model-independence.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +77 -20
- package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +131 -22
- package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.js +35 -0
- package/node_modules/@sumi/plugins-review/dist/plugins/validation.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +10 -5
- package/node_modules/@sumi/plugins-review/dist/recheck.js +51 -10
- package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/review-evidence.d.ts +3 -0
- package/node_modules/@sumi/plugins-review/dist/review-evidence.js +58 -0
- package/node_modules/@sumi/plugins-review/dist/review-evidence.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/review.d.ts +74 -1
- package/node_modules/@sumi/plugins-review/dist/review.js +320 -9
- package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/submission.js +45 -4
- package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -1
- package/node_modules/@sumi/plugins-review/dist/upgrade-command.d.ts +1 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-command.js +14 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-command.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.d.ts +13 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js +531 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.d.ts +33 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js +187 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade.d.ts +26 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade.js +68 -0
- package/node_modules/@sumi/plugins-review/dist/upgrade.js.map +1 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.d.ts +8 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.js +210 -0
- package/node_modules/@sumi/plugins-review/dist/validation-receipt.js.map +1 -0
- package/node_modules/@sumi/plugins-review/package.json +5 -4
- package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +8 -1
- package/package.json +10 -10
|
@@ -6,7 +6,8 @@ import { semanticChanges } from '../semantic.js';
|
|
|
6
6
|
import { retainedNotice, runGateFlow, workspaceCommand } from '../checkout.js';
|
|
7
7
|
import { resolvePushUpstream } from '../push-base.js';
|
|
8
8
|
import { requireApproval } from '../state.js';
|
|
9
|
-
import { gitPaths, projectSumiCommand } from '@sumi/plugin-sdk';
|
|
9
|
+
import { gitOutput, gitPaths, projectSumiCommand } from '@sumi/plugin-sdk';
|
|
10
|
+
import { ghRunner, gitRunner, parsePrBaseView, PR_BASE_FIELDS, resolvePrBase } from '../pr-base.js';
|
|
10
11
|
/**
|
|
11
12
|
* sumi gate <remote> [url]:由 git 推送前 hook 调用,从标准输入读取更新列表逐项验收。
|
|
12
13
|
* 每项在被推送提交的独立检出中准备环境、现场运行门禁流程;control 变更、强推、删除、
|
|
@@ -28,7 +29,52 @@ function tryGit(args, cwd = root) {
|
|
|
28
29
|
return null;
|
|
29
30
|
}
|
|
30
31
|
}
|
|
32
|
+
/** gh 查询开放 PR 的上限:每次推送的每个 ref 都要查询,网络不可用时不能让 pre-push 长时间挂起。 */
|
|
33
|
+
const GH_TIMEOUT_MS = 15_000;
|
|
34
|
+
/** 开放 PR 的评审基准与 pr-report 一致;GitHub 不可用时沿用原门禁范围。 */
|
|
35
|
+
function openPrBase(remoteRef, remoteOid, commit) {
|
|
36
|
+
if (!remoteRef.startsWith('refs/heads/') || ZERO.test(remoteOid))
|
|
37
|
+
return null;
|
|
38
|
+
const branch = remoteRef.slice('refs/heads/'.length);
|
|
39
|
+
let view;
|
|
40
|
+
try {
|
|
41
|
+
// 一次查询同时取得匹配所需的 head 与基准字段,避免每个 ref 两次网络往返。
|
|
42
|
+
const listed = ghRunner(root, GH_TIMEOUT_MS)(['pr', 'list', '--state', 'open', '--head', branch, '--json', `number,${PR_BASE_FIELDS}`]);
|
|
43
|
+
if (listed.status !== 0 || listed.error)
|
|
44
|
+
return null;
|
|
45
|
+
const matches = JSON.parse(listed.stdout);
|
|
46
|
+
const match = Array.isArray(matches)
|
|
47
|
+
? matches.find((pr) => pr?.headRefOid === remoteOid)
|
|
48
|
+
: undefined;
|
|
49
|
+
if (!match)
|
|
50
|
+
return null;
|
|
51
|
+
view = parsePrBaseView(match);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
// 确认存在匹配的开放 PR 后,精确基准解析失败必须阻断;不能退回远端旧提交的较小范围。
|
|
57
|
+
const prBase = resolvePrBase({ ...view, headRefOid: commit }, gitRunner(root));
|
|
58
|
+
process.stderr.write(`开放 PR ${view.url}:评审基准 ${prBase.slice(0, 8)}\n`);
|
|
59
|
+
return prBase;
|
|
60
|
+
}
|
|
31
61
|
const sha256 = (text) => createHash('sha256').update(text).digest('hex');
|
|
62
|
+
/**
|
|
63
|
+
* 受保护文件差异的摘要,作为 control-change 确认的绑定:取 --raw 的路径、模式与两侧完整 blob 对象名,
|
|
64
|
+
* 与 diff 正文同样由内容决定(内容再变则确认失效),但输出只随文件数增长,锁文件、快照再大也不会读进内存。
|
|
65
|
+
* --no-renames 让每条记录只对应一个路径,摘要不受 diff.renames 等本地配置影响。
|
|
66
|
+
*/
|
|
67
|
+
function protectedDiffDigest(base, commit, changed) {
|
|
68
|
+
const wanted = new Set(changed);
|
|
69
|
+
// -z 的 raw 输出为「:模式 模式 对象 对象 状态\0路径\0」交替出现;按位置配对,路径中含冒号也不受影响。
|
|
70
|
+
const tokens = gitOutput(root, ['diff', '--raw', '-z', '--no-abbrev', '--no-renames', base, commit]).split('\0');
|
|
71
|
+
const entries = [];
|
|
72
|
+
for (let i = 0; i + 1 < tokens.length; i += 2) {
|
|
73
|
+
if (wanted.has(tokens[i + 1]))
|
|
74
|
+
entries.push(`${tokens[i]}\0${tokens[i + 1]}`);
|
|
75
|
+
}
|
|
76
|
+
return sha256(entries.join('\n'));
|
|
77
|
+
}
|
|
32
78
|
function ask(outcome, kind, binding, question, summary) {
|
|
33
79
|
const id = requireApproval(root, kind, binding, [question, ...summary]);
|
|
34
80
|
if (id) {
|
|
@@ -133,10 +179,11 @@ function verify(localRef, localOid, remoteRef, remoteOid) {
|
|
|
133
179
|
ask(outcome, 'enrollment', { remote, ref: remoteRef, control: digest }, `确认首次接入:${remoteRef} 的全部 control 内容(${files.length} 个文件)`, files.slice(0, 20));
|
|
134
180
|
}
|
|
135
181
|
else {
|
|
136
|
-
|
|
182
|
+
// --no-renames:重命名按「删除旧路径 + 新增新路径」列出。否则在 rename 检测下只列新路径,
|
|
183
|
+
// 受保护文件被移出保护范围(或从外部移入)时,旧路径的删除不会被判为 control 变更。
|
|
184
|
+
const changed = gitPaths(root, ['diff', '--name-only', '--no-renames', base, commit]).filter((f) => isProtected(f));
|
|
137
185
|
if (changed.length) {
|
|
138
|
-
|
|
139
|
-
ask(outcome, 'control-change', { remote, ref: remoteRef, base, diff: sha256(diff) }, `确认推送到 ${remoteRef} 的 control 变更`, semanticChanges(root, base, commit, changed));
|
|
186
|
+
ask(outcome, 'control-change', { remote, ref: remoteRef, base, diff: protectedDiffDigest(base, commit, changed) }, `确认推送到 ${remoteRef} 的 control 变更`, semanticChanges(root, base, commit, changed));
|
|
140
187
|
}
|
|
141
188
|
}
|
|
142
189
|
// 先判断人工确认:确认与否只取决于 diff,未确认时不运行检查,确认后重新推送才运行,避免检查白跑一遍。
|
|
@@ -149,7 +196,16 @@ function verify(localRef, localOid, remoteRef, remoteOid) {
|
|
|
149
196
|
outcome.lines.push(` ✓ ${upstream.name}(${commit.slice(0, 8)})纯同步,跳过环境准备与门禁流程`);
|
|
150
197
|
return outcome;
|
|
151
198
|
}
|
|
152
|
-
|
|
199
|
+
let reviewBase;
|
|
200
|
+
try {
|
|
201
|
+
reviewBase = openPrBase(remoteRef, remoteOid, commit) ?? base;
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
outcome.ok = false;
|
|
205
|
+
outcome.lines.push(`⊘ 开放 PR 的评审基准无法确定:${error instanceof Error ? error.message : String(error)}`);
|
|
206
|
+
return outcome;
|
|
207
|
+
}
|
|
208
|
+
runInCheckout(outcome, commit, reviewBase, upstream);
|
|
153
209
|
return outcome;
|
|
154
210
|
}
|
|
155
211
|
const input = readFileSync(0, 'utf8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/commands/gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../src/commands/gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { tmpdir } from 'node:os';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { guardCommandArgs, PROJECT_SUMI
|
|
4
|
+
import { guardCommandArgs, PROJECT_SUMI } from '@sumi/plugin-sdk';
|
|
5
5
|
import { retainedNotice, runGateFlow, workspaceCommand } from '../checkout.js';
|
|
6
|
-
import { resolvePrBase } from '../pr-base.js';
|
|
6
|
+
import { ghRunner, gitRunner, parsePrBaseView, PR_BASE_FIELDS, resolvePrBase } from '../pr-base.js';
|
|
7
7
|
import { PR_REPORT_MARKER, prReportHeadMarker } from '../pr-report-markers.js';
|
|
8
8
|
import { reportSections } from '../pr-report-sections.js';
|
|
9
|
-
import { callerDir,
|
|
9
|
+
import { callerDir, parsePrReportArgs, PR_REPORT_USAGE, publishReport, resolveAttachments, verifyPublishedReport, } from '../pr-report-publish.js';
|
|
10
10
|
/**
|
|
11
11
|
* sumi pr-report <PR 号>:以 PR 的完整范围(与目标分支的合并基础..头提交)在头提交的独立检出中
|
|
12
12
|
* 按门禁配置运行门禁流程,把结论、各步骤状态、findings 与各步骤的报告段落发布为一条 PR 评论;
|
|
@@ -28,10 +28,7 @@ function gh(args) {
|
|
|
28
28
|
fail(`gh ${args.slice(0, 2).join(' ')} 失败:${r.stderr.trim()}`, 3);
|
|
29
29
|
return r.stdout.trim();
|
|
30
30
|
}
|
|
31
|
-
const runGit = (
|
|
32
|
-
const r = spawnCommandSync('git', args, { cwd: root, encoding: 'utf8', windowsHide: true });
|
|
33
|
-
return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
|
|
34
|
-
};
|
|
31
|
+
const runGit = gitRunner(root);
|
|
35
32
|
const git = (args) => {
|
|
36
33
|
const r = runGit(args);
|
|
37
34
|
if (r.status !== 0)
|
|
@@ -66,8 +63,11 @@ function compose(run, url, base, oid, baseBranch) {
|
|
|
66
63
|
'',
|
|
67
64
|
// 与门禁口径一致:有问题(例如门禁过程中受检文件被改写)时不算通过
|
|
68
65
|
`- 结论:${run.problem ? STATE.blocked : (STATE[run.conclusion ?? 'blocked'] ?? run.conclusion)}`,
|
|
66
|
+
'- 结论范围:仅覆盖本项目在本次流程和档位中配置且执行的检查步骤;未接入流程的测试不在此结论内。',
|
|
69
67
|
`- 范围:\`${base.slice(0, 8)}..${oid.slice(0, 8)}\`(与 GitHub ${baseBranch} 当前 head 的合并基础 → PR 头提交),流程 \`${run.flow}\`${run.tier ? `,档位 \`${run.tier}\`` : ''}`,
|
|
70
|
-
|
|
68
|
+
run.source?.reused
|
|
69
|
+
? `- 方式:复用同范围的独立门禁运行 ${run.source.runId}(${run.source.startedAt});本次未重新执行检查(${new Date().toISOString()})`
|
|
70
|
+
: `- 方式:在头提交的独立检出中现场运行,评审复用工作区已接受的结果(${new Date().toISOString()})`,
|
|
71
71
|
...(run.problem ? [`- 问题:${run.problem}`] : []),
|
|
72
72
|
'',
|
|
73
73
|
'### 检查步骤',
|
|
@@ -88,7 +88,7 @@ function compose(run, url, base, oid, baseBranch) {
|
|
|
88
88
|
return lines.join('\n');
|
|
89
89
|
}
|
|
90
90
|
// 参数与附件在运行耗时的门禁流程之前校验
|
|
91
|
-
guardCommandArgs(process.argv.slice(2), { usage: PR_REPORT_USAGE, options: ['attach'] }, 3);
|
|
91
|
+
guardCommandArgs(process.argv.slice(2), { usage: PR_REPORT_USAGE, options: ['attach'], flags: ['force'] }, 3);
|
|
92
92
|
const parsed = parsePrReportArgs(process.argv.slice(2));
|
|
93
93
|
if ('error' in parsed)
|
|
94
94
|
fail(parsed.error, 3);
|
|
@@ -97,7 +97,13 @@ const attachments = resolveAttachments(parsed.attach, callerDir(root));
|
|
|
97
97
|
if ('error' in attachments)
|
|
98
98
|
fail(attachments.error, 3);
|
|
99
99
|
const attach = attachments.attach;
|
|
100
|
-
|
|
100
|
+
let view;
|
|
101
|
+
try {
|
|
102
|
+
view = parsePrBaseView(JSON.parse(gh(['pr', 'view', pr, '--json', PR_BASE_FIELDS])));
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
fail(error.message, 3);
|
|
106
|
+
}
|
|
101
107
|
const head = tryGit(['rev-parse', 'HEAD']);
|
|
102
108
|
if (head !== view.headRefOid) {
|
|
103
109
|
fail(`本地 HEAD(${head?.slice(0, 8) ?? '无'})与 PR 头提交(${view.headRefOid.slice(0, 8)})不一致:请先推送,或切到 PR 分支并更新`);
|
|
@@ -110,7 +116,7 @@ catch (error) {
|
|
|
110
116
|
fail(error.message, 3);
|
|
111
117
|
}
|
|
112
118
|
process.stderr.write(`验收 PR #${pr}(${view.headRefOid.slice(0, 8)},基准 ${base.slice(0, 8)},GitHub ${view.baseRefName}@${view.baseRefOid.slice(0, 8)})\n`);
|
|
113
|
-
const run = runGateFlow(root, view.headRefOid, base, (line) => process.stderr.write(`${line}\n`), {
|
|
119
|
+
const run = runGateFlow(root, view.headRefOid, base, (line) => process.stderr.write(`${line}\n`), { force: parsed.force });
|
|
114
120
|
const retained = retainedNotice(run);
|
|
115
121
|
if (retained)
|
|
116
122
|
process.stderr.write(`${retained}\n`);
|
|
@@ -137,6 +143,9 @@ if (!published.ok)
|
|
|
137
143
|
fail(published.message, 3);
|
|
138
144
|
if (published.warning)
|
|
139
145
|
process.stderr.write(`警告:${published.warning}\n`);
|
|
146
|
+
const verified = verifyPublishedReport({ pr, head: view.headRefOid, body, attachments: attach.length > 0, gh: runGh });
|
|
147
|
+
if (!verified.ok)
|
|
148
|
+
fail(verified.message, 3);
|
|
140
149
|
const verb = { created: '发布', updated: '更新', replaced: '重新发布' }[published.action];
|
|
141
150
|
process.stdout.write(`已${verb} PR #${pr} 的检查报告${attach.length ? `(附件 ${attach.length} 个)` : ''}:结论 ${run.problem ? STATE.blocked : (STATE[run.conclusion] ?? run.conclusion)}\n${view.url}\n`);
|
|
142
151
|
//# sourceMappingURL=pr-report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../src/commands/pr-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"pr-report.js","sourceRoot":"","sources":["../../src/commands/pr-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { execFileSync } from 'node:child_process';
|
|
2
|
-
import { createHash, randomBytes } from 'node:crypto';
|
|
2
|
+
import { createHash, createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
3
3
|
import { existsSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { CONFIG_FILES } from '@sumi/plugin-sdk';
|
|
5
|
+
import { CONFIG_FILES, gitShowFile } from '@sumi/plugin-sdk';
|
|
6
6
|
import { parse } from 'yaml';
|
|
7
7
|
import { stateDir } from './state.js';
|
|
8
8
|
const hash = (text) => createHash('sha256').update(text).digest('hex');
|
|
@@ -20,7 +20,7 @@ export function gateCacheKey(root, head, base, flow, tier) {
|
|
|
20
20
|
return null;
|
|
21
21
|
let config = null;
|
|
22
22
|
for (const path of CONFIG_FILES) {
|
|
23
|
-
config =
|
|
23
|
+
config = gitShowFile(root, head, path)?.trim() ?? null;
|
|
24
24
|
if (config !== null)
|
|
25
25
|
break;
|
|
26
26
|
}
|
|
@@ -41,6 +41,25 @@ export function gateCacheKey(root, head, base, flow, tier) {
|
|
|
41
41
|
return { head, base, flow, tier: tier ?? 'default', config: hash(config), build, control };
|
|
42
42
|
}
|
|
43
43
|
const fileFor = (root, key) => join(stateDir(root), 'gate-cache', `${hash(JSON.stringify(key))}.json`);
|
|
44
|
+
const secretPath = (root) => join(stateDir(root), 'gate-cache-secret');
|
|
45
|
+
function secret(root, create) {
|
|
46
|
+
const path = secretPath(root);
|
|
47
|
+
try {
|
|
48
|
+
if (create && !existsSync(path))
|
|
49
|
+
writeFileSync(path, randomBytes(32), { flag: 'wx', mode: 0o600 });
|
|
50
|
+
const value = readFileSync(path);
|
|
51
|
+
return value.length === 32 ? value : null;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (create && error.code === 'EEXIST')
|
|
55
|
+
return secret(root, false);
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function signature(root, payload, create) {
|
|
60
|
+
const key = secret(root, create);
|
|
61
|
+
return key ? createHmac('sha256', key).update(JSON.stringify(payload)).digest('hex') : null;
|
|
62
|
+
}
|
|
44
63
|
/** 损坏或旧格式只造成缓存未命中,绝不能构成放行。 */
|
|
45
64
|
export function readGateCache(root, key) {
|
|
46
65
|
try {
|
|
@@ -48,7 +67,21 @@ export function readGateCache(root, key) {
|
|
|
48
67
|
if (!existsSync(file))
|
|
49
68
|
return null;
|
|
50
69
|
const value = JSON.parse(readFileSync(file, 'utf8'));
|
|
51
|
-
if (value.version !==
|
|
70
|
+
if (value.version !== 2 || value.conclusion !== 'pass' || JSON.stringify(value.key) !== JSON.stringify(key))
|
|
71
|
+
return null;
|
|
72
|
+
const payload = {
|
|
73
|
+
version: value.version,
|
|
74
|
+
conclusion: value.conclusion,
|
|
75
|
+
key: value.key,
|
|
76
|
+
runId: value.runId,
|
|
77
|
+
startedAt: value.startedAt,
|
|
78
|
+
brief: value.brief,
|
|
79
|
+
record: value.record,
|
|
80
|
+
};
|
|
81
|
+
const expected = signature(root, payload, false);
|
|
82
|
+
if (!expected || typeof value.signature !== 'string' || !/^[a-f0-9]{64}$/.test(value.signature))
|
|
83
|
+
return null;
|
|
84
|
+
if (!timingSafeEqual(Buffer.from(expected, 'hex'), Buffer.from(value.signature, 'hex')))
|
|
52
85
|
return null;
|
|
53
86
|
if (typeof value.runId !== 'string' || !/^r[\w-]+$/.test(value.runId) || !Number.isFinite(Date.parse(value.startedAt ?? '')))
|
|
54
87
|
return null;
|
|
@@ -69,7 +102,11 @@ export function writeGateCache(root, value) {
|
|
|
69
102
|
mkdirSync(dir, { recursive: true });
|
|
70
103
|
const temporary = join(dir, `.gate-${process.pid}-${randomBytes(6).toString('hex')}.tmp`);
|
|
71
104
|
try {
|
|
72
|
-
|
|
105
|
+
const payload = { version: 2, conclusion: 'pass', ...value };
|
|
106
|
+
const signed = signature(root, payload, true);
|
|
107
|
+
if (!signed)
|
|
108
|
+
return;
|
|
109
|
+
writeFileSync(temporary, `${JSON.stringify({ ...payload, signature: signed })}\n`, { flag: 'wx', mode: 0o600 });
|
|
73
110
|
renameSync(temporary, file);
|
|
74
111
|
}
|
|
75
112
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gate-cache.js","sourceRoot":"","sources":["../src/gate-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"gate-cache.js","sourceRoot":"","sources":["../src/gate-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,2DAA2D;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -3,12 +3,15 @@ import { configAt, protectedMatcher } from '../protected.js';
|
|
|
3
3
|
/** 受保护路径:列出本次改动中的 control 变更(按基准与当前两边声明的并集),提醒推送前需要人工确认。 */
|
|
4
4
|
await definePlugin((ctx) => {
|
|
5
5
|
const isProtected = protectedMatcher(configAt(ctx.repoRoot, ctx.base), configAt(ctx.repoRoot, null));
|
|
6
|
-
//
|
|
7
|
-
|
|
6
|
+
// 有基准时自行从 git 求相对基准真正变化的文件:全量运行时 ctx.files 是全仓文件;非全量时 ctx.files 只含仍存在的文件,
|
|
7
|
+
// 看不到被删除或被重命名移走的受保护文件。--no-renames 让重命名同时列出旧路径与新路径,不受 diff.renames 等本地配置影响。
|
|
8
|
+
// 固定提交模式(门禁检出)比较基准到 HEAD,不看检出中环境准备产生的未跟踪文件。
|
|
9
|
+
const files = ctx.base
|
|
8
10
|
? [
|
|
9
11
|
...new Set([
|
|
10
|
-
...
|
|
11
|
-
...gitPaths(ctx.repoRoot, ['
|
|
12
|
+
...(ctx.all ? [] : ctx.files),
|
|
13
|
+
...gitPaths(ctx.repoRoot, ['diff', '--name-only', '--no-renames', ...(ctx.mode === 'commit' ? [ctx.base, 'HEAD'] : [ctx.base])]),
|
|
14
|
+
...(ctx.mode === 'commit' ? [] : gitPaths(ctx.repoRoot, ['ls-files', '--others', '--exclude-standard'])),
|
|
12
15
|
]),
|
|
13
16
|
].filter(Boolean)
|
|
14
17
|
: ctx.files;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected-paths.js","sourceRoot":"","sources":["../../src/plugins/protected-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,4DAA4D;AAC5D,MAAM,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IACzB,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrG,
|
|
1
|
+
{"version":3,"file":"protected-paths.js","sourceRoot":"","sources":["../../src/plugins/protected-paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAgB,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,4DAA4D;AAC5D,MAAM,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE;IACzB,MAAM,WAAW,GAAG,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACrG,0EAA0E;IAC1E,4EAA4E;IAC5E,4CAA4C;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI;QACpB,CAAC,CAAC;YACE,GAAG,IAAI,GAAG,CAAC;gBACT,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC7B,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC,CAAC;aACzG,CAAC;SACH,CAAC,MAAM,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACd,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,0CAA0C;IAC1C,MAAM,QAAQ,GAAc,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAChE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;QACf,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,sBAAsB;QAC/B,IAAI;KACL,CAAC,CAAC,CAAC;IACJ,OAAO,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC,eAAe;QACxF,QAAQ;QACR,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CommandResult } from './pr-report-status.js';
|
|
1
2
|
export interface PrBaseView {
|
|
2
3
|
headRefOid: string;
|
|
3
4
|
baseRefOid: string;
|
|
@@ -10,6 +11,14 @@ export interface GitResult {
|
|
|
10
11
|
stderr: string;
|
|
11
12
|
}
|
|
12
13
|
export type GitRunner = (args: string[]) => GitResult;
|
|
14
|
+
/** gh 返回 PR 评审基准所需的字段;推送门禁与 PR 报告共用,保证两者按同一口径计算基准。 */
|
|
15
|
+
export declare const PR_BASE_FIELDS = "headRefOid,baseRefName,baseRefOid,url";
|
|
16
|
+
/** 校验 gh 返回的 PR 基准字段;OID 与分支名的语义由 resolvePrBase 继续校验。 */
|
|
17
|
+
export declare function parsePrBaseView(value: unknown): PrBaseView;
|
|
18
|
+
export type GhRunner = (args: string[]) => CommandResult;
|
|
19
|
+
/** timeout(毫秒)用于不能长时间挂起的调用方;超时按失败返回。 */
|
|
20
|
+
export declare function ghRunner(cwd: string, timeout?: number): GhRunner;
|
|
21
|
+
export declare function gitRunner(cwd: string): GitRunner;
|
|
13
22
|
/** PR URL 指向 base repository;从中构造无需依赖本地 remote 名称的 Git URL。 */
|
|
14
23
|
export declare function baseRepositoryGitUrl(prUrl: string): string;
|
|
15
24
|
/**
|
|
@@ -1,3 +1,31 @@
|
|
|
1
|
+
import { spawnCommandSync } from '@sumi/plugin-sdk';
|
|
2
|
+
/** gh 返回 PR 评审基准所需的字段;推送门禁与 PR 报告共用,保证两者按同一口径计算基准。 */
|
|
3
|
+
export const PR_BASE_FIELDS = 'headRefOid,baseRefName,baseRefOid,url';
|
|
4
|
+
/** 校验 gh 返回的 PR 基准字段;OID 与分支名的语义由 resolvePrBase 继续校验。 */
|
|
5
|
+
export function parsePrBaseView(value) {
|
|
6
|
+
const view = value;
|
|
7
|
+
if (!view ||
|
|
8
|
+
typeof view !== 'object' ||
|
|
9
|
+
typeof view.headRefOid !== 'string' ||
|
|
10
|
+
typeof view.baseRefName !== 'string' ||
|
|
11
|
+
typeof view.baseRefOid !== 'string' ||
|
|
12
|
+
typeof view.url !== 'string')
|
|
13
|
+
throw new Error('GitHub 返回的 PR 信息缺少 head、目标分支或地址');
|
|
14
|
+
return { headRefOid: view.headRefOid, baseRefName: view.baseRefName, baseRefOid: view.baseRefOid, url: view.url };
|
|
15
|
+
}
|
|
16
|
+
/** timeout(毫秒)用于不能长时间挂起的调用方;超时按失败返回。 */
|
|
17
|
+
export function ghRunner(cwd, timeout) {
|
|
18
|
+
return (args) => {
|
|
19
|
+
const r = spawnCommandSync('gh', args, { cwd, encoding: 'utf8', windowsHide: true, ...(timeout ? { timeout } : {}) });
|
|
20
|
+
return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '', error: r.error };
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function gitRunner(cwd) {
|
|
24
|
+
return (args) => {
|
|
25
|
+
const r = spawnCommandSync('git', args, { cwd, encoding: 'utf8', windowsHide: true });
|
|
26
|
+
return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' };
|
|
27
|
+
};
|
|
28
|
+
}
|
|
1
29
|
const oid = (value, label) => {
|
|
2
30
|
if (!/^[0-9a-f]{40,64}$/.test(value))
|
|
3
31
|
throw new Error(`GitHub 返回的 ${label} OID 无效:${value || '(空)'}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pr-base.js","sourceRoot":"","sources":["../src/pr-base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pr-base.js","sourceRoot":"","sources":["../src/pr-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { GhRunner } from './pr-base.js';
|
|
2
2
|
/** gh pr comment 单次最多接受的附件数。 */
|
|
3
3
|
export declare const MAX_ATTACHMENTS = 50;
|
|
4
|
-
export declare const PR_REPORT_USAGE = "\u7528\u6CD5\uFF1Asumi pr-report <PR \u53F7> [--attach <\u6587\u4EF6>[#\u8BF4\u660E]]...";
|
|
4
|
+
export declare const PR_REPORT_USAGE = "\u7528\u6CD5\uFF1Asumi pr-report <PR \u53F7> [--force] [--attach <\u6587\u4EF6>[#\u8BF4\u660E]]...";
|
|
5
5
|
export interface PrReportArgs {
|
|
6
6
|
pr: string;
|
|
7
7
|
attach: string[];
|
|
8
|
+
force: boolean;
|
|
8
9
|
}
|
|
9
10
|
/** 解析 pr-report 的参数:一个 PR 号,任意个 --attach <值> / --attach=<值>,位置不限。出错时返回错误说明。 */
|
|
10
11
|
export declare function parsePrReportArgs(argv: string[]): PrReportArgs | {
|
|
@@ -24,8 +25,6 @@ export declare function resolveAttachments(specs: string[], cwd: string): {
|
|
|
24
25
|
} | {
|
|
25
26
|
error: string;
|
|
26
27
|
};
|
|
27
|
-
export type GhRunner = (args: string[]) => CommandResult;
|
|
28
|
-
export declare function ghRunner(cwd: string): GhRunner;
|
|
29
28
|
export type PublishResult = {
|
|
30
29
|
ok: true;
|
|
31
30
|
action: 'created' | 'updated' | 'replaced';
|
|
@@ -35,6 +34,19 @@ export type PublishResult = {
|
|
|
35
34
|
ok: false;
|
|
36
35
|
message: string;
|
|
37
36
|
};
|
|
37
|
+
/** 后置服务验收:发布命令成功后,必须从 GitHub 重新读到当前 head 上的本次完整报告。 */
|
|
38
|
+
export declare function verifyPublishedReport(options: {
|
|
39
|
+
pr: string;
|
|
40
|
+
head: string;
|
|
41
|
+
body: string;
|
|
42
|
+
attachments: boolean;
|
|
43
|
+
gh: GhRunner;
|
|
44
|
+
}): {
|
|
45
|
+
ok: true;
|
|
46
|
+
} | {
|
|
47
|
+
ok: false;
|
|
48
|
+
message: string;
|
|
49
|
+
};
|
|
38
50
|
/**
|
|
39
51
|
* 发布报告评论。无附件时:已有报告评论则原地更新,否则新建。
|
|
40
52
|
* 有附件时:编辑评论无法上传附件,因此总是用 gh pr comment --attach 新建;已有报告评论时新建成功后再删除全部旧报告评论,
|