fix(release-gate): skip duplicate CI work and stop live LLM blowups
Shared paths like db.mjs were pulling PAGE/DATA live agent suites into every hotfix. Keep those cases for actual page-data changes, resume passed suites on the same artifact, and fail fast on Docker/port issues instead of rerunning 100+ scenarios. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import test from 'node:test';
|
||||
|
||||
import {
|
||||
carryForwardScenario,
|
||||
commandFilesForSuite,
|
||||
shouldRerunImpactSuite,
|
||||
suiteInvalidatedByChanges,
|
||||
} from './resume.mjs';
|
||||
|
||||
const chatSuite = {
|
||||
id: 'chat-routing-contract',
|
||||
mode: 'deterministic',
|
||||
scenarios: ['CHAT-01', 'CHAT-02'],
|
||||
command: [process.execPath, '--test', 'chat-router.test.mjs'],
|
||||
};
|
||||
|
||||
const liveSuite = {
|
||||
id: 'page-data-product-scenarios',
|
||||
mode: 'scenarios',
|
||||
scenarios: ['DATA-01', 'DATA-02'],
|
||||
command: [process.execPath, 'scripts/run-release-gate-page-data-scenarios.mjs'],
|
||||
};
|
||||
|
||||
const previousReport = {
|
||||
mode: 'impact',
|
||||
commit_sha: 'a'.repeat(40),
|
||||
artifact_sha256: 'b'.repeat(64),
|
||||
scenarios: [
|
||||
{ id: 'CHAT-01', status: 'passed', evidence: ['suite=chat-routing-contract'] },
|
||||
{ id: 'CHAT-02', status: 'passed', evidence: ['suite=chat-routing-contract'] },
|
||||
{ id: 'DATA-01', status: 'failed', evidence: ['suite=page-data-product-scenarios'] },
|
||||
{ id: 'DATA-02', status: 'passed', evidence: ['suite=page-data-product-scenarios'] },
|
||||
],
|
||||
};
|
||||
|
||||
test('commandFilesForSuite skips node and flags', () => {
|
||||
assert.deepEqual(
|
||||
commandFilesForSuite({ command: [process.execPath, '--test', 'chat-router.test.mjs'] }),
|
||||
['chat-router.test.mjs'],
|
||||
);
|
||||
});
|
||||
|
||||
test('same commit and artifact skips passed suites and reruns failed live suites', () => {
|
||||
const selectedIds = new Set(['CHAT-01', 'CHAT-02', 'DATA-01', 'DATA-02']);
|
||||
assert.equal(shouldRerunImpactSuite({
|
||||
suite: chatSuite,
|
||||
selectedIds,
|
||||
previousReport,
|
||||
artifactSha256: previousReport.artifact_sha256,
|
||||
commitSha: previousReport.commit_sha,
|
||||
}), false);
|
||||
assert.equal(shouldRerunImpactSuite({
|
||||
suite: liveSuite,
|
||||
selectedIds,
|
||||
previousReport,
|
||||
artifactSha256: previousReport.artifact_sha256,
|
||||
commitSha: previousReport.commit_sha,
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('artifact mismatch forces every selected suite to rerun', () => {
|
||||
assert.equal(shouldRerunImpactSuite({
|
||||
suite: chatSuite,
|
||||
selectedIds: new Set(['CHAT-01', 'CHAT-02']),
|
||||
previousReport,
|
||||
artifactSha256: 'c'.repeat(64),
|
||||
commitSha: previousReport.commit_sha,
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('live suites rerun on a new commit even when previous cases passed', () => {
|
||||
const passedLive = {
|
||||
...previousReport,
|
||||
scenarios: [
|
||||
{ id: 'DATA-01', status: 'passed' },
|
||||
{ id: 'DATA-02', status: 'passed' },
|
||||
],
|
||||
};
|
||||
assert.equal(shouldRerunImpactSuite({
|
||||
suite: liveSuite,
|
||||
selectedIds: new Set(['DATA-01', 'DATA-02']),
|
||||
previousReport: passedLive,
|
||||
artifactSha256: passedLive.artifact_sha256,
|
||||
commitSha: 'd'.repeat(40),
|
||||
}), true);
|
||||
});
|
||||
|
||||
test('changing a suite command file invalidates that suite', () => {
|
||||
assert.equal(suiteInvalidatedByChanges(chatSuite, ['chat-router.test.mjs']), true);
|
||||
assert.equal(suiteInvalidatedByChanges(chatSuite, ['wechat-mp.mjs']), false);
|
||||
assert.equal(suiteInvalidatedByChanges(chatSuite, ['release-gate/coverage.mjs']), true);
|
||||
});
|
||||
|
||||
test('carryForwardScenario keeps prior evidence and marks reuse', () => {
|
||||
const carried = carryForwardScenario({ id: 'CHAT-01', status: 'passed', evidence: ['old'] });
|
||||
assert.equal(carried.status, 'passed');
|
||||
assert.deepEqual(carried.evidence, ['old', 'carried_forward=true']);
|
||||
});
|
||||
Reference in New Issue
Block a user