@glubean/cli 0.7.0 → 0.8.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.
Files changed (42) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +24 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/commands/load.d.ts +65 -0
  5. package/dist/commands/load.d.ts.map +1 -0
  6. package/dist/commands/load.js +462 -0
  7. package/dist/commands/load.js.map +1 -0
  8. package/dist/commands/login.d.ts +14 -1
  9. package/dist/commands/login.d.ts.map +1 -1
  10. package/dist/commands/login.js +110 -49
  11. package/dist/commands/login.js.map +1 -1
  12. package/dist/commands/run.d.ts +14 -2
  13. package/dist/commands/run.d.ts.map +1 -1
  14. package/dist/commands/run.js +216 -122
  15. package/dist/commands/run.js.map +1 -1
  16. package/dist/lib/auth.d.ts +57 -0
  17. package/dist/lib/auth.d.ts.map +1 -1
  18. package/dist/lib/auth.js +134 -1
  19. package/dist/lib/auth.js.map +1 -1
  20. package/dist/lib/config.d.ts +17 -6
  21. package/dist/lib/config.d.ts.map +1 -1
  22. package/dist/lib/config.js +9 -2
  23. package/dist/lib/config.js.map +1 -1
  24. package/dist/lib/constants.d.ts +6 -1
  25. package/dist/lib/constants.d.ts.map +1 -1
  26. package/dist/lib/constants.js +6 -1
  27. package/dist/lib/constants.js.map +1 -1
  28. package/dist/lib/print-plan.d.ts.map +1 -1
  29. package/dist/lib/print-plan.js +4 -0
  30. package/dist/lib/print-plan.js.map +1 -1
  31. package/dist/lib/upload.d.ts +88 -10
  32. package/dist/lib/upload.d.ts.map +1 -1
  33. package/dist/lib/upload.js +117 -188
  34. package/dist/lib/upload.js.map +1 -1
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +57 -7
  37. package/dist/main.js.map +1 -1
  38. package/package.json +6 -6
  39. package/dist/lib/env.d.ts +0 -29
  40. package/dist/lib/env.d.ts.map +0 -1
  41. package/dist/lib/env.js +0 -59
  42. package/dist/lib/env.js.map +0 -1
