@alwaysmeticulous/cli 2.322.0 → 2.324.0
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/agent-review-writes.command.spec.d.ts +2 -0
- package/dist/commands/agent/agent-review-writes.command.spec.d.ts.map +1 -0
- package/dist/commands/agent/agent-review-writes.command.spec.js +96 -0
- package/dist/commands/agent/agent-review-writes.command.spec.js.map +1 -0
- package/dist/commands/agent/create-diff-comment.command.d.ts +13 -0
- package/dist/commands/agent/create-diff-comment.command.d.ts.map +1 -0
- package/dist/commands/agent/create-diff-comment.command.js +57 -0
- package/dist/commands/agent/create-diff-comment.command.js.map +1 -0
- package/dist/commands/agent/diff-comment-write.utils.d.ts +13 -0
- package/dist/commands/agent/diff-comment-write.utils.d.ts.map +1 -0
- package/dist/commands/agent/diff-comment-write.utils.js +19 -0
- package/dist/commands/agent/diff-comment-write.utils.js.map +1 -0
- package/dist/commands/agent/diff-comments.command.d.ts.map +1 -1
- package/dist/commands/agent/diff-comments.command.js +15 -4
- package/dist/commands/agent/diff-comments.command.js.map +1 -1
- package/dist/commands/agent/diff-comments.command.spec.js +29 -4
- package/dist/commands/agent/diff-comments.command.spec.js.map +1 -1
- package/dist/commands/agent/ignore-diff.command.d.ts +13 -0
- package/dist/commands/agent/ignore-diff.command.d.ts.map +1 -0
- package/dist/commands/agent/ignore-diff.command.js +54 -0
- package/dist/commands/agent/ignore-diff.command.js.map +1 -0
- package/dist/commands/agent/index.d.ts.map +1 -1
- package/dist/commands/agent/index.js +16 -6
- package/dist/commands/agent/index.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.d.ts +2 -2
- package/dist/commands/agent/js-coverage.command.d.ts.map +1 -1
- package/dist/commands/agent/js-coverage.command.js +6 -5
- package/dist/commands/agent/js-coverage.command.js.map +1 -1
- package/dist/commands/agent/js-coverage.command.spec.js +7 -6
- package/dist/commands/agent/js-coverage.command.spec.js.map +1 -1
- package/dist/commands/agent/reject-diff.command.d.ts +13 -0
- package/dist/commands/agent/reject-diff.command.d.ts.map +1 -0
- package/dist/commands/agent/reject-diff.command.js +54 -0
- package/dist/commands/agent/reject-diff.command.js.map +1 -0
- package/dist/commands/agent/reject-diff.command.spec.d.ts +2 -0
- package/dist/commands/agent/reject-diff.command.spec.d.ts.map +1 -0
- package/dist/commands/agent/reject-diff.command.spec.js +61 -0
- package/dist/commands/agent/reject-diff.command.spec.js.map +1 -0
- package/dist/commands/agent/reply-to-diff-comment.command.d.ts +10 -0
- package/dist/commands/agent/reply-to-diff-comment.command.d.ts.map +1 -0
- package/dist/commands/agent/reply-to-diff-comment.command.js +47 -0
- package/dist/commands/agent/reply-to-diff-comment.command.js.map +1 -0
- package/dist/commands/agent/sessions.command.d.ts +3 -0
- package/dist/commands/agent/sessions.command.d.ts.map +1 -1
- package/dist/commands/agent/sessions.command.js +46 -5
- package/dist/commands/agent/sessions.command.js.map +1 -1
- package/dist/commands/agent/sessions.command.spec.js +30 -7
- package/dist/commands/agent/sessions.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-checks.command.d.ts +15 -0
- package/dist/commands/agent/test-run-checks.command.d.ts.map +1 -0
- package/dist/commands/agent/test-run-checks.command.js +121 -0
- package/dist/commands/agent/test-run-checks.command.js.map +1 -0
- package/dist/commands/agent/test-run-checks.command.spec.d.ts +2 -0
- package/dist/commands/agent/test-run-checks.command.spec.d.ts.map +1 -0
- package/dist/commands/agent/test-run-checks.command.spec.js +132 -0
- package/dist/commands/agent/test-run-checks.command.spec.js.map +1 -0
- package/dist/commands/agent/test-run-diffs.command.d.ts +1 -0
- package/dist/commands/agent/test-run-diffs.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.js +32 -40
- package/dist/commands/agent/test-run-diffs.command.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.command.spec.js +114 -52
- package/dist/commands/agent/test-run-diffs.command.spec.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.d.ts +1 -2
- package/dist/commands/agent/test-run-diffs.utils.d.ts.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.js +6 -7
- package/dist/commands/agent/test-run-diffs.utils.js.map +1 -1
- package/dist/commands/agent/test-run-diffs.utils.spec.js +7 -10
- package/dist/commands/agent/test-run-diffs.utils.spec.js.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.d.ts.map +1 -1
- package/dist/commands/agent/test-run-for-commit.command.js +5 -4
- package/dist/commands/agent/test-run-for-commit.command.js.map +1 -1
- package/dist/commands/auth/__tests__/get-project.command.spec.js +48 -42
- package/dist/commands/auth/__tests__/get-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/list-projects.command.spec.js +11 -10
- package/dist/commands/auth/__tests__/list-projects.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/set-project.command.spec.js +6 -7
- package/dist/commands/auth/__tests__/set-project.command.spec.js.map +1 -1
- package/dist/commands/auth/__tests__/whoami.command.spec.js +77 -124
- package/dist/commands/auth/__tests__/whoami.command.spec.js.map +1 -1
- package/dist/commands/auth/get-project.command.d.ts +6 -2
- package/dist/commands/auth/get-project.command.d.ts.map +1 -1
- package/dist/commands/auth/get-project.command.js +25 -24
- package/dist/commands/auth/get-project.command.js.map +1 -1
- package/dist/commands/auth/list-projects.command.d.ts.map +1 -1
- package/dist/commands/auth/list-projects.command.js +4 -8
- package/dist/commands/auth/list-projects.command.js.map +1 -1
- package/dist/commands/auth/set-project.command.d.ts +1 -0
- package/dist/commands/auth/set-project.command.d.ts.map +1 -1
- package/dist/commands/auth/set-project.command.js +22 -9
- package/dist/commands/auth/set-project.command.js.map +1 -1
- package/dist/commands/auth/whoami.command.d.ts.map +1 -1
- package/dist/commands/auth/whoami.command.js +94 -87
- package/dist/commands/auth/whoami.command.js.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.d.ts.map +1 -1
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js +22 -14
- package/dist/commands/ci/run-with-uploaded-asset-chunks.command.js.map +1 -1
- package/dist/commands/ci/run.command.d.ts.map +1 -1
- package/dist/commands/ci/run.command.js +6 -4
- package/dist/commands/ci/run.command.js.map +1 -1
- package/dist/commands/record/__tests__/backend.command.spec.js +54 -4
- package/dist/commands/record/__tests__/backend.command.spec.js.map +1 -1
- package/dist/commands/record/backend.command.d.ts.map +1 -1
- package/dist/commands/record/backend.command.js +196 -100
- package/dist/commands/record/backend.command.js.map +1 -1
- package/dist/utils/__tests__/project-selection-hint.spec.d.ts +2 -0
- package/dist/utils/__tests__/project-selection-hint.spec.d.ts.map +1 -0
- package/dist/utils/__tests__/project-selection-hint.spec.js +73 -0
- package/dist/utils/__tests__/project-selection-hint.spec.js.map +1 -0
- package/dist/utils/__tests__/resolve-project-identifier.spec.js +2 -27
- package/dist/utils/__tests__/resolve-project-identifier.spec.js.map +1 -1
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js +9 -2
- package/dist/utils/__tests__/resolve-test-run-from-commit.spec.js.map +1 -1
- package/dist/utils/__tests__/select-project.spec.js +23 -22
- package/dist/utils/__tests__/select-project.spec.js.map +1 -1
- package/dist/utils/handle-auth-failure.d.ts +27 -0
- package/dist/utils/handle-auth-failure.d.ts.map +1 -1
- package/dist/utils/handle-auth-failure.js +44 -3
- package/dist/utils/handle-auth-failure.js.map +1 -1
- package/dist/utils/project-selection-hint.d.ts +16 -0
- package/dist/utils/project-selection-hint.d.ts.map +1 -0
- package/dist/utils/project-selection-hint.js +82 -0
- package/dist/utils/project-selection-hint.js.map +1 -0
- package/dist/utils/resolve-project-identifier.d.ts +0 -13
- package/dist/utils/resolve-project-identifier.d.ts.map +1 -1
- package/dist/utils/resolve-project-identifier.js +3 -26
- package/dist/utils/resolve-project-identifier.js.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.d.ts.map +1 -1
- package/dist/utils/resolve-test-run-from-commit.js +7 -3
- package/dist/utils/resolve-test-run-from-commit.js.map +1 -1
- package/dist/utils/select-project.d.ts +20 -4
- package/dist/utils/select-project.d.ts.map +1 -1
- package/dist/utils/select-project.js +39 -13
- package/dist/utils/select-project.js.map +1 -1
- package/package.json +14 -14
|
@@ -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]="73d31994-11eb-5406-aadd-6dd6a1b228ab")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
const vitest_1 = require("vitest");
|
|
@@ -46,6 +46,9 @@ const SESSIONS = [
|
|
|
46
46
|
recordedBy: "a@b.com",
|
|
47
47
|
status: "original",
|
|
48
48
|
startUrl: "https://example.com",
|
|
49
|
+
durationSeconds: 42,
|
|
50
|
+
numberUserEvents: 7,
|
|
51
|
+
numberUrlsVisited: 2,
|
|
49
52
|
},
|
|
50
53
|
{
|
|
51
54
|
id: "session-2_p1704825600000",
|
|
@@ -53,6 +56,10 @@ const SESSIONS = [
|
|
|
53
56
|
recordedAt: "2026-07-15T00:00:00.000Z",
|
|
54
57
|
status: "patched",
|
|
55
58
|
startUrl: "https://example.com/login",
|
|
59
|
+
// Omitted models a session where a duration couldn't be computed (e.g.
|
|
60
|
+
// recorded before duration tracking existed).
|
|
61
|
+
numberUserEvents: 3,
|
|
62
|
+
numberUrlsVisited: 4,
|
|
56
63
|
abandonedReason: "max_session_time",
|
|
57
64
|
},
|
|
58
65
|
];
|
|
@@ -89,9 +96,12 @@ const SESSIONS = [
|
|
|
89
96
|
"patched",
|
|
90
97
|
].join("\t"));
|
|
91
98
|
});
|
|
92
|
-
(0, vitest_1.it)("
|
|
99
|
+
(0, vitest_1.it)("appends requested optional columns in output order", async () => {
|
|
93
100
|
await runHandler({
|
|
94
101
|
json: false,
|
|
102
|
+
includeDurationSeconds: true,
|
|
103
|
+
includeNumberUserEvents: true,
|
|
104
|
+
includeNumberUrlsVisited: true,
|
|
95
105
|
includeStartUrl: true,
|
|
96
106
|
includeAbandonedReason: true,
|
|
97
107
|
});
|
|
@@ -102,13 +112,17 @@ const SESSIONS = [
|
|
|
102
112
|
"recordedAt",
|
|
103
113
|
"recordedBy",
|
|
104
114
|
"status",
|
|
115
|
+
"durationSeconds",
|
|
116
|
+
"numberUserEvents",
|
|
117
|
+
"numberUrlsVisited",
|
|
105
118
|
"startUrl",
|
|
106
119
|
"abandonedReason",
|
|
107
120
|
].join("\t"));
|
|
108
|
-
// session-1: has startUrl, not abandoned (empty
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
// session-1: has durationSeconds and startUrl, not abandoned (empty
|
|
122
|
+
// abandonedReason cell).
|
|
123
|
+
(0, vitest_1.expect)(lines[1].endsWith("\t42\t7\t2\thttps://example.com\t")).toBe(true);
|
|
124
|
+
// session-2: has no durationSeconds (empty cell), has everything else.
|
|
125
|
+
(0, vitest_1.expect)(lines[2].endsWith("\t\t3\t4\thttps://example.com/login\tmax_session_time")).toBe(true);
|
|
112
126
|
});
|
|
113
127
|
(0, vitest_1.it)("--excludeSyntheticSessions drops the status column", async () => {
|
|
114
128
|
await runHandler({ json: false, excludeSyntheticSessions: true });
|
|
@@ -143,6 +157,9 @@ const SESSIONS = [
|
|
|
143
157
|
recordedBy: "a@b.com",
|
|
144
158
|
excludeSyntheticSessions: true,
|
|
145
159
|
visitedUrlFilter: "*/checkout*",
|
|
160
|
+
includeDurationSeconds: true,
|
|
161
|
+
includeNumberUserEvents: true,
|
|
162
|
+
includeNumberUrlsVisited: true,
|
|
146
163
|
includeStartUrl: true,
|
|
147
164
|
includeAbandonedReason: true,
|
|
148
165
|
limit: 25,
|
|
@@ -157,6 +174,9 @@ const SESSIONS = [
|
|
|
157
174
|
recordedBy: "a@b.com",
|
|
158
175
|
excludeSyntheticSessions: true,
|
|
159
176
|
visitedUrlFilter: "*/checkout*",
|
|
177
|
+
includeDurationSeconds: true,
|
|
178
|
+
includeNumberUserEvents: true,
|
|
179
|
+
includeNumberUrlsVisited: true,
|
|
160
180
|
includeStartUrl: true,
|
|
161
181
|
includeAbandonedReason: true,
|
|
162
182
|
limit: 25,
|
|
@@ -174,6 +194,9 @@ const SESSIONS = [
|
|
|
174
194
|
recordedBy: undefined,
|
|
175
195
|
excludeSyntheticSessions: undefined,
|
|
176
196
|
visitedUrlFilter: undefined,
|
|
197
|
+
includeDurationSeconds: undefined,
|
|
198
|
+
includeNumberUserEvents: undefined,
|
|
199
|
+
includeNumberUrlsVisited: undefined,
|
|
177
200
|
includeStartUrl: undefined,
|
|
178
201
|
includeAbandonedReason: undefined,
|
|
179
202
|
limit: undefined,
|
|
@@ -212,4 +235,4 @@ const SESSIONS = [
|
|
|
212
235
|
});
|
|
213
236
|
});
|
|
214
237
|
//# sourceMappingURL=sessions.command.spec.js.map
|
|
215
|
-
//# debugId=
|
|
238
|
+
//# debugId=73d31994-11eb-5406-aadd-6dd6a1b228ab
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.command.spec.js","sources":["../../../src/commands/agent/sessions.command.spec.ts"],"sourceRoot":"","names":[],"mappings":";;;;AAAA,mCAAyE;AACzE,yDAAqD;AAErD,+EAA+E;AAC/E,iDAAiD;AACjD,WAAE,CAAC,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAAC,CAAC;IACjD,WAAW,EAAE,CAAC,EAAyC,EAAE,EAAE,CAAC,EAAE;CAC/D,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG;IACjB,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;IACb,IAAI,EAAE,WAAE,CAAC,EAAE,EAAE;IACb,KAAK,EAAE,WAAE,CAAC,EAAE,EAAE;IACd,KAAK,EAAE,WAAE,CAAC,EAAE,EAAE;CACf,CAAC;AAEF,MAAM,KAAK,GAAG,WAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9B,qBAAqB,EAAE,WAAE,CAAC,EAAE,EAAE;IAC9B,WAAW,EAAE,WAAE,CAAC,EAAE,EAAE;IACpB,SAAS,EAAE,WAAE,CAAC,EAAE,EAAE;CACnB,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU;IAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;CAC3B,CAAC,CAAC,CAAC;AAEJ,WAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;IAClD,WAAW,EAAE,KAAK,CAAC,WAAW;CAC/B,CAAC,CAAC,CAAC;AAEJ,MAAM,UAAU,GAAG,CACjB,
|
|
1
|
+
{"version":3,"file":"sessions.command.spec.js","sources":["../../../src/commands/agent/sessions.command.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"73d31994-11eb-5406-aadd-6dd6a1b228ab"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type TestRunCheckType } from "@alwaysmeticulous/client";
|
|
2
|
+
import type { CommandModule } from "yargs";
|
|
3
|
+
interface Options {
|
|
4
|
+
apiToken?: string | null | undefined;
|
|
5
|
+
testRunId: string | undefined;
|
|
6
|
+
commitSha: string | undefined;
|
|
7
|
+
checkType: TestRunCheckType;
|
|
8
|
+
checkId: string;
|
|
9
|
+
dontWaitForTestRunToComplete: boolean;
|
|
10
|
+
json: boolean;
|
|
11
|
+
project?: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
export declare const testRunChecksCommand: CommandModule<unknown, Options>;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=test-run-checks.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-checks.command.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAW3C,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,SAAS,EAAE,gBAAgB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B,EAAE,OAAO,CAAC;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAoHD,eAAO,MAAM,oBAAoB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CA0ChE,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
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]="b30af9ff-74c8-5d47-ad56-0a3c45d1a380")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.testRunChecksCommand = void 0;
|
|
6
|
+
const client_1 = require("@alwaysmeticulous/client");
|
|
7
|
+
const common_1 = require("@alwaysmeticulous/common");
|
|
8
|
+
const print_json_1 = require("../../command-utils/print-json");
|
|
9
|
+
const sentry_utils_1 = require("../../command-utils/sentry.utils");
|
|
10
|
+
const cli_user_error_1 = require("../../utils/cli-user-error");
|
|
11
|
+
const resolve_test_run_from_commit_1 = require("../../utils/resolve-test-run-from-commit");
|
|
12
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
/**
|
|
14
|
+
* Shorter than the diffs-summary poll timeout: unlike diffs (computed by a
|
|
15
|
+
* backend workflow with a known SLA), a custom check's results depend on the
|
|
16
|
+
* customer's own CI reporting them, so there's no guarantee they ever will —
|
|
17
|
+
* better to give up and let the caller decide whether to retry than to block
|
|
18
|
+
* for a long time on something that may never arrive.
|
|
19
|
+
*/
|
|
20
|
+
const REPORT_POLL_TIMEOUT_MS = 3 * 60_000;
|
|
21
|
+
const handler = async ({ apiToken, testRunId, commitSha, checkType, checkId, dontWaitForTestRunToComplete, json, project, }) => {
|
|
22
|
+
if (testRunId != null && commitSha != null) {
|
|
23
|
+
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
24
|
+
}
|
|
25
|
+
const client = await (0, client_1.createClientWithOAuth)({
|
|
26
|
+
apiToken,
|
|
27
|
+
enableOAuthLogin: true,
|
|
28
|
+
});
|
|
29
|
+
let resolvedTestRunId;
|
|
30
|
+
let status;
|
|
31
|
+
if (testRunId != null) {
|
|
32
|
+
resolvedTestRunId = testRunId;
|
|
33
|
+
status = (await (0, client_1.getTestRun)({ client, testRunId })).status;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const run = await (0, resolve_test_run_from_commit_1.resolveTestRunForCommitOrThrow)(client, commitSha, project);
|
|
37
|
+
resolvedTestRunId = run.testRunId;
|
|
38
|
+
status = run.status;
|
|
39
|
+
}
|
|
40
|
+
const finishedStatus = await (0, resolve_test_run_from_commit_1.ensureTestRunFinished)(client, resolvedTestRunId, status, { dontWait: dontWaitForTestRunToComplete });
|
|
41
|
+
if (finishedStatus == null) {
|
|
42
|
+
if (json) {
|
|
43
|
+
(0, print_json_1.printJson)({ status: "processing" });
|
|
44
|
+
}
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if ((0, resolve_test_run_from_commit_1.isTestRunPartial)(finishedStatus)) {
|
|
48
|
+
throw new cli_user_error_1.CliUserError(`Test run ${resolvedTestRunId} is a base run other test runs compare against and consequently has no check reports.`);
|
|
49
|
+
}
|
|
50
|
+
(0, resolve_test_run_from_commit_1.assertTestRunComplete)(resolvedTestRunId, finishedStatus, {
|
|
51
|
+
resultName: "check reports",
|
|
52
|
+
});
|
|
53
|
+
(0, common_1.logProgress)(`Fetching ${checkType} check ${checkId} for test run ${resolvedTestRunId}...`);
|
|
54
|
+
let response = await (0, client_1.getTestRunCheckReport)(client, resolvedTestRunId, checkId, { checkType });
|
|
55
|
+
const deadline = performance.now() + REPORT_POLL_TIMEOUT_MS;
|
|
56
|
+
if (response.status === "processing") {
|
|
57
|
+
(0, common_1.logProgress)(`Waiting for ${checkType} check results for test run ${resolvedTestRunId}...`);
|
|
58
|
+
}
|
|
59
|
+
while (response.status === "processing") {
|
|
60
|
+
if (performance.now() >= deadline) {
|
|
61
|
+
const minutes = REPORT_POLL_TIMEOUT_MS / 60_000;
|
|
62
|
+
const caveat = checkType === "custom"
|
|
63
|
+
? " They may still be computing, or the reporting CI job may never call back — re-run this command later to check again."
|
|
64
|
+
: " They may still be computing — re-run this command later to check again.";
|
|
65
|
+
(0, common_1.logNotice)(`${checkType} check results for test run ${resolvedTestRunId} did not arrive within ${minutes} minutes.${caveat}`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
await sleep(2000);
|
|
69
|
+
response = await (0, client_1.getTestRunCheckReport)(client, resolvedTestRunId, checkId, {
|
|
70
|
+
checkType,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (response.status === "failed") {
|
|
74
|
+
(0, common_1.logNotice)(`${checkType} check computation failed (${response.reason}) for test run ${resolvedTestRunId}; the report is not available for it.`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
if (json) {
|
|
78
|
+
(0, print_json_1.printJson)(response);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log(response.text);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
exports.testRunChecksCommand = {
|
|
85
|
+
command: "test-run-checks",
|
|
86
|
+
describe: "Get the Markdown report for a given non-visual check. Outputs the report text, blocking until the test run and check results are ready by default, for at most 3 minutes. For --checkType custom, an error saying the run is not expecting custom check results can be transient shortly after the run completes, since the customer's CI registers its checks separately: retry for a minute or so before concluding the run has no custom checks.",
|
|
87
|
+
builder: {
|
|
88
|
+
apiToken: { string: true, description: "Meticulous API token." },
|
|
89
|
+
testRunId: {
|
|
90
|
+
string: true,
|
|
91
|
+
description: "The test run ID. When omitted, the run is looked up from --commitSha, or from the current git HEAD when that is also omitted.",
|
|
92
|
+
},
|
|
93
|
+
commitSha: {
|
|
94
|
+
string: true,
|
|
95
|
+
description: "A commit SHA, used as an alternative to --testRunId: looks up the latest test run for the commit. Defaults to the current git HEAD when neither --testRunId nor --commitSha is given.",
|
|
96
|
+
},
|
|
97
|
+
project: {
|
|
98
|
+
string: true,
|
|
99
|
+
description: "The project to look up the commit for (id, 'org/proj', or simply 'proj'). One-off override, when omitted uses the user-configured default project. Cannot be combined with --testRunId, which already determines the project.",
|
|
100
|
+
conflicts: "testRunId",
|
|
101
|
+
},
|
|
102
|
+
checkType: {
|
|
103
|
+
choices: ["builtin", "custom"],
|
|
104
|
+
default: "builtin",
|
|
105
|
+
description: "Who computed the check: builtin for a Meticulous-provided check, or custom for a customer-reported check. Defaults to builtin.",
|
|
106
|
+
},
|
|
107
|
+
checkId: {
|
|
108
|
+
string: true,
|
|
109
|
+
demandOption: true,
|
|
110
|
+
description: "The check ID, for example accessibility or network-requests.",
|
|
111
|
+
},
|
|
112
|
+
dontWaitForTestRunToComplete: {
|
|
113
|
+
boolean: true,
|
|
114
|
+
default: false,
|
|
115
|
+
description: "Report an in-progress test run and exit immediately instead of waiting.",
|
|
116
|
+
},
|
|
117
|
+
},
|
|
118
|
+
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
119
|
+
};
|
|
120
|
+
//# sourceMappingURL=test-run-checks.command.js.map
|
|
121
|
+
//# debugId=b30af9ff-74c8-5d47-ad56-0a3c45d1a380
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.command.js","sources":["../../../src/commands/agent/test-run-checks.command.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"b30af9ff-74c8-5d47-ad56-0a3c45d1a380"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.command.spec.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-checks.command.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
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]="e9b55661-df83-5c06-9848-7106df4283ab")}catch(e){}}();
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
const vitest_1 = require("vitest");
|
|
6
|
+
const test_run_checks_command_1 = require("./test-run-checks.command");
|
|
7
|
+
vitest_1.vi.mock("../../command-utils/sentry.utils", () => ({
|
|
8
|
+
wrapHandler: (fn) => fn,
|
|
9
|
+
}));
|
|
10
|
+
const mocks = vitest_1.vi.hoisted(() => ({
|
|
11
|
+
createClientWithOAuth: vitest_1.vi.fn(),
|
|
12
|
+
getTestRun: vitest_1.vi.fn(),
|
|
13
|
+
getTestRunCheckReport: vitest_1.vi.fn(),
|
|
14
|
+
ensureTestRunFinished: vitest_1.vi.fn(),
|
|
15
|
+
assertTestRunComplete: vitest_1.vi.fn(),
|
|
16
|
+
isTestRunPartial: vitest_1.vi.fn(),
|
|
17
|
+
resolveTestRunForCommitOrThrow: vitest_1.vi.fn(),
|
|
18
|
+
logNotice: vitest_1.vi.fn(),
|
|
19
|
+
logProgress: vitest_1.vi.fn(),
|
|
20
|
+
printJson: vitest_1.vi.fn(),
|
|
21
|
+
}));
|
|
22
|
+
vitest_1.vi.mock("@alwaysmeticulous/client", () => ({
|
|
23
|
+
createClientWithOAuth: mocks.createClientWithOAuth,
|
|
24
|
+
getTestRun: mocks.getTestRun,
|
|
25
|
+
getTestRunCheckReport: mocks.getTestRunCheckReport,
|
|
26
|
+
}));
|
|
27
|
+
vitest_1.vi.mock("@alwaysmeticulous/common", () => ({
|
|
28
|
+
logNotice: mocks.logNotice,
|
|
29
|
+
logProgress: mocks.logProgress,
|
|
30
|
+
}));
|
|
31
|
+
vitest_1.vi.mock("../../command-utils/print-json", () => ({
|
|
32
|
+
printJson: mocks.printJson,
|
|
33
|
+
}));
|
|
34
|
+
vitest_1.vi.mock("../../utils/resolve-test-run-from-commit", () => ({
|
|
35
|
+
ensureTestRunFinished: mocks.ensureTestRunFinished,
|
|
36
|
+
assertTestRunComplete: mocks.assertTestRunComplete,
|
|
37
|
+
isTestRunPartial: mocks.isTestRunPartial,
|
|
38
|
+
resolveTestRunForCommitOrThrow: mocks.resolveTestRunForCommitOrThrow,
|
|
39
|
+
}));
|
|
40
|
+
class ProcessExitError extends Error {
|
|
41
|
+
}
|
|
42
|
+
const runHandler = (overrides = {}) => test_run_checks_command_1.testRunChecksCommand.handler({
|
|
43
|
+
apiToken: undefined,
|
|
44
|
+
testRunId: "tr-1",
|
|
45
|
+
commitSha: undefined,
|
|
46
|
+
checkType: "builtin",
|
|
47
|
+
checkId: "accessibility",
|
|
48
|
+
dontWaitForTestRunToComplete: false,
|
|
49
|
+
json: false,
|
|
50
|
+
project: undefined,
|
|
51
|
+
...overrides,
|
|
52
|
+
});
|
|
53
|
+
let logSpy;
|
|
54
|
+
let exitSpy;
|
|
55
|
+
(0, vitest_1.describe)("test-run-checks command", () => {
|
|
56
|
+
(0, vitest_1.beforeEach)(() => {
|
|
57
|
+
vitest_1.vi.clearAllMocks();
|
|
58
|
+
mocks.createClientWithOAuth.mockResolvedValue({});
|
|
59
|
+
mocks.getTestRun.mockResolvedValue({ status: "Success" });
|
|
60
|
+
mocks.ensureTestRunFinished.mockResolvedValue("Success");
|
|
61
|
+
mocks.isTestRunPartial.mockReturnValue(false);
|
|
62
|
+
logSpy = vitest_1.vi.spyOn(console, "log").mockImplementation(() => { });
|
|
63
|
+
exitSpy = vitest_1.vi.spyOn(process, "exit").mockImplementation(() => {
|
|
64
|
+
throw new ProcessExitError();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
(0, vitest_1.afterEach)(() => {
|
|
68
|
+
logSpy.mockRestore();
|
|
69
|
+
exitSpy.mockRestore();
|
|
70
|
+
vitest_1.vi.useRealTimers();
|
|
71
|
+
});
|
|
72
|
+
(0, vitest_1.it)("prints the completed report text", async () => {
|
|
73
|
+
mocks.getTestRunCheckReport.mockResolvedValue({
|
|
74
|
+
status: "complete",
|
|
75
|
+
text: "# Accessibility",
|
|
76
|
+
});
|
|
77
|
+
await runHandler();
|
|
78
|
+
(0, vitest_1.expect)(logSpy).toHaveBeenCalledWith("# Accessibility");
|
|
79
|
+
(0, vitest_1.expect)(mocks.getTestRunCheckReport).toHaveBeenCalledWith(vitest_1.expect.anything(), "tr-1", "accessibility", { checkType: "builtin" });
|
|
80
|
+
});
|
|
81
|
+
(0, vitest_1.it)("polls processing results and prints the completed report as JSON", async () => {
|
|
82
|
+
mocks.getTestRunCheckReport
|
|
83
|
+
.mockResolvedValueOnce({ status: "processing" })
|
|
84
|
+
.mockResolvedValueOnce({ status: "complete", text: "# Report" });
|
|
85
|
+
vitest_1.vi.useFakeTimers();
|
|
86
|
+
const result = runHandler({ json: true });
|
|
87
|
+
await vitest_1.vi.advanceTimersByTimeAsync(2000);
|
|
88
|
+
await result;
|
|
89
|
+
(0, vitest_1.expect)(mocks.getTestRunCheckReport).toHaveBeenCalledTimes(2);
|
|
90
|
+
(0, vitest_1.expect)(mocks.printJson).toHaveBeenCalledWith({
|
|
91
|
+
status: "complete",
|
|
92
|
+
text: "# Report",
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.it)("emits processing JSON and returns immediately when the run is unfinished and waiting is disabled", async () => {
|
|
96
|
+
mocks.ensureTestRunFinished.mockResolvedValue(null);
|
|
97
|
+
await runHandler({ json: true, dontWaitForTestRunToComplete: true });
|
|
98
|
+
(0, vitest_1.expect)(mocks.printJson).toHaveBeenCalledWith({ status: "processing" });
|
|
99
|
+
(0, vitest_1.expect)(mocks.getTestRunCheckReport).not.toHaveBeenCalled();
|
|
100
|
+
});
|
|
101
|
+
(0, vitest_1.it)("prints nothing when the run is unfinished, waiting is disabled, and --json is not set", async () => {
|
|
102
|
+
mocks.ensureTestRunFinished.mockResolvedValue(null);
|
|
103
|
+
await runHandler({ json: false, dontWaitForTestRunToComplete: true });
|
|
104
|
+
(0, vitest_1.expect)(mocks.printJson).not.toHaveBeenCalled();
|
|
105
|
+
(0, vitest_1.expect)(logSpy).not.toHaveBeenCalled();
|
|
106
|
+
(0, vitest_1.expect)(mocks.getTestRunCheckReport).not.toHaveBeenCalled();
|
|
107
|
+
});
|
|
108
|
+
(0, vitest_1.it)("reports an execution failure instead of continuing to poll", async () => {
|
|
109
|
+
mocks.getTestRunCheckReport.mockResolvedValue({
|
|
110
|
+
status: "failed",
|
|
111
|
+
reason: "execution-error",
|
|
112
|
+
});
|
|
113
|
+
await (0, vitest_1.expect)(runHandler()).rejects.toThrow(ProcessExitError);
|
|
114
|
+
(0, vitest_1.expect)(exitSpy).toHaveBeenCalledWith(1);
|
|
115
|
+
(0, vitest_1.expect)(mocks.logNotice).toHaveBeenCalledWith(vitest_1.expect.stringContaining("execution-error"));
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.it)("resolves a test run from a commit when no testRunId is passed", async () => {
|
|
118
|
+
mocks.resolveTestRunForCommitOrThrow.mockResolvedValue({
|
|
119
|
+
testRunId: "tr-from-commit",
|
|
120
|
+
status: "Success",
|
|
121
|
+
});
|
|
122
|
+
mocks.getTestRunCheckReport.mockResolvedValue({
|
|
123
|
+
status: "complete",
|
|
124
|
+
text: "report",
|
|
125
|
+
});
|
|
126
|
+
await runHandler({ testRunId: undefined, commitSha: "abc123" });
|
|
127
|
+
(0, vitest_1.expect)(mocks.resolveTestRunForCommitOrThrow).toHaveBeenCalledWith(vitest_1.expect.anything(), "abc123", undefined);
|
|
128
|
+
(0, vitest_1.expect)(mocks.getTestRunCheckReport).toHaveBeenCalledWith(vitest_1.expect.anything(), "tr-from-commit", "accessibility", { checkType: "builtin" });
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=test-run-checks.command.spec.js.map
|
|
132
|
+
//# debugId=e9b55661-df83-5c06-9848-7106df4283ab
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-run-checks.command.spec.js","sources":["../../../src/commands/agent/test-run-checks.command.spec.ts"],"sourceRoot":"","names":[],"mappings":"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","debugId":"e9b55661-df83-5c06-9848-7106df4283ab"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-run-diffs.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"test-run-diffs.command.d.ts","sourceRoot":"","sources":["../../../src/commands/agent/test-run-diffs.command.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAiB3C,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,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,OAAO,CAAC;IACjC,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAuPD,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAgG/D,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]="75d73581-af25-54b0-9c2c-732973763504")}catch(e){}}();
|
|
3
3
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.testRunDiffsCommand = void 0;
|
|
@@ -13,18 +13,10 @@ const test_run_diffs_utils_1 = require("./test-run-diffs.utils");
|
|
|
13
13
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
14
14
|
/** Give up polling the diffs summary after this long, rather than forever. */
|
|
15
15
|
const SUMMARY_POLL_TIMEOUT_MS = 10 * 60_000;
|
|
16
|
-
const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToComplete, includeReplayIds, includeMismatchFraction, includeReviews, includeReviewDecisions, includeDomDiffIds, includeAllDiffs, onlyUnreviewed, onlyRejected, orderByReplayDiffs, counts, json, project, }) => {
|
|
16
|
+
const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToComplete, includeReplayIds, includeMismatchFraction, includeReviews, includeReviewDecisions, includeDomDiffIds, includeAllDiffs, onlyUnreviewed, onlyRejected, onlyWithComments, orderByReplayDiffs, counts, json, project, }) => {
|
|
17
17
|
if (testRunId != null && commitSha != null) {
|
|
18
18
|
throw new cli_user_error_1.CliUserError("Pass either --testRunId or --commitSha, not both.");
|
|
19
19
|
}
|
|
20
|
-
// A diff can't be both still awaiting review and rejected, so requesting both
|
|
21
|
-
// can only ever match nothing. Checked here rather than via yargs `conflicts`:
|
|
22
|
-
// both flags default to false, and yargs' conflict check fires on the option
|
|
23
|
-
// merely being *present* in argv (`!== undefined`) — true for every run,
|
|
24
|
-
// defaulted or not — so `conflicts` would reject every invocation.
|
|
25
|
-
if (onlyUnreviewed && onlyRejected) {
|
|
26
|
-
throw new cli_user_error_1.CliUserError("--onlyUnreviewed and --onlyRejected cannot both be set — a diff can't be both unreviewed and rejected.");
|
|
27
|
-
}
|
|
28
20
|
// --counts reports fixed aggregate totals from a dedicated endpoint that takes
|
|
29
21
|
// no list/filter options, so combining it with any of them is meaningless —
|
|
30
22
|
// reject it rather than silently ignoring them. Only --json (output format) and
|
|
@@ -40,6 +32,7 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
40
32
|
[includeReviewDecisions, "--includeReviewDecisions"],
|
|
41
33
|
[onlyUnreviewed, "--onlyUnreviewed"],
|
|
42
34
|
[onlyRejected, "--onlyRejected"],
|
|
35
|
+
[onlyWithComments, "--onlyWithComments"],
|
|
43
36
|
]
|
|
44
37
|
.filter(([enabled]) => enabled)
|
|
45
38
|
.map(([, name]) => name);
|
|
@@ -77,14 +70,9 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
77
70
|
resolvedTestRunId = run.testRunId;
|
|
78
71
|
status = run.status;
|
|
79
72
|
}
|
|
80
|
-
// Decision filters span every matching difference (selected or not), so they
|
|
81
|
-
// imply --includeAllDiffs: the isSelected column is included to tell them
|
|
82
|
-
// apart, matching the backend, which resolves the same implication.
|
|
83
|
-
const includeAllDiffsResolved = includeAllDiffs || onlyUnreviewed || onlyRejected;
|
|
84
73
|
const includeReviewsResolved = includeReviews || includeReviewDecisions;
|
|
85
74
|
const columns = {
|
|
86
75
|
includeDomDiffIds,
|
|
87
|
-
includeAllDiffs: includeAllDiffsResolved,
|
|
88
76
|
includeReplayIds,
|
|
89
77
|
includeMismatchFraction,
|
|
90
78
|
includeReviews: includeReviewsResolved,
|
|
@@ -132,25 +120,14 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
132
120
|
includeReplayIds,
|
|
133
121
|
includeMismatchFraction,
|
|
134
122
|
includeDomDiffIds,
|
|
135
|
-
includeAllDiffs
|
|
123
|
+
includeAllDiffs,
|
|
136
124
|
orderByReplayDiffs,
|
|
137
125
|
includeReviews: includeReviewsResolved,
|
|
138
126
|
onlyUnreviewed,
|
|
139
127
|
onlyRejected,
|
|
128
|
+
onlyWithComments,
|
|
140
129
|
};
|
|
141
130
|
let response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, diffsSummaryOptions);
|
|
142
|
-
// A cold start finding the last computation already `failed` retriggers
|
|
143
|
-
// once, up front — before the poll deadline below is computed, so the fresh
|
|
144
|
-
// run always gets the full timeout. This is a one-shot decision made only
|
|
145
|
-
// here, not inside the poll loop: once we're polling, a `failed` result is
|
|
146
|
-
// reported and the command exits, it never retriggers again.
|
|
147
|
-
if (response.status === "failed") {
|
|
148
|
-
(0, common_1.logProgress)(`Diffs computation failed for test run ${resolvedTestRunId}; retriggering...`);
|
|
149
|
-
response = await (0, client_1.getTestRunDiffsSummary)(client, resolvedTestRunId, {
|
|
150
|
-
...diffsSummaryOptions,
|
|
151
|
-
retrigger: true,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
131
|
// Poll until complete (or give up after the timeout, rather than forever).
|
|
155
132
|
// A single line when we start waiting — no per-poll output.
|
|
156
133
|
const summaryDeadline = performance.now() + SUMMARY_POLL_TIMEOUT_MS;
|
|
@@ -160,8 +137,15 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
160
137
|
while (response.status !== "complete") {
|
|
161
138
|
if (response.status === "failed") {
|
|
162
139
|
const reasonSuffix = response.reason != null ? ` (${response.reason})` : "";
|
|
163
|
-
|
|
164
|
-
|
|
140
|
+
// Only `test-run-not-ready` is worth another attempt: the test run was
|
|
141
|
+
// still going when the computation's own wait for it ran out, so it may
|
|
142
|
+
// well have finished by the time this command is run again. Nothing is
|
|
143
|
+
// still computing in the background either way — see
|
|
144
|
+
// DiffsSummaryFailureReason.
|
|
145
|
+
const advice = response.reason === "test-run-not-ready"
|
|
146
|
+
? `the test run hadn't finished in time. Run this command again in a minute or more to start a fresh attempt.`
|
|
147
|
+
: `diffs are not available for it.`;
|
|
148
|
+
(0, common_1.logNotice)(`Diffs summary computation failed${reasonSuffix} for test run ${resolvedTestRunId}; ${advice}`);
|
|
165
149
|
process.exit(1);
|
|
166
150
|
}
|
|
167
151
|
if (response.status !== "pending" && response.status !== "processing") {
|
|
@@ -190,16 +174,19 @@ const handler = async ({ apiToken, testRunId, commitSha, dontWaitForTestRunToCom
|
|
|
190
174
|
}
|
|
191
175
|
// Summaries on stderr regardless of --json (which only changes stdout).
|
|
192
176
|
if (data.length === 0) {
|
|
193
|
-
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} does not have diffs.`);
|
|
177
|
+
(0, common_1.logNotice)(`Test run ${resolvedTestRunId} does not have any diffs matching the query.`);
|
|
194
178
|
return;
|
|
195
179
|
}
|
|
196
|
-
const numReplayDiffs = new Set(data.map((diff) => diff.replayDiffId)).size;
|
|
197
180
|
const tEnd = performance.now();
|
|
198
|
-
|
|
181
|
+
const elapsed = `${((tEnd - t0) / 1000).toFixed(1)}s`;
|
|
182
|
+
(0, common_1.logNotice)(response.selectionApplied
|
|
183
|
+
? // The backend always reports numMatchingDiffs alongside selectionApplied.
|
|
184
|
+
`Including ${data.length} representative screenshot ${(0, test_run_diffs_utils_1.pluralize)(data.length, "diff")} out of ${response.numMatchingDiffs} total (${elapsed})`
|
|
185
|
+
: `${data.length} screenshot ${(0, test_run_diffs_utils_1.pluralize)(data.length, "diff")} (${elapsed})`);
|
|
199
186
|
};
|
|
200
187
|
exports.testRunDiffsCommand = {
|
|
201
188
|
command: "test-run-diffs",
|
|
202
|
-
describe: "Get the list of screenshot diffs for a given test run (by default a selected
|
|
189
|
+
describe: "Get the list of screenshot diffs for a given test run (by default all diffs when there are at most five; above that, a selected representative subset in priority order). Outputs a priority-ordered TSV table with columns replayDiffId and screenshotName plus the requested additional columns. Pass --counts to print just the totals instead of the list.",
|
|
203
190
|
builder: {
|
|
204
191
|
apiToken: { string: true, description: "Meticulous API token." },
|
|
205
192
|
testRunId: {
|
|
@@ -217,17 +204,22 @@ exports.testRunDiffsCommand = {
|
|
|
217
204
|
},
|
|
218
205
|
includeAllDiffs: {
|
|
219
206
|
boolean: true,
|
|
220
|
-
description: "Output all screenshot diffs instead of only the selected representative subset
|
|
207
|
+
description: "Output all screenshot diffs instead of only the selected representative subset.",
|
|
221
208
|
default: false,
|
|
222
209
|
},
|
|
223
210
|
onlyUnreviewed: {
|
|
224
211
|
boolean: true,
|
|
225
|
-
description: "Output only screenshot diffs still awaiting review (decision unreviewed)
|
|
212
|
+
description: "Output only screenshot diffs still awaiting review (decision unreviewed). The --only* flags are additive: when several are set, diffs matching any of them are output, so combining them widens the output rather than narrowing it.",
|
|
226
213
|
default: false,
|
|
227
214
|
},
|
|
228
215
|
onlyRejected: {
|
|
229
216
|
boolean: true,
|
|
230
|
-
description: "Output only screenshot diffs
|
|
217
|
+
description: "Output only rejected screenshot diffs. The --only* flags are additive: when several are set, diffs matching any of them are output, so combining them widens the output rather than narrowing it.",
|
|
218
|
+
default: false,
|
|
219
|
+
},
|
|
220
|
+
onlyWithComments: {
|
|
221
|
+
boolean: true,
|
|
222
|
+
description: "Output only screenshot diffs with one or more open review comments. The --only* flags are additive: when several are set, diffs matching any of them are output, so combining them widens the output rather than narrowing it.",
|
|
231
223
|
default: false,
|
|
232
224
|
},
|
|
233
225
|
includeReplayIds: {
|
|
@@ -242,7 +234,7 @@ exports.testRunDiffsCommand = {
|
|
|
242
234
|
},
|
|
243
235
|
includeReviews: {
|
|
244
236
|
boolean: true,
|
|
245
|
-
description: "Add decision and openComments columns with the
|
|
237
|
+
description: "Add decision and openComments columns with the review decision and number of open review comments per diff.",
|
|
246
238
|
default: false,
|
|
247
239
|
},
|
|
248
240
|
includeReviewDecisions: {
|
|
@@ -268,11 +260,11 @@ exports.testRunDiffsCommand = {
|
|
|
268
260
|
},
|
|
269
261
|
counts: {
|
|
270
262
|
boolean: true,
|
|
271
|
-
description: "Get the aggregate diff counts for a given test run instead of the per-diff list: number of replays, number of differences,
|
|
263
|
+
description: "Get the aggregate diff counts for a given test run instead of the per-diff list: number of replays, number of differences, the review-decision breakdown (approved/ignored/rejected/unreviewed), and the number of differences with open review comments. Cannot be combined with the list/filter flags, only with --json.",
|
|
272
264
|
default: false,
|
|
273
265
|
},
|
|
274
266
|
},
|
|
275
267
|
handler: (0, sentry_utils_1.wrapHandler)(handler),
|
|
276
268
|
};
|
|
277
269
|
//# sourceMappingURL=test-run-diffs.command.js.map
|
|
278
|
-
//# debugId=
|
|
270
|
+
//# debugId=75d73581-af25-54b0-9c2c-732973763504
|