@botiverse/hands-cli 0.4.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.
@@ -0,0 +1,611 @@
1
+ /**
2
+ * `quiver builds` — list / inspect builds inside an app.
3
+ *
4
+ * Wires GET /api/apps/:appId/builds + GET /api/apps/:appId/builds/:buildId.
5
+ */
6
+ import { existsSync, readFileSync } from "node:fs";
7
+ import { basename, extname } from "node:path";
8
+ import { apiRequest, apiUploadFile } from "../lib/api.js";
9
+ function collect(value, previous) {
10
+ return previous.concat(value);
11
+ }
12
+ export function parseChangelogOptions(opts) {
13
+ const langAliases = { zh: "zh-CN", cn: "zh-CN" };
14
+ const byLang = {};
15
+ let plain;
16
+ const values = (value) => {
17
+ if (value === undefined)
18
+ return [];
19
+ return Array.isArray(value) ? value : [value];
20
+ };
21
+ const consume = (entry, fromFile) => {
22
+ const eq = entry.indexOf("=");
23
+ if (eq > 0 && eq <= 10) {
24
+ const langRaw = entry.slice(0, eq).trim().toLowerCase();
25
+ const lang = langAliases[langRaw] ?? langRaw;
26
+ const value = entry.slice(eq + 1);
27
+ byLang[lang] = (fromFile ? readFileSync(value, "utf8") : value).trim();
28
+ }
29
+ else {
30
+ plain = (fromFile ? readFileSync(entry, "utf8") : entry).trim();
31
+ }
32
+ };
33
+ for (const entry of values(opts.changelog))
34
+ consume(entry, false);
35
+ for (const entry of values(opts.changelogFile))
36
+ consume(entry, true);
37
+ const langs = Object.keys(byLang);
38
+ if (langs.length > 0) {
39
+ if (plain !== undefined) {
40
+ throw new Error("mix of plain and lang= changelog entries; pick one style");
41
+ }
42
+ return JSON.stringify(byLang);
43
+ }
44
+ return plain ?? null;
45
+ }
46
+ export function registerBuildCommands(program) {
47
+ const builds = program
48
+ .command("builds")
49
+ .description("Inspect builds inside an app.");
50
+ builds
51
+ .command("list <appIdOrSlug>")
52
+ .alias("ls")
53
+ .description("List builds for an app.")
54
+ .option("--limit <n>", "Max rows (default 50)", "50")
55
+ .option("--json", "Output JSON.", false)
56
+ .action(async (appIdOrSlug, opts) => {
57
+ const id = await resolveAppId(appIdOrSlug);
58
+ const res = await apiRequest(`/api/apps/${id}/builds`, { query: { limit: opts.limit } });
59
+ if (opts.json) {
60
+ console.log(JSON.stringify(res, null, 2));
61
+ return;
62
+ }
63
+ if (res.builds.length === 0) {
64
+ console.log("No builds yet.");
65
+ return;
66
+ }
67
+ for (const b of res.builds) {
68
+ const flag = b.should_force_update ? " [force]" : "";
69
+ console.log(`${b.version_name} (${b.version_code}) ${b.product_type}/${b.release_type} status=${b.status}${flag} id=${b.id.slice(0, 8)}`);
70
+ }
71
+ });
72
+ builds
73
+ .command("get <appIdOrSlug> <buildId>")
74
+ .description("Show details for a single build.")
75
+ .option("--json", "Output JSON.", false)
76
+ .action(async (appIdOrSlug, buildId, opts) => {
77
+ const id = await resolveAppId(appIdOrSlug);
78
+ const build = await apiRequest(`/api/apps/${id}/builds/${buildId}`);
79
+ if (opts.json) {
80
+ console.log(JSON.stringify(build, null, 2));
81
+ return;
82
+ }
83
+ console.log(`${build.version_name} (${build.version_code})`);
84
+ console.log(` product_type: ${build.product_type}`);
85
+ console.log(` release_type: ${build.release_type}`);
86
+ console.log(` status: ${build.status}`);
87
+ console.log(` should_force_update: ${build.should_force_update ? "yes" : "no"}`);
88
+ console.log(` created_at: ${new Date(build.created_at).toISOString()}`);
89
+ if (build.completed_at) {
90
+ console.log(` completed_at: ${new Date(build.completed_at).toISOString()}`);
91
+ }
92
+ if (build.changelog) {
93
+ console.log(`\n changelog:\n${build.changelog.split("\n").map((l) => " " + l).join("\n")}`);
94
+ }
95
+ });
96
+ builds
97
+ .command("publish-android <appIdOrSlug>")
98
+ .description("Create an Android build/release and upload APK plus support artifacts.")
99
+ .requiredOption("--apk <path>", "Installable APK path.")
100
+ .requiredOption("--version-name <name>", "Android versionName.")
101
+ .requiredOption("--version-code <code>", "Android versionCode.")
102
+ .option("--channel <slug>", "Quiver channel slug.", "main")
103
+ .option("--arch <abi>", "APK ABI/arch metadata.", "arm64-v8a")
104
+ .option("--release-type <type>", "Release type metadata.", "stable")
105
+ .option("--product-type <type>", "Product type metadata.", "android-apk")
106
+ .option("--mapping <path>", "R8/ProGuard mapping.txt support artifact.")
107
+ .option("--symbols <path>", "Native symbols archive support artifact.")
108
+ .option("--dsym <path>", "iOS dSYM archive (dSYM.zip) support artifact.")
109
+ .option("--metadata <path>", "Build metadata JSON support artifact.")
110
+ .option("--changelog <text>", "Inline changelog. Repeatable with lang=text for multiple languages.", collect, [])
111
+ .option("--changelog-file <path>", "Read changelog from file. Repeatable with lang=path, e.g. --changelog-file zh=zh.md --changelog-file en=en.md.", collect, [])
112
+ .option("--source-commit <sha>", "Source commit SHA.")
113
+ .option("--source-branch <branch>", "Source branch.")
114
+ .option("--build-time <iso>", "Build time. Defaults to now.")
115
+ .option("--ci-provider <name>", "CI provider name.")
116
+ .option("--ci-run-id <id>", "CI run id.")
117
+ .option("--ci-url <url>", "CI run URL.")
118
+ .option("--force-update", "Mark release as force update.", false)
119
+ .option("--draft", "Create draft release instead of active.", false)
120
+ .option("--json", "Output JSON.", false)
121
+ .action(async (appIdOrSlug, opts) => {
122
+ const appId = await resolveAppId(appIdOrSlug);
123
+ const channelId = await resolveChannelId(appId, opts.channel);
124
+ const versionCode = Number(opts.versionCode);
125
+ if (!Number.isFinite(versionCode) || versionCode < 0) {
126
+ throw new Error("--version-code must be a non-negative number");
127
+ }
128
+ for (const file of [opts.apk, opts.mapping, opts.symbols, opts.dsym, opts.metadata].filter(Boolean)) {
129
+ if (!existsSync(file))
130
+ throw new Error(`missing file: ${file}`);
131
+ }
132
+ const changelog = parseChangelogOptions(opts);
133
+ const metadataJson = opts.metadata
134
+ ? JSON.parse(readFileSync(opts.metadata, "utf8"))
135
+ : {};
136
+ const provenance = {
137
+ source_commit: opts.sourceCommit ?? null,
138
+ source_branch: opts.sourceBranch ?? null,
139
+ build_time: opts.buildTime ?? new Date().toISOString(),
140
+ ci_provider: opts.ciProvider ?? null,
141
+ ci_run_id: opts.ciRunId ?? null,
142
+ ci_url: opts.ciUrl ?? null,
143
+ };
144
+ const build = await apiRequest(`/api/apps/${appId}/builds`, {
145
+ method: "POST",
146
+ body: {
147
+ channel_id: channelId,
148
+ product_type: opts.productType,
149
+ release_type: opts.releaseType,
150
+ version_name: opts.versionName,
151
+ version_code: versionCode,
152
+ changelog,
153
+ source: "cli",
154
+ status: "succeeded",
155
+ build_metadata_json: metadataJson,
156
+ provenance_json: provenance,
157
+ should_force_update: Boolean(opts.forceUpdate),
158
+ },
159
+ });
160
+ const assets = [];
161
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.apk, {
162
+ artifact_kind: "installable",
163
+ platform: "android",
164
+ arch: opts.arch,
165
+ filetype: "apk",
166
+ }));
167
+ if (opts.mapping) {
168
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.mapping, {
169
+ artifact_kind: "proguard-mapping",
170
+ platform: "android",
171
+ arch: null,
172
+ filetype: "mapping.txt",
173
+ }));
174
+ }
175
+ if (opts.symbols) {
176
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.symbols, {
177
+ artifact_kind: "native-symbols",
178
+ platform: "android",
179
+ arch: null,
180
+ filetype: "symbols.zip",
181
+ }));
182
+ }
183
+ if (opts.dsym) {
184
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.dsym, {
185
+ artifact_kind: "dsym",
186
+ platform: "ios",
187
+ arch: null,
188
+ filetype: inferIosFiletype(opts.dsym),
189
+ metadata_json: { filename: basename(opts.dsym) },
190
+ }));
191
+ }
192
+ if (opts.metadata) {
193
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.metadata, {
194
+ artifact_kind: "metadata-file",
195
+ platform: "android",
196
+ arch: null,
197
+ filetype: inferIosFiletype(opts.metadata),
198
+ metadata_json: { filename: basename(opts.metadata) },
199
+ }));
200
+ }
201
+ const release = await apiRequest(`/api/apps/${appId}/releases`, {
202
+ method: "POST",
203
+ body: {
204
+ build_id: build.id,
205
+ channel_id: channelId,
206
+ product_type: opts.productType,
207
+ release_type: opts.releaseType,
208
+ status: opts.draft ? "draft" : "active",
209
+ changelog,
210
+ should_force_update: Boolean(opts.forceUpdate),
211
+ provenance_json: provenance,
212
+ scopes: [{ scope_type: "full", scope_value: "all" }],
213
+ },
214
+ });
215
+ const result = {
216
+ app_id: appId,
217
+ build_id: build.id,
218
+ release_id: release.id,
219
+ channel: opts.channel,
220
+ version_name: opts.versionName,
221
+ version_code: versionCode,
222
+ assets,
223
+ };
224
+ if (opts.json) {
225
+ console.log(JSON.stringify(result, null, 2));
226
+ return;
227
+ }
228
+ console.log(`Published Android release ${opts.versionName} (${versionCode})`);
229
+ console.log(` build: ${build.id}`);
230
+ console.log(` release: ${release.id}`);
231
+ console.log(` channel: ${opts.channel}`);
232
+ console.log(` assets: ${assets.map((a) => `${a.artifact_kind}:${a.filetype}`).join(", ")}`);
233
+ });
234
+ builds
235
+ .command("publish-ios <appIdOrSlug>")
236
+ .description("Register an iOS build/release and upload the signed .ipa plus its dSYM archive for crash symbolication. Hands stores and associates the build; it does not sign (macOS CI produces the signed .ipa).")
237
+ .requiredOption("--ipa <path>", "Signed .ipa installable artifact.")
238
+ .requiredOption("--version-name <name>", "iOS CFBundleShortVersionString.")
239
+ .requiredOption("--version-code <code>", "iOS CFBundleVersion — must match what the app reports so crashes symbolicate against the right dSYM.")
240
+ .option("--channel <slug>", "Hands channel slug.", "main")
241
+ .option("--release-type <type>", "Release type metadata.", "stable")
242
+ .option("--product-type <type>", "Product type metadata.", "ios-ipa")
243
+ .option("--dsym <path>", "dSYM archive (dSYM.zip) for crash symbolication (strongly recommended).")
244
+ .option("--metadata <path>", "Build metadata JSON support artifact.")
245
+ .option("--changelog <text>", "Inline changelog. Repeatable with lang=text for multiple languages.", collect, [])
246
+ .option("--changelog-file <path>", "Read changelog from file. Repeatable with lang=path, e.g. --changelog-file zh=zh.md --changelog-file en=en.md.", collect, [])
247
+ .option("--source-commit <sha>", "Source commit SHA.")
248
+ .option("--source-branch <branch>", "Source branch.")
249
+ .option("--build-time <iso>", "Build time. Defaults to now.")
250
+ .option("--ci-provider <name>", "CI provider name.")
251
+ .option("--ci-run-id <id>", "CI run id.")
252
+ .option("--ci-url <url>", "CI run URL.")
253
+ .option("--export-method <method>", "Xcode export method (app-store, ad-hoc, development, enterprise).")
254
+ .option("--appstore-build-number <n>", "App Store Connect build number.")
255
+ .option("--testflight-status <status>", "TestFlight processing status.")
256
+ .option("--force-update", "Mark release as force update.", false)
257
+ .option("--draft", "Create draft release instead of active.", false)
258
+ .option("--json", "Output JSON.", false)
259
+ .action(async (appIdOrSlug, opts) => {
260
+ const appId = await resolveAppId(appIdOrSlug);
261
+ const channelId = await resolveChannelId(appId, opts.channel);
262
+ const versionCode = Number(opts.versionCode);
263
+ if (!Number.isFinite(versionCode) || versionCode < 0) {
264
+ throw new Error("--version-code must be a non-negative number");
265
+ }
266
+ for (const file of [opts.ipa, opts.dsym, opts.metadata].filter(Boolean)) {
267
+ if (!existsSync(file))
268
+ throw new Error(`missing file: ${file}`);
269
+ }
270
+ const ipaName = basename(opts.ipa);
271
+ const changelog = parseChangelogOptions(opts);
272
+ const metadataJson = opts.metadata
273
+ ? JSON.parse(readFileSync(opts.metadata, "utf8"))
274
+ : {};
275
+ const buildMetadata = {
276
+ ...metadataJson,
277
+ ios: {
278
+ ipa: ipaName,
279
+ dsym: opts.dsym ? basename(opts.dsym) : null,
280
+ signed: true,
281
+ signing_owner: "ci",
282
+ export_method: opts.exportMethod ?? null,
283
+ appstore_build_number: opts.appstoreBuildNumber ?? null,
284
+ testflight_status: opts.testflightStatus ?? null,
285
+ },
286
+ };
287
+ const provenance = {
288
+ source_commit: opts.sourceCommit ?? null,
289
+ source_branch: opts.sourceBranch ?? null,
290
+ build_time: opts.buildTime ?? new Date().toISOString(),
291
+ ci_provider: opts.ciProvider ?? null,
292
+ ci_run_id: opts.ciRunId ?? null,
293
+ ci_url: opts.ciUrl ?? null,
294
+ };
295
+ const build = await apiRequest(`/api/apps/${appId}/builds`, {
296
+ method: "POST",
297
+ body: {
298
+ channel_id: channelId,
299
+ product_type: opts.productType,
300
+ release_type: opts.releaseType,
301
+ version_name: opts.versionName,
302
+ version_code: versionCode,
303
+ changelog,
304
+ source: "cli",
305
+ status: "succeeded",
306
+ build_metadata_json: buildMetadata,
307
+ provenance_json: provenance,
308
+ should_force_update: Boolean(opts.forceUpdate),
309
+ },
310
+ });
311
+ const assets = [];
312
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.ipa, {
313
+ artifact_kind: "installable",
314
+ platform: "ios",
315
+ arch: null,
316
+ filetype: inferIosFiletype(opts.ipa),
317
+ metadata_json: {
318
+ filename: ipaName,
319
+ signed: true,
320
+ distribution: "testflight",
321
+ },
322
+ }));
323
+ if (opts.dsym) {
324
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.dsym, {
325
+ artifact_kind: "dsym",
326
+ platform: "ios",
327
+ arch: null,
328
+ filetype: inferIosFiletype(opts.dsym),
329
+ metadata_json: { filename: basename(opts.dsym) },
330
+ }));
331
+ }
332
+ if (opts.metadata) {
333
+ assets.push(await uploadAndRegisterAsset(appId, build.id, opts.metadata, {
334
+ artifact_kind: "metadata-file",
335
+ platform: "ios",
336
+ arch: null,
337
+ filetype: inferIosFiletype(opts.metadata),
338
+ metadata_json: { filename: basename(opts.metadata) },
339
+ }));
340
+ }
341
+ const release = await apiRequest(`/api/apps/${appId}/releases`, {
342
+ method: "POST",
343
+ body: {
344
+ build_id: build.id,
345
+ channel_id: channelId,
346
+ product_type: opts.productType,
347
+ release_type: opts.releaseType,
348
+ status: opts.draft ? "draft" : "active",
349
+ changelog,
350
+ should_force_update: Boolean(opts.forceUpdate),
351
+ provenance_json: provenance,
352
+ scopes: [{ scope_type: "full", scope_value: "all" }],
353
+ },
354
+ });
355
+ const result = {
356
+ app_id: appId,
357
+ build_id: build.id,
358
+ release_id: release.id,
359
+ channel: opts.channel,
360
+ version_name: opts.versionName,
361
+ version_code: versionCode,
362
+ assets,
363
+ };
364
+ if (opts.json) {
365
+ console.log(JSON.stringify(result, null, 2));
366
+ return;
367
+ }
368
+ console.log(`Published iOS release ${opts.versionName} (${versionCode})`);
369
+ console.log(` build: ${build.id}`);
370
+ console.log(` release: ${release.id}`);
371
+ console.log(` channel: ${opts.channel}`);
372
+ console.log(` assets: ${assets.map((a) => `${a.artifact_kind}:${a.filetype}`).join(", ")}`);
373
+ if (!opts.dsym) {
374
+ console.error("warning: no --dsym uploaded; iOS crashes for this version_code won't symbolicate.");
375
+ }
376
+ console.log(" note: upload the same signed IPA to TestFlight from macOS CI.");
377
+ });
378
+ builds
379
+ .command("publish-electron <appIdOrSlug>")
380
+ .description("Create an Electron generic-provider build/release and upload electron-builder output.")
381
+ .requiredOption("--version-name <name>", "Electron app version.")
382
+ .requiredOption("--version-code <code>", "Quiver version code used for ordering.")
383
+ .option("--metadata <path>", "electron-builder latest*.yml file. Repeatable.", collect, [])
384
+ .option("--installer <path>", "Electron installer/update artifact. Repeatable.", collect, [])
385
+ .option("--blockmap <path>", "Electron .blockmap artifact. Repeatable.", collect, [])
386
+ .option("--symbols <path>", "Breakpad symbols archive (dump_syms output, .zip) for crash symbolication. Repeatable.", collect, [])
387
+ .option("--channel <slug>", "Quiver channel slug.", "main")
388
+ .option("--platform <platform>", "Electron platform metadata. Defaults from metadata filename or win32.")
389
+ .option("--arch <arch>", "Electron arch metadata.")
390
+ .option("--release-type <type>", "Release type metadata.", "stable")
391
+ .option("--product-type <type>", "Product type metadata.", "electron-installer")
392
+ .option("--changelog <text>", "Inline changelog. Repeatable with lang=text for multiple languages.", collect, [])
393
+ .option("--changelog-file <path>", "Read changelog from file. Repeatable with lang=path, e.g. --changelog-file zh=zh.md --changelog-file en=en.md.", collect, [])
394
+ .option("--source-commit <sha>", "Source commit SHA.")
395
+ .option("--source-branch <branch>", "Source branch.")
396
+ .option("--build-time <iso>", "Build time. Defaults to now.")
397
+ .option("--ci-provider <name>", "CI provider name.")
398
+ .option("--ci-run-id <id>", "CI run id.")
399
+ .option("--ci-url <url>", "CI run URL.")
400
+ .option("--force-update", "Mark release as force update.", false)
401
+ .option("--draft", "Create draft release instead of active.", false)
402
+ .option("--json", "Output JSON.", false)
403
+ .action(async (appIdOrSlug, opts) => {
404
+ const files = [...opts.metadata, ...opts.installer, ...opts.blockmap, ...opts.symbols];
405
+ if (files.length === 0) {
406
+ throw new Error("provide at least one --metadata, --installer, --blockmap, or --symbols file");
407
+ }
408
+ const metadataFiles = opts.metadata;
409
+ const installerFiles = opts.installer;
410
+ const blockmapFiles = opts.blockmap;
411
+ const symbolsFiles = opts.symbols;
412
+ for (const file of files) {
413
+ if (!existsSync(file))
414
+ throw new Error(`missing file: ${file}`);
415
+ }
416
+ const appId = await resolveAppId(appIdOrSlug);
417
+ const channelId = await resolveChannelId(appId, opts.channel);
418
+ const versionCode = Number(opts.versionCode);
419
+ if (!Number.isFinite(versionCode) || versionCode < 0) {
420
+ throw new Error("--version-code must be a non-negative number");
421
+ }
422
+ const primaryPlatform = opts.platform ?? inferElectronPlatform(metadataFiles[0] ?? installerFiles[0]);
423
+ const arch = opts.arch ?? null;
424
+ const changelog = parseChangelogOptions(opts);
425
+ const provenance = {
426
+ source_commit: opts.sourceCommit ?? null,
427
+ source_branch: opts.sourceBranch ?? null,
428
+ build_time: opts.buildTime ?? new Date().toISOString(),
429
+ ci_provider: opts.ciProvider ?? null,
430
+ ci_run_id: opts.ciRunId ?? null,
431
+ ci_url: opts.ciUrl ?? null,
432
+ };
433
+ const buildMetadata = {
434
+ electron: {
435
+ metadata_files: metadataFiles.map((file) => basename(file)),
436
+ installer_files: installerFiles.map((file) => basename(file)),
437
+ blockmap_files: blockmapFiles.map((file) => basename(file)),
438
+ platform: primaryPlatform,
439
+ arch,
440
+ },
441
+ };
442
+ const build = await apiRequest(`/api/apps/${appId}/builds`, {
443
+ method: "POST",
444
+ body: {
445
+ channel_id: channelId,
446
+ product_type: opts.productType,
447
+ release_type: opts.releaseType,
448
+ version_name: opts.versionName,
449
+ version_code: versionCode,
450
+ changelog,
451
+ source: "cli",
452
+ status: "succeeded",
453
+ build_metadata_json: buildMetadata,
454
+ provenance_json: provenance,
455
+ should_force_update: Boolean(opts.forceUpdate),
456
+ },
457
+ });
458
+ const assets = [];
459
+ for (const file of metadataFiles) {
460
+ const platform = opts.platform ?? inferElectronPlatform(file);
461
+ const fileName = basename(file);
462
+ assets.push(await uploadAndRegisterAsset(appId, build.id, file, {
463
+ artifact_kind: "electron-metadata",
464
+ platform,
465
+ arch,
466
+ filetype: inferElectronFiletype(file),
467
+ variant: fileName,
468
+ metadata_json: { filename: fileName },
469
+ }));
470
+ }
471
+ for (const file of installerFiles) {
472
+ const fileName = basename(file);
473
+ assets.push(await uploadAndRegisterAsset(appId, build.id, file, {
474
+ artifact_kind: "installable",
475
+ platform: primaryPlatform,
476
+ arch,
477
+ filetype: inferElectronFiletype(file),
478
+ metadata_json: { filename: fileName },
479
+ }));
480
+ }
481
+ for (const file of blockmapFiles) {
482
+ const fileName = basename(file);
483
+ assets.push(await uploadAndRegisterAsset(appId, build.id, file, {
484
+ artifact_kind: "electron-blockmap",
485
+ platform: primaryPlatform,
486
+ arch,
487
+ filetype: "blockmap",
488
+ metadata_json: { filename: fileName },
489
+ }));
490
+ }
491
+ for (const file of symbolsFiles) {
492
+ const fileName = basename(file);
493
+ assets.push(await uploadAndRegisterAsset(appId, build.id, file, {
494
+ artifact_kind: "breakpad-symbols",
495
+ platform: primaryPlatform,
496
+ arch,
497
+ filetype: "breakpad.zip",
498
+ metadata_json: { filename: fileName },
499
+ }));
500
+ }
501
+ const release = await apiRequest(`/api/apps/${appId}/releases`, {
502
+ method: "POST",
503
+ body: {
504
+ build_id: build.id,
505
+ channel_id: channelId,
506
+ product_type: opts.productType,
507
+ release_type: opts.releaseType,
508
+ status: opts.draft ? "draft" : "active",
509
+ changelog,
510
+ should_force_update: Boolean(opts.forceUpdate),
511
+ provenance_json: provenance,
512
+ scopes: [{ scope_type: "full", scope_value: "all" }],
513
+ },
514
+ });
515
+ const result = {
516
+ app_id: appId,
517
+ build_id: build.id,
518
+ release_id: release.id,
519
+ channel: opts.channel,
520
+ version_name: opts.versionName,
521
+ version_code: versionCode,
522
+ assets,
523
+ };
524
+ if (opts.json) {
525
+ console.log(JSON.stringify(result, null, 2));
526
+ return;
527
+ }
528
+ console.log(`Published Electron release ${opts.versionName} (${versionCode})`);
529
+ console.log(` build: ${build.id}`);
530
+ console.log(` release: ${release.id}`);
531
+ console.log(` channel: ${opts.channel}`);
532
+ console.log(` assets: ${assets.map((a) => `${a.artifact_kind}:${a.filetype}`).join(", ")}`);
533
+ });
534
+ }
535
+ async function resolveAppId(slugOrId) {
536
+ if (slugOrId.length === 36 && slugOrId.split("-").length === 5) {
537
+ return slugOrId;
538
+ }
539
+ const res = await apiRequest("/api/apps");
540
+ const match = res.apps.find((a) => a.slug === slugOrId);
541
+ if (!match) {
542
+ console.error(`No app with slug '${slugOrId}'.`);
543
+ process.exit(1);
544
+ }
545
+ return match.id;
546
+ }
547
+ async function resolveChannelId(appId, channelSlugOrId) {
548
+ const res = await apiRequest(`/api/apps/${appId}/channels`);
549
+ const match = res.channels.find((channel) => channel.id === channelSlugOrId || channel.slug === channelSlugOrId);
550
+ if (!match) {
551
+ console.error(`No channel '${channelSlugOrId}' for app '${appId}'.`);
552
+ process.exit(1);
553
+ }
554
+ return match.id;
555
+ }
556
+ async function uploadAndRegisterAsset(appId, buildId, filePath, metadata) {
557
+ const uploaded = await apiUploadFile(`/api/apps/${appId}/upload`, filePath);
558
+ const asset = await apiRequest(`/api/apps/${appId}/builds/${buildId}/assets`, {
559
+ method: "POST",
560
+ body: {
561
+ ...metadata,
562
+ r2_key: uploaded.r2_key,
563
+ file_hash: uploaded.file_hash,
564
+ size_bytes: uploaded.size_bytes,
565
+ variant: metadata.variant ?? null,
566
+ metadata_json: {
567
+ original_filename: uploaded.original_filename,
568
+ filename: basename(filePath),
569
+ ...metadata.metadata_json,
570
+ },
571
+ },
572
+ });
573
+ return {
574
+ id: asset.id,
575
+ artifact_kind: metadata.artifact_kind,
576
+ filetype: metadata.filetype,
577
+ file_hash: uploaded.file_hash,
578
+ size_bytes: uploaded.size_bytes,
579
+ };
580
+ }
581
+ export function inferElectronPlatform(filePath) {
582
+ const name = filePath ? basename(filePath).toLowerCase() : "";
583
+ if (name.includes("-mac.") || name.includes("mac") || name.endsWith(".dmg")) {
584
+ return "darwin";
585
+ }
586
+ if (name.includes("-linux.") || name.includes("linux") || name.endsWith(".appimage")) {
587
+ return "linux";
588
+ }
589
+ return "win32";
590
+ }
591
+ export function inferElectronFiletype(filePath) {
592
+ const name = basename(filePath);
593
+ if (name.endsWith(".blockmap"))
594
+ return "blockmap";
595
+ if (name.endsWith(".AppImage"))
596
+ return "AppImage";
597
+ const ext = extname(name).replace(/^\./, "");
598
+ return ext || "bin";
599
+ }
600
+ export function inferIosFiletype(filePath) {
601
+ const name = basename(filePath).toLowerCase();
602
+ if (name.endsWith(".dsym.zip"))
603
+ return "dsym.zip";
604
+ if (name.endsWith(".ipa"))
605
+ return "ipa";
606
+ if (name.endsWith(".json"))
607
+ return "metadata.json";
608
+ const ext = extname(name).replace(/^\./, "");
609
+ return ext || "bin";
610
+ }
611
+ //# sourceMappingURL=builds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builds.js","sourceRoot":"","sources":["../../src/commands/builds.ts"],"names":[],"mappings":"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"}