@@ -1,12 +1,77 @@
1
1
  /**
2
- * Upload run results and artifacts to Glubean Cloud.
2
+ * Upload run results and artifacts to Glubean Cloud (target model, ADR 0007).
3
3
  *
4
4
  * Upload flow:
5
- * 1. POST results JSON to /open/v1/cli-runs → { runId, url }
6
- * 2. If artifact files exist, build a single zip (manifest.json + files/):
7
- * a. zip < 512KB POST multipart to /artifacts/upload (inline, 1 request)
8
- * b. zip ≥ 512KB → POST /artifacts/upload { size } → PUT zip to signed URL
9
- * POST /artifacts/upload/complete (3 requests)
5
+ * 1. POST a `RunIngest` envelope to
6
+ * `{apiUrl}/v1/projects/{projectId}/targets/{targetId}/runs` the created
7
+ * run row (`{ id, ... }`). The run id + a deep link are recorded on the
8
+ * receipt.
9
+ * 2. If artifact files exist, POST them as inline multipart parts to
10
+ * `…/runs/{id}/artifacts` (one part = one artifact, ≤512KB each). Files over
11
+ * the inline cap are skipped (presigned R2 upload is an M6 follow-up).
12
+ */
13
+ export type RunKind = "test" | "load";
14
+ export type RunStatus = "passed" | "failed" | "errored" | "running" | "cancelled";
15
+ export type FailureClass = "timeout" | "crash" | "user_error" | "infra_error";
16
+ /** A per-test row → server `test_result` (single-test history / flaky substrate). */
17
+ export interface RunIngestTest {
18
+ testId: string;
19
+ name: string;
20
+ /** passed | failed | skipped — skipped is excluded from flaky denominators. */
21
+ status: string;
22
+ durationMs: number;
23
+ tags?: string[];
24
+ eventCount?: number;
25
+ }
26
+ /** A time-series metric point → server `run_metric` (latency/rps/percentile trends). */
27
+ export interface RunIngestMetric {
28
+ name: string;
29
+ value: number;
30
+ unit?: string;
31
+ tags?: Record<string, string>;
32
+ ts?: string;
33
+ testId?: string;
34
+ }
35
+ /**
36
+ * Run-level envelope the CALLER assembles from the runner result. The wire body
37
+ * (RunIngest) is built from this + CI/env context inside `uploadToCloud`, so the
38
+ * caller doesn't repeat CI detection / version / environment plumbing.
39
+ */
40
+ export interface UploadRunInput {
41
+ kind: RunKind;
42
+ /** Payload schema version: "glubean.test.v1" | "glubean.load.v1". */
43
+ schemaVersion: string;
44
+ status: RunStatus;
45
+ /** ISO. */
46
+ startedAt: string;
47
+ /** ISO. */
48
+ completedAt?: string;
49
+ durationMs: number;
50
+ /** Small kind-specific aggregate for list views (validated per-kind server-side). */
51
+ summary: Record<string, unknown>;
52
+ /**
53
+ * The full ExecutionResult / LoadArtifact — stored as a blob, not in the row.
54
+ * MUST be a JSON object and ALREADY redacted (the server does a baseline pass,
55
+ * D6, but the CLI redacts first as the canonical client-side scrub).
56
+ */
57
+ result: unknown;
58
+ testResults?: RunIngestTest[];
59
+ metrics?: RunIngestMetric[];
60
+ failureClass?: FailureClass;
61
+ failureMessage?: string;
62
+ /**
63
+ * Stable idempotency id for this run (P1). Generated ONCE per CLI invocation
64
+ * and reused across the in-process upload retry, so a lost-response retry
65
+ * REPLACES the run server-side instead of creating a duplicate. A fresh
66
+ * `glubean run`/`load` is a new run (a new id).
67
+ */
68
+ clientRunId?: string;
69
+ }
70
+ /**
71
+ * Legacy on-disk metadata payload shape, retained for the SEPARATE c/f contract
72
+ * projection line (D7 / M6) — `redactMetadataForUpload` types against
73
+ * `metadata` here. NOT part of the run-data ingest above: per D7 the run upload
74
+ * carries run-data only and drops `contractsProjection`/`workflows`.
10
75
  */
