@alwaysmeticulous/cli 2.331.1 → 2.331.2
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/dist/commands/agent/complete-base-run.command.d.ts +0 -15
- package/dist/commands/agent/complete-base-run.command.d.ts.map +1 -1
- package/dist/commands/agent/complete-base-run.command.js +83 -88
- package/dist/commands/agent/complete-base-run.command.js.map +1 -1
- package/dist/commands/agent/complete-base-run.command.spec.js +113 -116
- package/dist/commands/agent/complete-base-run.command.spec.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.handler.spec.js +2 -4
- package/dist/commands/agent/js-coverage.command.handler.spec.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +6 -6
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-check.command.js +17 -13
- package/dist/commands/agent/test-run-check.command.js.map +1 -1
- package/dist/commands/agent/test-run-check.command.spec.js +4 -4
- package/dist/commands/agent/test-run-check.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +27 -18
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +47 -3
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/onboard/templates/docs/reference/cli-commands.ts +1 -2
- package/dist/utils/base-run-rejection.d.ts +20 -0
- package/dist/utils/base-run-rejection.d.ts.map +1 -0
- package/dist/utils/base-run-rejection.js +48 -0
- package/dist/utils/base-run-rejection.js.map +1 -0
- package/dist/utils/resolve-test-run-from-commit.d.ts +0 -1
- package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +10 -8
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import type { CommandModule } from "yargs";
|
|
2
|
-
/**
|
|
3
|
-
* `STALL_GRACE_MS` (imported as `POLL_TIMEOUT_MS`) is how long
|
|
4
|
-
* `unexecutedSessionCount` must stay flat (no new sessions scheduled, count
|
|
5
|
-
* unchanged) before giving up early rather than waiting out the full timeout.
|
|
6
|
-
* A session pool has no status this command can wait on — see
|
|
7
|
-
* {@link waitForBaseRunCompletion} — so a stall is detected from the
|
|
8
|
-
* completeness count itself: sessions genuinely in flight keep moving as
|
|
9
|
-
* their chunk completes, while sessions `completeBaseRun` currently has
|
|
10
|
-
* nothing further to schedule for stay flat indefinitely. A chunk replays
|
|
11
|
-
* many sessions together and only reports once the whole chunk finishes, so a
|
|
12
|
-
* perfectly healthy chunk can show no progress at all for several minutes —
|
|
13
|
-
* this has to be sized in minutes, not seconds, or it reads normal replay
|
|
14
|
-
* time as a dead end. Kept well under `COMPLETION_TIMEOUT_MS` so a
|
|
15
|
-
* genuinely-stuck run is still reported long before the full timeout.
|
|
16
|
-
*/
|
|
17
2
|
interface Options {
|
|
18
3
|
apiToken?: string | null | undefined;
|
|
19
4
|
testRunId: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete-base-run.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/complete-base-run.command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"complete-base-run.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/complete-base-run.command.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AA8B3C,UAAU,OAAO;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,4BAA4B,EAAE,OAAO,CAAC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AA4PD,eAAO,MAAM,sBAAsB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAkClE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="
|
|
2
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="53799c39-30a2-5a99-9ca1-6b22a0620ad3")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.completeBaseRunCommand = void 0;
|
|
@@ -10,12 +10,6 @@ const sentry_utils_1 = require("../../command-utils/sentry.utils");
|
|
|
10
10
|
const cli_user_error_1 = require("../../utils/cli-user-error");
|
|
11
11
|
const error_response_body_1 = require("../../utils/error-response-body");
|
|
12
12
|
const resolve_test_run_from_commit_1 = require("../../utils/resolve-test-run-from-commit");
|
|
13
|
-
/**
|
|
14
|
-
* How long to wait for a completed base run to finish. Longer than the usual
|
|
15
|
-
* poll deadline: this waits out a full test run's replays (every selected
|
|
16
|
-
* session), not a run that was already most of the way through.
|
|
17
|
-
*/
|
|
18
|
-
const COMPLETION_TIMEOUT_MS = 45 * 60 * 1000;
|
|
19
13
|
/** How often to re-check completion while waiting. */
|
|
20
14
|
const POLL_INTERVAL_MS = 10_000;
|
|
21
15
|
/**
|
|
@@ -56,40 +50,60 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
56
50
|
else if (result.unexecutedSessionCount === 0) {
|
|
57
51
|
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} has already replayed all ${result.configuredSessionCount} of its selected sessions; nothing to do.`);
|
|
58
52
|
}
|
|
59
|
-
else {
|
|
53
|
+
else if (result.unexecutedSessionCount > result.unobtainableSessionCount) {
|
|
60
54
|
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} has nothing further to schedule right now, but ${result.unexecutedSessionCount} of its ${result.configuredSessionCount} selected sessions still lack a result — likely still in flight from an earlier call.`);
|
|
61
55
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// once coverage is already servable.
|
|
65
|
-
let { status, unexecutedSessionCount } = result;
|
|
66
|
-
if (!dontWaitForTestRunToComplete && !isCoverageServable(result)) {
|
|
67
|
-
({ status, unexecutedSessionCount } = await waitForBaseRunCompletion(client, resolvedTestRunId, result));
|
|
56
|
+
else {
|
|
57
|
+
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} has ${result.unobtainableSessionCount} of its ${result.configuredSessionCount} selected sessions that can no longer be replayed on it, and nothing left to schedule.`);
|
|
68
58
|
}
|
|
59
|
+
// Wait by default, so the run this returns is one nothing more can be
|
|
60
|
+
// scheduled for — the point of completing it.
|
|
61
|
+
let { status, unexecutedSessionCount, unobtainableSessionCount } = result;
|
|
62
|
+
if (!dontWaitForTestRunToComplete && !hasReplayedAllItCan(result)) {
|
|
63
|
+
({ status, unexecutedSessionCount, unobtainableSessionCount } =
|
|
64
|
+
await waitForBaseRunCompletion(client, resolvedTestRunId, result));
|
|
65
|
+
}
|
|
66
|
+
const output = {
|
|
67
|
+
...result,
|
|
68
|
+
status,
|
|
69
|
+
unexecutedSessionCount,
|
|
70
|
+
unobtainableSessionCount,
|
|
71
|
+
};
|
|
69
72
|
if (json) {
|
|
70
|
-
(0, print_json_1.printJson)(
|
|
73
|
+
(0, print_json_1.printJson)(output);
|
|
71
74
|
}
|
|
72
75
|
else {
|
|
73
|
-
printKeyValueLines(
|
|
76
|
+
printKeyValueLines(output);
|
|
74
77
|
}
|
|
75
78
|
};
|
|
76
79
|
/**
|
|
77
|
-
* Whether
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
*
|
|
80
|
+
* Whether the run is as complete as replaying can make it — what this command
|
|
81
|
+
* waits for, computed from the cheap read-only poll so the loop needs no
|
|
82
|
+
* write-path call to finish.
|
|
83
|
+
*
|
|
84
|
+
* `unexecutedSessionCount` reaching `unobtainableSessionCount` is the
|
|
85
|
+
* scheduling half: nothing is left that replaying could still supply.
|
|
86
|
+
* `isTestRunComplete` — a usable `Success`/`Failure` verdict, matching the
|
|
87
|
+
* backend's own gate — is the artifact half: results land per-chunk as soon as
|
|
88
|
+
* replays finish, but the coverage `js-coverage` serves is only rewritten by a
|
|
89
|
+
* later, separate post-process step, which is also what settles a pool's
|
|
90
|
+
* status. Without it, a pool that has just been appended to looks done while
|
|
91
|
+
* the artifact still describes the old subset.
|
|
92
|
+
*
|
|
93
|
+
* Note this says nothing about whether the result is *good enough* for any
|
|
94
|
+
* particular consumer — whether a remainder that can never be replayed is a
|
|
95
|
+
* small enough share of the set to ignore is `js-coverage`'s question, and it
|
|
96
|
+
* answers it with the numbers when it refuses. This command's job ends at
|
|
97
|
+
* "nothing more can be scheduled".
|
|
89
98
|
*/
|
|
90
|
-
const
|
|
91
|
-
status
|
|
92
|
-
|
|
99
|
+
const hasReplayedAllItCan = ({ status, unexecutedSessionCount, unobtainableSessionCount, }) => unexecutedSessionCount <= unobtainableSessionCount &&
|
|
100
|
+
(0, resolve_test_run_from_commit_1.isTestRunComplete)(status);
|
|
101
|
+
/** Reject a whole-run terminal failure instead of polling a state that cannot recover. */
|
|
102
|
+
const assertCoverageCanStillBecomeServable = (testRunId, status) => {
|
|
103
|
+
if ((0, resolve_test_run_from_commit_1.isTestRunFailed)(status) || status === "Skipped") {
|
|
104
|
+
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(testRunId, status, { resultName: "coverage" });
|
|
105
|
+
}
|
|
106
|
+
};
|
|
93
107
|
/**
|
|
94
108
|
* The same session-completeness diff the backend's
|
|
95
109
|
* `TestRunChunkService.findBaseRunSessionCompleteness` computes, done
|
|
@@ -110,85 +124,66 @@ const countUnexecutedSessions = (testRun) => {
|
|
|
110
124
|
return unexecutedSessionCount;
|
|
111
125
|
};
|
|
112
126
|
/**
|
|
113
|
-
* Waits until
|
|
114
|
-
* {@link
|
|
127
|
+
* Waits until the run has replayed everything it can (see
|
|
128
|
+
* {@link hasReplayedAllItCan}), polling the plain, read-only `getTestRun`
|
|
115
129
|
* every {@link POLL_INTERVAL_MS} rather than re-invoking `complete-base-run`
|
|
116
130
|
* itself (idempotent, but a write — see its own docstring) on every tick:
|
|
117
|
-
* `getTestRun`
|
|
118
|
-
* {@link countUnexecutedSessions}), so most ticks need no write-path traffic
|
|
119
|
-
*
|
|
120
|
-
* {@link RESCHEDULE_INTERVAL_MS},
|
|
121
|
-
* to (re-)schedule (see `BaseRunCompletionService.completeBaseRun`)
|
|
122
|
-
* `getTestRun` only observes
|
|
131
|
+
* `getTestRun` carries enough to track progress (see
|
|
132
|
+
* {@link countUnexecutedSessions}), so most ticks need no write-path traffic at
|
|
133
|
+
* all. `complete-base-run` is re-invoked at the coarser
|
|
134
|
+
* {@link RESCHEDULE_INTERVAL_MS}, which is what picks up anything newly
|
|
135
|
+
* eligible to (re-)schedule (see `BaseRunCompletionService.completeBaseRun`)
|
|
136
|
+
* and what refreshes `unobtainableSessionCount`; `getTestRun` only observes
|
|
137
|
+
* progress, it can't cause it.
|
|
123
138
|
*
|
|
124
139
|
* A session pool's `status` by itself is not a wait-worthy signal: it can
|
|
125
140
|
* rest in `Partial` indefinitely between requests (not "still running"), and
|
|
126
141
|
* can equally sit in a stale `Success`/`Failure` from before this call's work
|
|
127
|
-
* even starts (scheduling doesn't itself move the status).
|
|
128
|
-
*
|
|
142
|
+
* even starts (scheduling doesn't itself move the status). Sessions that could
|
|
143
|
+
* still replay running out is the signal that scheduling is done; `status`
|
|
129
144
|
* leaving `Partial` is the signal that the coverage artifact has caught up
|
|
130
145
|
* with that.
|
|
131
146
|
*
|
|
132
|
-
* Gives up
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* not that it's permanently stuck. This can't be told apart from a genuinely
|
|
140
|
-
* wedged state with certainty, hence the hedged error message rather than a
|
|
141
|
-
* confident diagnosis.
|
|
147
|
+
* Gives up after {@link POLL_TIMEOUT_MS} — the same deadline
|
|
148
|
+
* `awaitTestRunCompletion` uses for a regular test run — and returns
|
|
149
|
+
* whatever it has rather than erroring: a base run's remaining sessions can
|
|
150
|
+
* legitimately take longer than that to replay, so timing out here isn't a
|
|
151
|
+
* failure, just an "ask again later." A remainder that is definitively beyond
|
|
152
|
+
* recovering is not waited on at all — it satisfies {@link hasReplayedAllItCan},
|
|
153
|
+
* so the command returns immediately and reports it.
|
|
142
154
|
*/
|
|
143
155
|
const waitForBaseRunCompletion = async (client, testRunId, initial) => {
|
|
144
156
|
(0, common_1.logProgress)(`Waiting for test run ${testRunId} to finish replaying...`);
|
|
145
|
-
let unexecutedSessionCount = initial
|
|
157
|
+
let { unexecutedSessionCount, unobtainableSessionCount } = initial;
|
|
146
158
|
let status = initial.status;
|
|
147
|
-
let stalledSinceMs = null;
|
|
148
159
|
let lastRescheduledAtMs = performance.now();
|
|
149
|
-
const deadline = performance.now() +
|
|
150
|
-
while (!
|
|
160
|
+
const deadline = performance.now() + resolve_test_run_from_commit_1.POLL_TIMEOUT_MS;
|
|
161
|
+
while (!hasReplayedAllItCan({
|
|
162
|
+
status,
|
|
163
|
+
unexecutedSessionCount,
|
|
164
|
+
unobtainableSessionCount,
|
|
165
|
+
})) {
|
|
151
166
|
if (performance.now() >= deadline) {
|
|
152
|
-
|
|
153
|
-
? `Test run ${testRunId} still has ${unexecutedSessionCount} session(s)
|
|
154
|
-
: `Test run ${testRunId} has replayed
|
|
167
|
+
(0, common_1.logNotice)(unexecutedSessionCount > unobtainableSessionCount
|
|
168
|
+
? `Test run ${testRunId} still has ${unexecutedSessionCount - unobtainableSessionCount} session(s) that could still replay but have no result after ${Math.round(resolve_test_run_from_commit_1.POLL_TIMEOUT_MS / 60_000)} minutes. It may still be running — check back later, or re-run this command to keep waiting.`
|
|
169
|
+
: `Test run ${testRunId} has replayed everything it can, but its coverage still hasn't finished being recomputed for the full set after ${Math.round(resolve_test_run_from_commit_1.POLL_TIMEOUT_MS / 60_000)} minutes (status: ${status}). Check back later, or re-run this command to keep waiting.`);
|
|
170
|
+
return { status, unexecutedSessionCount, unobtainableSessionCount };
|
|
155
171
|
}
|
|
156
172
|
await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
157
173
|
const testRun = await (0, client_1.getTestRun)({ client, testRunId });
|
|
158
|
-
|
|
159
|
-
const noProgress = newUnexecutedSessionCount === unexecutedSessionCount;
|
|
160
|
-
unexecutedSessionCount = newUnexecutedSessionCount;
|
|
174
|
+
unexecutedSessionCount = countUnexecutedSessions(testRun);
|
|
161
175
|
status = testRun.status;
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
176
|
+
// A run that has gone fatally terminal will never serve coverage, so stop
|
|
177
|
+
// rather than polling a state that cannot recover.
|
|
178
|
+
assertCoverageCanStillBecomeServable(testRunId, status);
|
|
165
179
|
const now = performance.now();
|
|
166
|
-
if (!noProgress) {
|
|
167
|
-
stalledSinceMs = null;
|
|
168
|
-
}
|
|
169
|
-
else if (stalledSinceMs == null) {
|
|
170
|
-
stalledSinceMs = now;
|
|
171
|
-
}
|
|
172
|
-
else if (now - stalledSinceMs >= resolve_test_run_from_commit_1.POLL_TIMEOUT_MS) {
|
|
173
|
-
throw new cli_user_error_1.CliUserError(unexecutedSessionCount > 0
|
|
174
|
-
? `Test run ${testRunId} still has ${unexecutedSessionCount} session(s) without a result, and complete-base-run has had nothing further to schedule for them for over ${Math.round(resolve_test_run_from_commit_1.POLL_TIMEOUT_MS / 60_000)} minutes — this may just need more time. Check back later, re-run with --dontWaitForTestRunToComplete to return immediately, or ask for the project's overall coverage instead (js-coverage --latestForProject).`
|
|
175
|
-
: `Test run ${testRunId} has replayed all its selected sessions, but its coverage still hasn't finished being recomputed for the full set (status: ${status}) after over ${Math.round(resolve_test_run_from_commit_1.POLL_TIMEOUT_MS / 60_000)} minutes. This may just need more time — check back later, re-run with --dontWaitForTestRunToComplete to return immediately, or ask for the project's overall coverage instead (js-coverage --latestForProject).`);
|
|
176
|
-
}
|
|
177
180
|
if (now - lastRescheduledAtMs >= RESCHEDULE_INTERVAL_MS) {
|
|
178
181
|
lastRescheduledAtMs = now;
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
status = rescheduled.status;
|
|
182
|
-
// Picking up newly-eligible work here is real progress even though
|
|
183
|
-
// `unexecutedSessionCount` itself won't move until it lands a result —
|
|
184
|
-
// without this, the stall clock (armed on an earlier, unrelated tick)
|
|
185
|
-
// can still time out right after a reschedule found something to do.
|
|
186
|
-
if (rescheduled.sessionsScheduled > 0) {
|
|
187
|
-
stalledSinceMs = null;
|
|
188
|
-
}
|
|
182
|
+
({ unexecutedSessionCount, unobtainableSessionCount, status } =
|
|
183
|
+
await requestCompletion(client, testRunId));
|
|
189
184
|
}
|
|
190
185
|
}
|
|
191
|
-
return { status, unexecutedSessionCount };
|
|
186
|
+
return { status, unexecutedSessionCount, unobtainableSessionCount };
|
|
192
187
|
};
|
|
193
188
|
/**
|
|
194
189
|
* The backend's response-body `reason`s marking a request it declines as a
|
|
@@ -223,7 +218,7 @@ const printKeyValueLines = (result) => {
|
|
|
223
218
|
};
|
|
224
219
|
exports.completeBaseRunCommand = {
|
|
225
220
|
command: "complete-base-run",
|
|
226
|
-
describe: "Replay the selected sessions a base run has not run yet,
|
|
221
|
+
describe: "Replay the selected sessions which a base run has not run yet. Outputs testRunId, status, unexecutedSessionCount, unobtainableSessionCount, sessionsScheduled and configuredSessionCount, one per line. A base run (in particular associated with a main branch commit) runs sessions on demand for whichever PRs compare against it, so only part of its selected set has run at any point. Useful when a run needs to stand for its whole commit rather than one PR's slice — 'agent js-coverage', for instance, refuses an incomplete base run. Waits up to 10 minutes for nothing more to be schedulable (unexecutedSessionCount down to unobtainableSessionCount, the sessions that can never gain a result), returning whatever it has if that isn't reached by then; pass --dontWaitForTestRunToComplete to return as soon as the work is scheduled. Running it twice is a no-op, not an error.",
|
|
227
222
|
builder: {
|
|
228
223
|
apiToken: { string: true, description: "Meticulous API token." },
|
|
229
224
|
testRunId: {
|
|
@@ -252,4 +247,4 @@ exports.completeBaseRunCommand = {
|
|
|
252
247
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
253
248
|
};
|
|
254
249
|
//# sourceMappingURL=complete-base-run.command.js.map
|
|
255
|
-
//# debugId=
|
|
250
|
+
//# debugId=53799c39-30a2-5a99-9ca1-6b22a0620ad3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"complete-base-run.command.js","sources":["../../../src/commands/agent/complete-base-run.command.ts"],"sourceRoot":"","names":[],"mappings":";;;;;AACA,
|
|
1
|
+
{"version":3,"file":"complete-base-run.command.js","sources":["../../../src/commands/agent/complete-base-run.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"53799c39-30a2-5a99-9ca1-6b22a0620ad3"}
|