@glubean/cli 0.8.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.
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +24 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/load.d.ts +11 -0
- package/dist/commands/load.d.ts.map +1 -1
- package/dist/commands/load.js +192 -0
- package/dist/commands/load.js.map +1 -1
- package/dist/commands/login.d.ts +14 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +110 -49
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/run.d.ts +7 -0
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +202 -93
- package/dist/commands/run.js.map +1 -1
- package/dist/lib/auth.d.ts +57 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +134 -1
- package/dist/lib/auth.js.map +1 -1
- package/dist/lib/config.d.ts +15 -5
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +6 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +6 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +6 -1
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/print-plan.d.ts.map +1 -1
- package/dist/lib/print-plan.js +4 -0
- package/dist/lib/print-plan.js.map +1 -1
- package/dist/lib/upload.d.ts +88 -10
- package/dist/lib/upload.d.ts.map +1 -1
- package/dist/lib/upload.js +117 -188
- package/dist/lib/upload.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +47 -8
- package/dist/main.js.map +1 -1
- package/package.json +6 -6
- package/dist/lib/env.d.ts +0 -29
- package/dist/lib/env.d.ts.map +0 -1
- package/dist/lib/env.js +0 -59
- package/dist/lib/env.js.map +0 -1
package/dist/lib/upload.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/lib/upload.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/upload.js
CHANGED
|
@@ -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
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
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
|
|
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
|
|
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(
|
|
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:
|
|
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
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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(
|
|
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.
|
|
193
|
-
|
|
194
|
-
|
|
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}
|
|
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(
|
|
230
|
-
join(
|
|
250
|
+
join(artifactRoot, "artifacts"),
|
|
251
|
+
join(artifactRoot, "screenshots"),
|
|
231
252
|
];
|
|
232
|
-
const
|
|
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
|
-
|
|
257
|
+
candidates.push({
|
|
237
258
|
path: filePath,
|
|
238
|
-
relativeName: relative(
|
|
259
|
+
relativeName: relative(artifactRoot, filePath),
|
|
239
260
|
});
|
|
240
261
|
}
|
|
241
262
|
}
|
|
242
|
-
if (
|
|
263
|
+
if (candidates.length === 0)
|
|
243
264
|
return receipt;
|
|
244
|
-
let tmpDir;
|
|
245
265
|
try {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
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
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
276
|
-
|
|
286
|
+
if (uploadedCount === 0) {
|
|
287
|
+
// Everything was over the inline cap — record the skip, nothing posted.
|
|
277
288
|
receipt.artifactUpload = {
|
|
278
|
-
status: "
|
|
279
|
-
attempted:
|
|
280
|
-
count:
|
|
281
|
-
|
|
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
|
|
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:
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
const resp = await fetchWithRetry(`${apiUrl}/
|
|
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,
|
|
348
|
+
return { ok: true, statusCode: resp.status };
|
|
420
349
|
}
|
|
421
350
|
//# sourceMappingURL=upload.js.map
|
package/dist/lib/upload.js.map
CHANGED
|
@@ -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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"}
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA45BH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/main.js
CHANGED
|
@@ -99,6 +99,7 @@ program
|
|
|
99
99
|
.option("--upload", "Upload run results and artifacts to Glubean Cloud")
|
|
100
100
|
.option("--upload-receipt-json <path>", "Write Cloud upload receipt JSON after --upload")
|
|
101
101
|
.option("--project <id>", "Glubean Cloud project ID (or GLUBEAN_PROJECT_ID env)")
|
|
102
|
+
.option("--upload-target <id>", "Cloud target id runs upload to (or GLUBEAN_TARGET_ID; else project default)")
|
|
102
103
|
.option("--token <token>", "Auth token for cloud upload (or GLUBEAN_TOKEN env)")
|
|
103
104
|
.option("--api-url <url>", "Glubean API server URL")
|
|
104
105
|
.option("--input-json <value>", "Explicit case input as JSON literal or @path/to.json. Validated against the case's `needs` schema; runs raw (overlay skipped). Requires --filter to match exactly one testId.")
|
|
@@ -336,20 +337,28 @@ async function executeRun(target, options, cmd) {
|
|
|
336
337
|
: resultJson
|
|
337
338
|
? "<default: glubean-run.result.json or <testfile>.result.json>"
|
|
338
339
|
: undefined;
|
|
339
|
-
// Upload destination: when `--project <id>` is passed, the upload
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
// destination.
|
|
340
|
+
// Upload destination: when `--project <id>` is passed, the upload routes
|
|
341
|
+
// to that project id, overriding the profile's `projectId`. Reflect that
|
|
342
|
+
// (+ the enable bit and the effective TARGET) so the printed plan matches
|
|
343
|
+
// the actual destination. The target mirrors the executeRun resolution
|
|
344
|
+
// below: --upload-target wins, else the profile target UNLESS --project
|
|
345
|
+
// overrode the project (a profile target belongs to its own project), else
|
|
346
|
+
// the project's default target (resolved at run → shown as "(default)").
|
|
347
|
+
const effectiveUploadTarget = options.uploadTarget ??
|
|
348
|
+
(options.project ? undefined : resolvedPlan.upload?.targetId) ??
|
|
349
|
+
process.env.GLUBEAN_TARGET_ID;
|
|
343
350
|
const overrideUpload = resolvedPlan.upload
|
|
344
351
|
? {
|
|
345
352
|
...resolvedPlan.upload,
|
|
346
353
|
...(options.project ? { projectId: options.project } : {}),
|
|
354
|
+
targetId: effectiveUploadTarget,
|
|
347
355
|
...(options.upload === true ? { enabled: true } : {}),
|
|
348
356
|
}
|
|
349
357
|
: options.upload === true || options.project
|
|
350
358
|
? {
|
|
351
359
|
enabled: options.upload === true,
|
|
352
360
|
...(options.project ? { projectId: options.project } : {}),
|
|
361
|
+
...(effectiveUploadTarget ? { targetId: effectiveUploadTarget } : {}),
|
|
353
362
|
}
|
|
354
363
|
: undefined;
|
|
355
364
|
const printPlan = {
|
|
@@ -449,6 +458,16 @@ async function executeRun(target, options, cmd) {
|
|
|
449
458
|
// preflight doesn't exit with "no project ID found". The value may be
|
|
450
459
|
// a project id or a cloud alias (resolved server-side).
|
|
451
460
|
project: options.project ?? resolvedPlan?.upload?.projectId,
|
|
461
|
+
// Upload TARGET (runs live under a target — ADR 0007). CLI --upload-target
|
|
462
|
+
// wins. Otherwise inherit the profile's upload.targetId ONLY when --project
|
|
463
|
+
// didn't override the destination project — a profile target belongs to the
|
|
464
|
+
// profile's project, so pairing it with an overridden project would post to
|
|
465
|
+
// /projects/<override>/targets/<profile-target> and 404. With an override
|
|
466
|
+
// and no --upload-target, fall through to the override project's default
|
|
467
|
+
// target (resolved server-side). Env GLUBEAN_TARGET_ID still applies via
|
|
468
|
+
// resolveTargetId when nothing is passed here.
|
|
469
|
+
target: options.uploadTarget ??
|
|
470
|
+
(options.project ? undefined : resolvedPlan?.upload?.targetId),
|
|
452
471
|
// Per-profile token reference: which env var holds THIS profile's
|
|
453
472
|
// upload token. resolveToken reads it exclusively (no GLUBEAN_TOKEN
|
|
454
473
|
// fallback) so profiles can target different projects safely.
|
|
@@ -533,6 +552,7 @@ ciCmd
|
|
|
533
552
|
.option("--upload", "Upload run results and artifacts to Glubean Cloud")
|
|
534
553
|
.option("--upload-receipt-json <path>", "Write Cloud upload receipt JSON after --upload")
|
|
535
554
|
.option("--project <id>", "Glubean Cloud project ID (or GLUBEAN_PROJECT_ID env)")
|
|
555
|
+
.option("--upload-target <id>", "Cloud target id runs upload to (or GLUBEAN_TARGET_ID; else project default)")
|
|
536
556
|
.option("--token <token>", "Auth token for cloud upload (or GLUBEAN_TOKEN env)")
|
|
537
557
|
.option("--api-url <url>", "Glubean API server URL")
|
|
538
558
|
.option("--input-json <value>", "Explicit case input as JSON literal or @path/to.json. Validated against the case's `needs` schema; runs raw (overlay skipped). Requires --filter to match exactly one testId.")
|
|
@@ -566,8 +586,22 @@ program
|
|
|
566
586
|
.command("load [target]")
|
|
567
587
|
.description("Run loadRunner() performance plans (.load.ts) and write LoadArtifacts")
|
|
568
588
|
.option("--env-file <name>", "Env file basename (default: active env, else .env)")
|
|
589
|
+
.option("--upload", "Upload each plan's LoadArtifact to Glubean Cloud")
|
|
590
|
+
.option("--upload-receipt-json <path>", "Write Cloud upload receipt(s) JSON after --upload")
|
|
591
|
+
.option("--project <id>", "Glubean Cloud project ID (or GLUBEAN_PROJECT_ID env)")
|
|
592
|
+
.option("--upload-target <id>", "Cloud target id runs upload to (or GLUBEAN_TARGET_ID; else project default)")
|
|
593
|
+
.option("--token <token>", "Auth token for cloud upload (or GLUBEAN_TOKEN env)")
|
|
594
|
+
.option("--api-url <url>", "Glubean API server URL")
|
|
569
595
|
.action(async (target, options) => {
|
|
570
|
-
await loadCommand(target, {
|
|
596
|
+
await loadCommand(target, {
|
|
597
|
+
envFile: options.envFile,
|
|
598
|
+
upload: options.upload,
|
|
599
|
+
uploadReceiptJson: options.uploadReceiptJson,
|
|
600
|
+
project: options.project,
|
|
601
|
+
target: options.uploadTarget,
|
|
602
|
+
token: options.token,
|
|
603
|
+
apiUrl: options.apiUrl,
|
|
604
|
+
});
|
|
571
605
|
});
|
|
572
606
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
573
607
|
// contracts command
|
|
@@ -619,15 +653,20 @@ program
|
|
|
619
653
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
620
654
|
program
|
|
621
655
|
.command("login")
|
|
622
|
-
.description("Authenticate with Glubean Cloud")
|
|
623
|
-
.option("--token <token>", "
|
|
656
|
+
.description("Authenticate with Glubean Cloud (device authorization in your browser)")
|
|
657
|
+
.option("--token <token>", "Save a project token directly (skip the browser device flow)")
|
|
624
658
|
.option("--project <id>", "Default project ID")
|
|
625
|
-
.option("--api-url <url>", "API
|
|
659
|
+
.option("--api-url <url>", "Platform API URL for uploads (or GLUBEAN_API_URL)")
|
|
660
|
+
.option("--auth-url <url>", "Auth server URL for login (or GLUBEAN_AUTH_URL)")
|
|
661
|
+
.option("--no-browser", "Don't auto-open the browser; print the URL to open manually")
|
|
626
662
|
.action(async (options) => {
|
|
627
663
|
await loginCommand({
|
|
628
664
|
token: options.token,
|
|
629
665
|
project: options.project,
|
|
630
666
|
apiUrl: options.apiUrl,
|
|
667
|
+
authUrl: options.authUrl,
|
|
668
|
+
// commander stores --no-browser as options.browser === false
|
|
669
|
+
noBrowser: options.browser === false,
|
|
631
670
|
});
|
|
632
671
|
});
|
|
633
672
|
// ─────────────────────────────────────────────────────────────────────────────
|