11
76
  export interface UploadResultPayload {
12
77
  target?: string;
@@ -94,14 +159,23 @@ export interface UploadOptions {
94
159
  apiUrl: string;
95
160
  token: string;
96
161
  projectId: string;
162
+ /** The target (API/system under test) runs belong to — resolved upstream
163
+ * (explicit `upload.targetId` / `GLUBEAN_TARGET_ID`, else the project's
164
+ * default target). Required: the ingest path is `…/targets/{targetId}/runs`. */
165
+ targetId: string;
97
166
  envFile?: string;
98
167
  rootDir: string;
168
+ /** Skip the `.glubean/artifacts` + `.glubean/screenshots` scan/upload. Load
169
+ * runs set this — those dirs hold TEST artifacts (the LoadArtifact is already
170
+ * the `result` blob), so attaching them would misattribute stale files. */
171
+ skipArtifacts?: boolean;
99
172
  }
100
173
  export interface UploadReceipt {
101
174
  schemaVersion: "glubean.upload-receipt.v1";
102
175
  uploadedAt: string;
103
176
  apiUrl: string;
104
177
  projectId: string;
178
+ targetId: string;
105
179
  runId?: string;
106
180
  url?: string;
107
181
  resultUpload: {
@@ -115,16 +189,20 @@ export interface UploadReceipt {
115
189
  status: "skipped" | "uploaded" | "failed";
116
190
  attempted: boolean;
117
191
  count: number;
192
+ /** Files skipped because they exceed the inline cap (presigned = M6). */
193
+ skipped?: number;
118
194
  sizeBytes?: number;
119
- archiveBytes?: number;
120
- mode?: "inline" | "presigned";
121
195
  statusCode?: number;
122
196
  error?: string;
123
197
  };
124
198
  }
125
199
  /**
126
- * Upload run results and optionally artifacts to Glubean Cloud.
200
+ * Upload a run (test or load) + optionally its artifacts to Glubean Cloud under
201
+ * a target (ADR 0007). The caller assembles the run-level `UploadRunInput` from
202
+ * the runner result; this builds the `RunIngest` wire body from it + CI/env
203
+ * context and POSTs to the target-scoped ingest endpoint.
204
+ *
127
205
  * All operations are best-effort — failures print a warning but never throw.
128
206
  */
129
- export declare function uploadToCloud(resultPayload: UploadResultPayload, options: UploadOptions): Promise<UploadReceipt>;
207
+ export declare function uploadToCloud(input: UploadRunInput, options: UploadOptions): Promise<UploadReceipt>;
130
208
  //# sourceMappingURL=upload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2DH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACtC,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,CAAC;AAClF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,GAAG,aAAa,CAAC;AAE9E,qFAAqF;AACrF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wFAAwF;AACxF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC;;;;OAIG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,aAAa,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;KACpB,CAAC,CAAC;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB;;;;;WAKG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,KAAK,CAAC;gBACb,IAAI,EAAE,MAAM,CAAC;gBACb,EAAE,EAAE,MAAM,CAAC;gBACX,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;gBAChB,UAAU,EAAE,MAAM,CAAC;gBACnB,IAAI,CAAC,EAAE,OAAO,CAAC;aAChB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH,2EAA2E;QAC3E,SAAS,CAAC,EAAE,KAAK,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,UAAU,EAAE,MAAM,CAAC;YACnB,QAAQ,EAAE,MAAM,CAAC;YACjB,QAAQ,EAAE,MAAM,CAAC;YACjB,KAAK,EAAE,KAAK,CAAC;gBACX,GAAG,EAAE,MAAM,CAAC;gBACZ,YAAY,CAAC,EAAE,MAAM,CAAC;gBACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;aACnB,CAAC,CAAC;SACJ,CAAC,CAAC;QACH;;;;;;;;;WASG;QACH,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;QACtB;;;;;WAKG;QACH,OAAO,CAAC,EAAE;YACR,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;SACnB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB;;qFAEiF;IACjF,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;gFAE4E;IAC5E,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,2BAA2B,CAAC;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,EAAE;QACZ,MAAM,EAAE,UAAU,GAAG,QAAQ,CAAC;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,EAAE;QACd,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;QAC1C,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,yEAAyE;QACzE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAmGD;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,aAAa,CAAC,CAsNxB"}
@@ -1,21 +1,19 @@
1
1
  /**
2
- * Upload run results and artifacts to Glubean Cloud.
2
+ * Upload run results and artifacts to Glubean Cloud (target model, ADR 0007).
3
3
  *
4
4
  * Upload flow:
5
- * 1. POST results JSON to /open/v1/cli-runs → { runId, url }
6
- * 2. If artifact files exist, build a single zip (manifest.json + files/):
7
- * a. zip < 512KB POST multipart to /artifacts/upload (inline, 1 request)
8
- * b. zip ≥ 512KB → POST /artifacts/upload { size } → PUT zip to signed URL
9
- * POST /artifacts/upload/complete (3 requests)
5
+ * 1. POST a `RunIngest` envelope to
6
+ * `{apiUrl}/v1/projects/{projectId}/targets/{targetId}/runs` the created
7
+ * run row (`{ id, ... }`). The run id + a deep link are recorded on the
8
+ * receipt.
9
+ * 2. If artifact files exist, POST them as inline multipart parts to
10
+ * `…/runs/{id}/artifacts` (one part = one artifact, ≤512KB each). Files over
11
+ * the inline cap are skipped (presigned R2 upload is an M6 follow-up).
10
12
  */
11
- import { readdir, stat, readFile, mkdir, copyFile, writeFile, rm, mkdtemp } from "node:fs/promises";
13
+ import { readdir, stat, readFile } from "node:fs/promises";
12
14
  import { basename, extname, join, relative } from "node:path";
13
- import { tmpdir } from "node:os";
14
- import { execFile as execFileCb } from "node:child_process";
15
- import { promisify } from "node:util";
16
15
  import { CLI_VERSION } from "../version.js";
17
16
  import { detectCiContext } from "./ci.js";
18
- const execFileAsync = promisify(execFileCb);
19
17
  const colors = {
20
18
  reset: "\x1b[0m",
21
19
  green: "\x1b[32m",
@@ -25,6 +23,8 @@ const colors = {
25
23
  };
26
24
  const RESULTS_TIMEOUT_MS = 5_000;
27
25
  const ARTIFACT_TIMEOUT_MS = 30_000;
26
+ /** Per-file inline artifact cap — mirrors platform-api `MAX_INLINE_ARTIFACT_BYTES`.
27
+ * Files larger than this are skipped (presigned R2 path is an M6 follow-up). */
28
28
  const INLINE_THRESHOLD = 512 * 1024; // 512KB
29
29
  const MAX_RETRIES = 1;
30
30
  const RETRY_DELAY_MS = 1_000;
@@ -61,10 +61,24 @@ function createUploadReceipt(options) {
61
61
  uploadedAt: new Date().toISOString(),
62
62
  apiUrl: options.apiUrl,
63
63
  projectId: options.projectId,
64
+ targetId: options.targetId,
64
65
  resultUpload: { status: "failed" },
65
66
  artifactUpload: { status: "skipped", attempted: false, count: 0 },
66
67
  };
67
68
  }
69
+ /**
70
+ * Canonical location of an uploaded run — its platform API resource URL
71
+ * (`…/v1/projects/{projectId}/targets/{targetId}/runs/{runId}`). The dashboard
72
+ * run-detail page doesn't exist yet (M2), and app-next has no URL-addressable
73
+ * project context (TargetPage resolves the target under the SESSION's active
74
+ * project, not the URL), so a guessed `app.<host>` link can't reliably resolve
75
+ * cross-project. The API resource URL is real, addressable (with the token),
76
+ * and carries full project+target+run context — the honest "where is my run".
77
+ */
78
+ function buildRunUrl(apiUrl, projectId, targetId, runId) {
79
+ const base = apiUrl.replace(/\/+$/, "");
80
+ return `${base}/v1/projects/${projectId}/targets/${targetId}/runs/${runId}`;
81
+ }
68
82
  function toErrorMessage(err) {
69
83
  return err instanceof Error ? err.message : String(err);
70
84
  }
@@ -101,24 +115,6 @@ function extToMime(ext) {
101
115
  };
102
116
  return map[ext.toLowerCase()] ?? "application/octet-stream";
103
117
  }
104
- function extToArtifactType(ext) {
105
- const map = {
106
- ".png": "screenshot",
107
- ".jpg": "screenshot",
108
- ".jpeg": "screenshot",
109
- ".gif": "screenshot",
110
- ".webp": "screenshot",
111
- ".html": "html",
112
- ".har": "har",
113
- ".json": "data",
114
- ".jsonl": "data",
115
- ".csv": "data",
116
- ".txt": "log",
117
- ".log": "log",
118
- ".xml": "report",
119
- };
120
- return map[ext.toLowerCase()] ?? "other";
121
- }
122
118
  /** Recursively walk a directory and collect file paths */
123
119
  async function walkDir(dir) {
124
120
  const files = [];
@@ -140,36 +136,49 @@ async function walkDir(dir) {
140
136
  return files;
141
137
  }
142
138
  /**
143
- * Upload run results and optionally artifacts to Glubean Cloud.
139
+ * Upload a run (test or load) + optionally its artifacts to Glubean Cloud under
140
+ * a target (ADR 0007). The caller assembles the run-level `UploadRunInput` from
141
+ * the runner result; this builds the `RunIngest` wire body from it + CI/env
142
+ * context and POSTs to the target-scoped ingest endpoint.
143
+ *
144
144
  * All operations are best-effort — failures print a warning but never throw.
145
145
  */
146
- export async function uploadToCloud(resultPayload, options) {
147
- const { apiUrl, token, projectId, rootDir } = options;
146
+ export async function uploadToCloud(input, options) {
147
+ const { apiUrl, token, projectId, targetId, rootDir } = options;
148
148
  const receipt = createUploadReceipt(options);
149
149
  const ci = detectCiContext();
150
- // ── Step 1: Upload results JSON ──
150
+ // ── Step 1: Ingest the run (RunIngest envelope) ──
151
+ // Per D7 the run upload carries run-data ONLY — no contract/workflow
152
+ // projection (that's the separate c/f line). `result` is the full
153
+ // ExecutionResult / LoadArtifact blob (already redacted by the caller).
151
154
  const body = {
152
- projectId,
153
- source: ci.source,
154
- clientVersion: CLI_VERSION,
155
+ kind: input.kind,
156
+ schemaVersion: input.schemaVersion,
157
+ status: input.status,
158
+ startedAt: input.startedAt,
159
+ ...(input.completedAt ? { completedAt: input.completedAt } : {}),
160
+ durationMs: input.durationMs,
161
+ summary: input.summary,
162
+ // The server schema requires `result` to be a JSON object (z.record).
163
+ result: input.result ?? {},
164
+ ...(input.testResults && input.testResults.length ? { testResults: input.testResults } : {}),
165
+ ...(input.metrics && input.metrics.length ? { metrics: input.metrics } : {}),
166
+ ...(input.failureClass ? { failureClass: input.failureClass } : {}),
167
+ ...(input.failureMessage ? { failureMessage: input.failureMessage } : {}),
168
+ ...(input.clientRunId ? { clientRunId: input.clientRunId } : {}),
169
+ // CI / provenance dimensions (filterable on the dashboard).
170
+ trigger: ci.source,
171
+ ...(ci.gitRef ? { gitRef: ci.gitRef } : {}),
172
+ ...(ci.commitSha ? { commitSha: ci.commitSha } : {}),
173
+ ...(ci.runUrl ? { ciRunUrl: ci.runUrl } : {}),
174
+ runnerVersion: CLI_VERSION,
155
175
  environment: resolveUploadEnvironment(options.envFile),
156
- gitRef: ci.gitRef,
157
- commitSha: ci.commitSha,
158
- runUrl: ci.runUrl,
159
- runAt: resultPayload.runAt,
160
- target: resultPayload.target,
161
- files: resultPayload.files,
162
- nodeVersion: process.versions.node,
163
- os: process.platform,
164
- summary: resultPayload.summary,
165
- tests: resultPayload.tests,
166
- ...(resultPayload.metadata && { metadata: resultPayload.metadata }),
167
- ...(resultPayload.customMetadata && { customMetadata: resultPayload.customMetadata }),
168
176
  };
177
+ const runsEndpoint = `${apiUrl}/v1/projects/${projectId}/targets/${targetId}/runs`;
169
178
  let runId;
170
179
  let runUrl;
171
180
  try {
172
- const resp = await fetchWithRetry(`${apiUrl}/open/v1/cli-runs`, {
181
+ const resp = await fetchWithRetry(runsEndpoint, {
173
182
  method: "POST",
174
183
  headers: {
175
184
  "Content-Type": "application/json",
@@ -188,11 +197,12 @@ export async function uploadToCloud(resultPayload, options) {
188
197
  };
189
198
  return receipt;
190
199
  }
200
+ // The ingest endpoint returns the created run row (`{ id, ... }`); it does
201
+ // not return a URL, so build the dashboard deep link from the API host.
191
202
  const result = await resp.json();
192
- runId = typeof result.runId === "string" ? result.runId : "";
193
- runUrl = typeof result.url === "string" ? result.url : "";
194
- if (!runId || !runUrl) {
195
- const error = "Cloud upload response was missing runId or url.";
203
+ runId = typeof result.id === "string" ? result.id : "";
204
+ if (!runId) {
205
+ const error = "Cloud upload response was missing the run id.";
196
206
  console.log(`${colors.yellow}Upload failed: ${error}${colors.reset}`);
197
207
  receipt.resultUpload = {
198
208
  status: "failed",
@@ -201,6 +211,7 @@ export async function uploadToCloud(resultPayload, options) {
201
211
  };
202
212
  return receipt;
203
213
  }
214
+ runUrl = buildRunUrl(apiUrl, projectId, targetId, runId);
204
215
  receipt.runId = runId;
205
216
  receipt.url = runUrl;
206
217
  receipt.resultUpload = {
@@ -209,7 +220,7 @@ export async function uploadToCloud(resultPayload, options) {
209
220
  url: runUrl,
210
221
  statusCode: resp.status,
211
222
  };
212
- console.log(`${colors.green}Results uploaded${colors.reset} ${colors.dim}→ ${runUrl}${colors.reset}`);
223
+ console.log(`${colors.green}Run uploaded${colors.reset} ${colors.dim}(${runId}) → ${runUrl}${colors.reset}`);
213
224
  }
214
225
  catch (err) {
215
226
  let error;
@@ -225,76 +236,70 @@ export async function uploadToCloud(resultPayload, options) {
225
236
  return receipt;
226
237
  }
227
238
  // ── Step 2: Upload artifacts (if any) ──
239
+ // The target-scoped endpoint takes inline multipart parts — one part = one
240
+ // artifact, ≤512KB each (the server derives artifactType/mimeType per file).
241
+ // Files over the inline cap are skipped here (presigned R2 = M6 follow-up) so
242
+ // the batch never trips the server's 413.
243
+ // Load runs skip this entirely — `.glubean/artifacts`/`screenshots` are TEST
244
+ // artifacts (the LoadArtifact is the `result` blob), so scanning them would
245
+ // attach stale files from a prior test run to each load run.
246
+ if (options.skipArtifacts)
247
+ return receipt;
248
+ const artifactRoot = join(rootDir, ".glubean");
228
249
  const artifactDirs = [
229
- join(rootDir, ".glubean", "artifacts"),
230
- join(rootDir, ".glubean", "screenshots"),
250
+ join(artifactRoot, "artifacts"),
251
+ join(artifactRoot, "screenshots"),
231
252
  ];
232
- const files = [];
253
+ const candidates = [];
233
254
  for (const dir of artifactDirs) {
234
255
  const dirFiles = await walkDir(dir);
235
256
  for (const filePath of dirFiles) {
236
- files.push({
257
+ candidates.push({
237
258
  path: filePath,
238
- relativeName: relative(join(rootDir, ".glubean"), filePath),
259
+ relativeName: relative(artifactRoot, filePath),
239
260
  });
240
261
  }
241
262
  }
242
- if (files.length === 0)
263
+ if (candidates.length === 0)
243
264
  return receipt;
244
- let tmpDir;
245
265
  try {
246
- // Build manifest
247
- const manifest = [];
248
- for (const file of files) {
266
+ const form = new FormData();
267
+ let uploadedCount = 0;
268
+ let skippedCount = 0;
269
+ let totalSize = 0;
270
+ for (const file of candidates) {
249
271
  const s = await stat(file.path);
250
- const ext = extname(file.relativeName);
251
- manifest.push({
252
- name: file.relativeName,
253
- artifactType: extToArtifactType(ext),
254
- mimeType: extToMime(ext),
255
- sizeBytes: s.size,
256
- });
257
- }
258
- const totalSize = manifest.reduce((sum, e) => sum + e.sizeBytes, 0);
259
- // Stage files + manifest into temp dir, then zip
260
- tmpDir = await mkdtemp(join(tmpdir(), "glubean-artifacts-"));
261
- const stagingDir = join(tmpDir, "staging");
262
- const filesDir = join(stagingDir, "files");
263
- await mkdir(filesDir, { recursive: true });
264
- for (const file of files) {
265
- const destPath = join(filesDir, file.relativeName);
266
- const destDir = destPath.substring(0, destPath.lastIndexOf("/"));
267
- await mkdir(destDir, { recursive: true });
268
- await copyFile(file.path, destPath);
269
- }
270
- await writeFile(join(stagingDir, "manifest.json"), JSON.stringify(manifest, null, 2), "utf-8");
271
- const zipPath = join(tmpDir, "artifacts.zip");
272
- try {
273
- await execFileAsync("zip", ["-r", zipPath, "."], { cwd: stagingDir });
272
+ if (s.size > INLINE_THRESHOLD) {
273
+ skippedCount += 1;
274
+ console.log(`${colors.yellow}Skipping artifact ${file.relativeName} (${(s.size / 1024).toFixed(0)} KB > 512 KB inline cap)${colors.reset}`);
275
+ continue;
276
+ }
277
+ const bytes = await readFile(file.path);
278
+ const mime = extToMime(extname(file.relativeName));
279
+ // Pass the Buffer (a Uint8Array view) directly — NOT `bytes.buffer`: small
280
+ // files from `readFile` can share a pooled ArrayBuffer at a non-zero
281
+ // byteOffset, so the raw `.buffer` would send neighbouring memory.
282
+ form.append("files", new Blob([bytes], { type: mime }), file.relativeName);
283
+ uploadedCount += 1;
284
+ totalSize += s.size;
274
285
  }
275
- catch {
276
- console.log(`${colors.yellow}Failed to create artifact archive${colors.reset}`);
286
+ if (uploadedCount === 0) {
287
+ // Everything was over the inline cap — record the skip, nothing posted.
277
288
  receipt.artifactUpload = {
278
- status: "failed",
279
- attempted: true,
280
- count: files.length,
281
- sizeBytes: totalSize,
282
- error: "Failed to create artifact archive",
289
+ status: "skipped",
290
+ attempted: false,
291
+ count: 0,
292
+ skipped: skippedCount,
283
293
  };
284
294
  return receipt;
285
295
  }
286
- const zipData = await readFile(zipPath);
287
- const zipSize = zipData.byteLength;
288
- const outcome = zipSize < INLINE_THRESHOLD
289
- ? await uploadArtifactsInline(apiUrl, token, runId, zipData)
290
- : await uploadArtifactsPresigned(apiUrl, token, runId, zipData, zipSize);
296
+ const outcome = await uploadArtifacts(apiUrl, token, projectId, targetId, runId, form);
291
297
  receipt.artifactUpload = {
292
298
  status: outcome.ok ? "uploaded" : "failed",
293
299
  attempted: true,
294
- count: files.length,
300
+ count: uploadedCount,
301
+ ...(skippedCount > 0 ? { skipped: skippedCount } : {}),
295
302
  sizeBytes: totalSize,
296
- archiveBytes: zipSize,
297
- mode: outcome.mode,
298
303
  ...(outcome.statusCode !== undefined ? { statusCode: outcome.statusCode } : {}),
299
304
  ...(outcome.error ? { error: outcome.error } : {}),
300
305
  };
@@ -303,7 +308,8 @@ export async function uploadToCloud(resultPayload, options) {
303
308
  const sizeStr = totalSize > 1024 * 1024
304
309
  ? `${(totalSize / 1024 / 1024).toFixed(1)} MB`
305
310
  : `${(totalSize / 1024).toFixed(1)} KB`;
306
- console.log(`${colors.green}Artifacts uploaded${colors.reset} ${colors.dim}(${files.length} files, ${sizeStr})${colors.reset}`);
311
+ const skipNote = skippedCount > 0 ? `, ${skippedCount} skipped` : "";
312
+ console.log(`${colors.green}Artifacts uploaded${colors.reset} ${colors.dim}(${uploadedCount} files, ${sizeStr}${skipNote})${colors.reset}`);
307
313
  return receipt;
308
314
  }
309
315
  catch (err) {
@@ -319,21 +325,16 @@ export async function uploadToCloud(resultPayload, options) {
319
325
  receipt.artifactUpload = {
320
326
  status: "failed",
321
327
  attempted: true,
322
- count: files.length,
328
+ count: candidates.length,
323
329
  error,
324
330
  };
325
331
  return receipt;
326
332
  }
327
- finally {
328
- if (tmpDir) {
329
- await rm(tmpDir, { recursive: true, force: true }).catch(() => { });
330
- }
331
- }
332
333
  }
333
- async function uploadArtifactsInline(apiUrl, token, runId, zipData) {
334
- const form = new FormData();
335
- form.append("archive", new Blob([zipData.buffer], { type: "application/zip" }), "artifacts.zip");
336
- const resp = await fetchWithRetry(`${apiUrl}/open/v1/cli-runs/${runId}/artifacts/upload`, {
334
+ /** POST the prepared multipart form of artifact parts to the run's inline
335
+ * artifact endpoint. Each part becomes one artifact server-side. */
336
+ async function uploadArtifacts(apiUrl, token, projectId, targetId, runId, form) {
337
+ const resp = await fetchWithRetry(`${apiUrl}/v1/projects/${projectId}/targets/${targetId}/runs/${runId}/artifacts`, {
337
338
  method: "POST",
338
339
  headers: { Authorization: `Bearer ${token}` },
339
340
  body: form,
@@ -342,80 +343,8 @@ async function uploadArtifactsInline(apiUrl, token, runId, zipData) {
342
343
  if (!resp.ok) {
343
344
  const errText = await resp.text();
344
345
  console.log(`${colors.yellow}Artifact upload failed (${resp.status}): ${errText}${colors.reset}`);
345
- return {
346
- ok: false,
347
- mode: "inline",
348
- statusCode: resp.status,
349
- error: errText,
350
- };
351
- }
352
- return { ok: true, mode: "inline", statusCode: resp.status };
353
- }
354
- async function uploadArtifactsPresigned(apiUrl, token, runId, zipData, zipSize) {
355
- const form = new FormData();
356
- form.append("size", String(zipSize));
357
- const urlResp = await fetchWithRetry(`${apiUrl}/open/v1/cli-runs/${runId}/artifacts/upload`, {
358
- method: "POST",
359
- headers: { Authorization: `Bearer ${token}` },
360
- body: form,
361
- timeoutMs: RESULTS_TIMEOUT_MS,
362
- });
363
- if (!urlResp.ok) {
364
- const errText = await urlResp.text();
365
- console.log(`${colors.yellow}Artifact upload URL request failed (${urlResp.status}): ${errText}${colors.reset}`);
366
- return {
367
- ok: false,
368
- mode: "presigned",
369
- statusCode: urlResp.status,
370
- error: errText,
371
- };
372
- }
373
- const { signedUrl, archiveKey } = await urlResp.json();
374
- if (typeof signedUrl !== "string" || typeof archiveKey !== "string") {
375
- const error = "Artifact upload URL response was missing signedUrl or archiveKey.";
376
- console.log(`${colors.yellow}${error}${colors.reset}`);
377
- return {
378
- ok: false,
379
- mode: "presigned",
380
- statusCode: urlResp.status,
381
- error,
382
- };
383
- }
384
- const putResp = await fetchWithRetry(signedUrl, {
385
- method: "PUT",
386
- headers: { "Content-Type": "application/zip" },
387
- body: zipData,
388
- timeoutMs: ARTIFACT_TIMEOUT_MS,
389
- });
390
- if (!putResp.ok) {
391
- const errText = await putResp.text().catch(() => "");
392
- console.log(`${colors.yellow}Artifact upload failed (${putResp.status})${errText ? `: ${errText}` : ""}${colors.reset}`);
393
- return {
394
- ok: false,
395
- mode: "presigned",
396
- statusCode: putResp.status,
397
- error: errText || `HTTP ${putResp.status}`,
398
- };
399
- }
400
- const completeResp = await fetchWithRetry(`${apiUrl}/open/v1/cli-runs/${runId}/artifacts/upload/complete`, {
401
- method: "POST",
402
- headers: {
403
- "Content-Type": "application/json",
404
- Authorization: `Bearer ${token}`,
405
- },
406
- body: JSON.stringify({ archiveKey }),
407
- timeoutMs: RESULTS_TIMEOUT_MS,
408
- });
409
- if (!completeResp.ok) {
410
- const errText = await completeResp.text();
411
- console.log(`${colors.yellow}Artifact upload completion failed (${completeResp.status}): ${errText}${colors.reset}`);
412
- return {
413
- ok: false,
414
- mode: "presigned",
415
- statusCode: completeResp.status,
416
- error: errText,
417
- };
346
+ return { ok: false, statusCode: resp.status, error: errText };
418
347
  }
419
- return { ok: true, mode: "presigned", statusCode: completeResp.status };
348
+ return { ok: true, statusCode: resp.status };
420
349
  }
421
350
  //# sourceMappingURL=upload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAu2BH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA45BH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}