@scalebun/cli 1.0.0 → 1.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.
- package/lib/api/client.d.ts +8 -0
- package/lib/api/client.d.ts.map +1 -1
- package/lib/api/client.js +70 -2
- package/lib/api/client.js.map +1 -1
- package/lib/commands/ci-init.d.ts +0 -6
- package/lib/commands/ci-init.d.ts.map +1 -1
- package/lib/commands/ci-init.js +172 -28
- package/lib/commands/ci-init.js.map +1 -1
- package/lib/commands/doctor.d.ts +8 -0
- package/lib/commands/doctor.d.ts.map +1 -0
- package/lib/commands/doctor.js +252 -0
- package/lib/commands/doctor.js.map +1 -0
- package/lib/commands/login.d.ts +28 -4
- package/lib/commands/login.d.ts.map +1 -1
- package/lib/commands/login.js +132 -51
- package/lib/commands/login.js.map +1 -1
- package/lib/commands/ota-bundle.d.ts.map +1 -1
- package/lib/commands/ota-bundle.js +2 -0
- package/lib/commands/ota-bundle.js.map +1 -1
- package/lib/commands/ota-delete-bundle.d.ts +8 -0
- package/lib/commands/ota-delete-bundle.d.ts.map +1 -1
- package/lib/commands/ota-delete-bundle.js +60 -0
- package/lib/commands/ota-delete-bundle.js.map +1 -1
- package/lib/commands/ota-keys.d.ts +14 -0
- package/lib/commands/ota-keys.d.ts.map +1 -0
- package/lib/commands/ota-keys.js +200 -0
- package/lib/commands/ota-keys.js.map +1 -0
- package/lib/commands/ota-publish.d.ts +10 -0
- package/lib/commands/ota-publish.d.ts.map +1 -1
- package/lib/commands/ota-publish.js +251 -34
- package/lib/commands/ota-publish.js.map +1 -1
- package/lib/commands/ota-rollout.d.ts +3 -0
- package/lib/commands/ota-rollout.d.ts.map +1 -0
- package/lib/commands/ota-rollout.js +235 -0
- package/lib/commands/ota-rollout.js.map +1 -0
- package/lib/commands/quickstart.d.ts +4 -0
- package/lib/commands/quickstart.d.ts.map +1 -0
- package/lib/commands/quickstart.js +274 -0
- package/lib/commands/quickstart.js.map +1 -0
- package/lib/index.js +20 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/bundle.d.ts +86 -0
- package/lib/utils/bundle.d.ts.map +1 -1
- package/lib/utils/bundle.js +244 -14
- package/lib/utils/bundle.js.map +1 -1
- package/lib/utils/credentials.d.ts +12 -1
- package/lib/utils/credentials.d.ts.map +1 -1
- package/lib/utils/credentials.js +40 -1
- package/lib/utils/credentials.js.map +1 -1
- package/lib/utils/transportSecurity.d.ts +36 -0
- package/lib/utils/transportSecurity.d.ts.map +1 -0
- package/lib/utils/transportSecurity.js +74 -0
- package/lib/utils/transportSecurity.js.map +1 -0
- package/lib/utils/ui.d.ts.map +1 -1
- package/lib/utils/ui.js +2 -0
- package/lib/utils/ui.js.map +1 -1
- package/package.json +1 -1
|
@@ -33,12 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseRolloutPercent = parseRolloutPercent;
|
|
36
37
|
exports.registerOtaPublishCommand = registerOtaPublishCommand;
|
|
37
38
|
const fs = __importStar(require("fs"));
|
|
39
|
+
const crypto = __importStar(require("crypto"));
|
|
38
40
|
const credentials_1 = require("../utils/credentials");
|
|
39
41
|
const client_1 = require("../api/client");
|
|
40
42
|
const bundle_1 = require("../utils/bundle");
|
|
41
43
|
const hash_1 = require("../utils/hash");
|
|
44
|
+
const ota_keys_1 = require("./ota-keys");
|
|
42
45
|
/**
|
|
43
46
|
* `scalebun ota publish` — the flagship CLI command.
|
|
44
47
|
*
|
|
@@ -51,6 +54,26 @@ const hash_1 = require("../utils/hash");
|
|
|
51
54
|
* 6. POST /saas/apps/:appId/ota/bundles/:id/promote → configure installMode & rollout
|
|
52
55
|
* 7. Print success
|
|
53
56
|
*/
|
|
57
|
+
/**
|
|
58
|
+
* Parse `--rollout`, refusing anything that isn't 0-100.
|
|
59
|
+
*
|
|
60
|
+
* This was `parseInt(x, 10) || 100`, which turned BOTH `--rollout 0` and any
|
|
61
|
+
* typo into a 100% rollout — the opposite of what the operator asked for. A
|
|
62
|
+
* dark release (0%) is a documented, legitimate way to promote a bundle without
|
|
63
|
+
* exposing it, so silently inverting it exposes every production device to an
|
|
64
|
+
* untested bundle. Exits rather than guessing.
|
|
65
|
+
*/
|
|
66
|
+
function parseRolloutPercent(raw) {
|
|
67
|
+
if (raw === undefined || raw === '')
|
|
68
|
+
return 100;
|
|
69
|
+
const n = Number(raw);
|
|
70
|
+
if (!Number.isInteger(n) || n < 0 || n > 100) {
|
|
71
|
+
console.error(`❌ --rollout must be a whole number from 0 to 100 (got "${raw}").\n` +
|
|
72
|
+
' 0 stages the release without serving it to anyone; 100 serves everyone.');
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
return n;
|
|
76
|
+
}
|
|
54
77
|
function registerOtaPublishCommand(ota) {
|
|
55
78
|
ota
|
|
56
79
|
.command('publish')
|
|
@@ -59,18 +82,23 @@ function registerOtaPublishCommand(ota) {
|
|
|
59
82
|
.option('--channel <nameOrId>', 'OTA channel name (e.g. default, beta, production) or channel ID', 'default')
|
|
60
83
|
.option('--channel-id <id>', 'OTA channel ID (legacy alias)')
|
|
61
84
|
.option('--platform <platform>', 'Target platform: android | ios', 'android')
|
|
62
|
-
.option('--install-mode <mode>', '
|
|
85
|
+
.option('--install-mode <mode>', 'IMMEDIATE (SDK restarts the app right after install; also marked mandatory) | ' +
|
|
86
|
+
'ON_NEXT_RESTART (default: activates on next cold boot) | ' +
|
|
87
|
+
'ON_NEXT_RESUME (SDK restarts when the app next returns to the foreground)', 'ON_NEXT_RESTART')
|
|
63
88
|
.option('--target-version <semver>', 'Target app native semver range (e.g. ">=1.0.0", "1.0.0")', '>=1.0.0')
|
|
64
89
|
.option('--rollout <percent>', 'Target rollout percentage (1-100)', '100')
|
|
65
90
|
.option('--entry-file <path>', 'JS entry file', 'index.js')
|
|
66
91
|
.option('--release-note <text>', 'Release note for dashboard display and device changelog')
|
|
67
|
-
.option('--hermes', 'Compile to Hermes bytecode (
|
|
68
|
-
.option('--hermes-disabled', '
|
|
92
|
+
.option('--hermes', 'Compile to Hermes bytecode (the default — flag kept for compatibility)')
|
|
93
|
+
.option('--hermes-disabled', 'Ship plain JS instead of Hermes bytecode (~20-30% slower cold start)')
|
|
94
|
+
.option('--allow-plain-js', 'Publish uncompiled JS if hermesc fails, instead of aborting')
|
|
95
|
+
.option('--key-dir <dir>', 'Directory holding the ed25519 signing key (default: ./.scalebun)')
|
|
69
96
|
.option('--skip-bundle', 'Skip react-native bundle (provide --bundle-path instead)')
|
|
70
97
|
.option('--bundle-path <path>', 'Path to a pre-built bundle file')
|
|
71
98
|
.option('--custom-bundle-path <path>', 'Alias for --bundle-path (explicit naming)')
|
|
72
99
|
.option('--sourcemap', 'Generate and upload sourcemap for crash symbolication')
|
|
73
100
|
.option('--keep-artifacts', 'Keep build artifacts (bundle + sourcemap) after upload')
|
|
101
|
+
.option('--skip-promote', 'Upload and finalize only — do not make the release live')
|
|
74
102
|
.action(async (opts) => {
|
|
75
103
|
const creds = (0, credentials_1.readCredentials)();
|
|
76
104
|
if (!creds) {
|
|
@@ -84,11 +112,29 @@ function registerOtaPublishCommand(ota) {
|
|
|
84
112
|
process.exit(1);
|
|
85
113
|
}
|
|
86
114
|
const installMode = rawInstallMode;
|
|
115
|
+
// Validate BEFORE building: a bad --rollout should cost a second, not a
|
|
116
|
+
// full Hermes compile.
|
|
117
|
+
const rolloutPercent = parseRolloutPercent(opts.rollout);
|
|
87
118
|
const targetChannel = opts.channelId || opts.channel || 'default';
|
|
88
119
|
const client = new client_1.ApiClient(creds);
|
|
89
120
|
const platform = opts.platform;
|
|
121
|
+
// Runtime binding. `targetAppVersion` gates on a marketing string; these
|
|
122
|
+
// are the actual contract between the bundle and the binary that runs
|
|
123
|
+
// it. The backend withholds a bundle from a device whose runtime does
|
|
124
|
+
// not match — see runtime-compat.ts.
|
|
125
|
+
const rnVersion = (0, bundle_1.detectProjectRnVersion)();
|
|
126
|
+
// Generated here, before the build, so it can be compiled into the JS.
|
|
127
|
+
// The SDK reads it back at boot to prove the bundle it installed is the
|
|
128
|
+
// one actually executing.
|
|
129
|
+
const identityToken = crypto.randomBytes(16).toString('hex');
|
|
130
|
+
// Sourcemap outcome tracking — the publish summary must report what
|
|
131
|
+
// actually happened, not what was requested.
|
|
132
|
+
let sourcemapStored = false;
|
|
133
|
+
let sourcemapRegistered = false;
|
|
90
134
|
// Step 1: Build the bundle (or use pre-built)
|
|
91
135
|
let bundlePath;
|
|
136
|
+
let hermesBytecodeVersion = null;
|
|
137
|
+
let bundleCarriesMarker = false;
|
|
92
138
|
if (opts.skipBundle && (opts.bundlePath || opts.customBundlePath)) {
|
|
93
139
|
bundlePath = opts.bundlePath || opts.customBundlePath;
|
|
94
140
|
if (!fs.existsSync(bundlePath)) {
|
|
@@ -96,20 +142,80 @@ function registerOtaPublishCommand(ota) {
|
|
|
96
142
|
process.exit(1);
|
|
97
143
|
}
|
|
98
144
|
console.log(`📦 Using pre-built bundle: ${bundlePath}`);
|
|
145
|
+
// A pre-built artifact is taken as-is: injecting a marker would mean
|
|
146
|
+
// rewriting someone else's build output, and if it is already Hermes
|
|
147
|
+
// bytecode a text prefix would corrupt it outright.
|
|
148
|
+
hermesBytecodeVersion = (0, bundle_1.readHermesBytecodeVersion)(bundlePath);
|
|
149
|
+
console.log(' ℹ️ Pre-built bundle — no identity marker injected. Install verification ' +
|
|
150
|
+
'will be unavailable for this release.');
|
|
99
151
|
}
|
|
100
152
|
else {
|
|
101
|
-
//
|
|
102
|
-
|
|
153
|
+
// Hermes is the DEFAULT. The docs have always said "compiled to Hermes
|
|
154
|
+
// bytecode by default (--hermes)" while the flag was actually opt-in —
|
|
155
|
+
// so every publish that didn't know the flag shipped plain JS with a
|
|
156
|
+
// slower cold start and no HBC version for the runtime gate to check.
|
|
157
|
+
// Making the code match the docs is the right direction: bytecode is
|
|
158
|
+
// what production wants, and `--hermes-disabled` remains the opt-out.
|
|
159
|
+
const useHermes = opts.hermesDisabled ? false : true;
|
|
103
160
|
console.log(`📦 Building ${platform} bundle${useHermes ? ' (Hermes bytecode)' : ''}…`);
|
|
104
161
|
const result = (0, bundle_1.buildBundle)({
|
|
105
162
|
platform,
|
|
106
163
|
entryFile: opts.entryFile,
|
|
107
164
|
dev: false,
|
|
108
165
|
hermes: useHermes,
|
|
166
|
+
allowPlainJs: opts.allowPlainJs ?? false,
|
|
109
167
|
sourcemap: opts.sourcemap,
|
|
168
|
+
identityToken,
|
|
110
169
|
});
|
|
111
170
|
bundlePath = result.bundlePath;
|
|
171
|
+
hermesBytecodeVersion = result.hermesBytecodeVersion;
|
|
172
|
+
bundleCarriesMarker = true;
|
|
112
173
|
console.log(` ✅ Bundle built: ${bundlePath}`);
|
|
174
|
+
// ASSETS DO NOT SHIP OVER OTA.
|
|
175
|
+
//
|
|
176
|
+
// An update is one artifact: the JS/bytecode bundle. Images and fonts
|
|
177
|
+
// are resolved from what the INSTALLED BINARY already contains, so an
|
|
178
|
+
// asset added since the last store build is referenced by the new JS
|
|
179
|
+
// and is not on the device. The update installs cleanly, reports
|
|
180
|
+
// success, and renders a missing image — the worst kind of failure.
|
|
181
|
+
// Metro writes those files next to the bundle and the publish flow
|
|
182
|
+
// has always discarded them without a word. Now it says so.
|
|
183
|
+
if (result.assets.length) {
|
|
184
|
+
const shown = result.assets.slice(0, 5);
|
|
185
|
+
console.log(` ℹ️ This bundle references ${result.assets.length} asset(s). ` +
|
|
186
|
+
'OTA ships JS only — assets resolve from the installed binary.');
|
|
187
|
+
console.log(` ${shown.join(', ')}${result.assets.length > shown.length ? `, +${result.assets.length - shown.length} more` : ''}`);
|
|
188
|
+
console.log(' Any image or font ADDED since your last store build will be ' +
|
|
189
|
+
'missing on device. Changing which existing asset you use is fine; ' +
|
|
190
|
+
'a new one needs a native release (fonts always do).');
|
|
191
|
+
}
|
|
192
|
+
// You asked for bytecode and didn't get it: that is a failed build,
|
|
193
|
+
// not a warning. This degradation has shipped silently twice now —
|
|
194
|
+
// first via `npx hermesc` (not a real package), then via spawnSync's
|
|
195
|
+
// 1MB maxBuffer killing the compiler — and a plain-JS bundle both
|
|
196
|
+
// starts ~20-30% slower and carries no HBC version for the runtime
|
|
197
|
+
// gate to check. If plain JS is what you want, say so.
|
|
198
|
+
if (useHermes && !result.hermesCompiled) {
|
|
199
|
+
console.error('❌ --hermes was requested but the bundle is NOT Hermes bytecode (see the hermesc error above).\n' +
|
|
200
|
+
' To intentionally publish plain JS, use --hermes-disabled.');
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
console.log(` Runtime: RN ${rnVersion ?? 'unknown'}` +
|
|
205
|
+
(hermesBytecodeVersion !== null
|
|
206
|
+
? `, Hermes HBC v${hermesBytecodeVersion}`
|
|
207
|
+
: ', plain JS'));
|
|
208
|
+
if (!rnVersion) {
|
|
209
|
+
console.warn(' ⚠️ React Native version could not be detected — this bundle will not be ' +
|
|
210
|
+
'runtime-gated, and can reach binaries that cannot run it.');
|
|
211
|
+
}
|
|
212
|
+
// The sourcemap must be located BEFORE presign, because sourcemaps are
|
|
213
|
+
// uploaded through a presigned URL requested alongside the bundle's.
|
|
214
|
+
const sourcemapPath = opts.sourcemap && fs.existsSync(bundlePath + '.map')
|
|
215
|
+
? bundlePath + '.map'
|
|
216
|
+
: null;
|
|
217
|
+
if (opts.sourcemap && !sourcemapPath) {
|
|
218
|
+
console.warn(' ⚠️ --sourcemap was passed but no .map file was produced — continuing without one.');
|
|
113
219
|
}
|
|
114
220
|
// Step 2: Hash the bundle
|
|
115
221
|
console.log('🔒 Computing SHA-256…');
|
|
@@ -131,6 +237,23 @@ function registerOtaPublishCommand(ota) {
|
|
|
131
237
|
sha256,
|
|
132
238
|
sizeBytes,
|
|
133
239
|
releaseNote: opts.releaseNote,
|
|
240
|
+
rnVersion: rnVersion ?? undefined,
|
|
241
|
+
hermes: hermesBytecodeVersion !== null,
|
|
242
|
+
hermesBytecodeVersion: hermesBytecodeVersion ?? undefined,
|
|
243
|
+
identityToken: bundleCarriesMarker ? identityToken : undefined,
|
|
244
|
+
// Sourcemaps ride the presign flow: declaring them here returns a
|
|
245
|
+
// second presigned PUT URL. This CLI used to skip these fields and
|
|
246
|
+
// instead POST base64 JSON to /bundles/:id/sourcemap after promote
|
|
247
|
+
// — an endpoint that DOES NOT EXIST and never has. The error was
|
|
248
|
+
// caught and printed as a "non-fatal" warning, so every
|
|
249
|
+
// `--sourcemap` publish ever made silently uploaded nothing while
|
|
250
|
+
// the summary implied symbolication would work.
|
|
251
|
+
...(sourcemapPath
|
|
252
|
+
? {
|
|
253
|
+
sourcemapSha256: (0, hash_1.sha256File)(sourcemapPath),
|
|
254
|
+
sourcemapSizeBytes: fs.statSync(sourcemapPath).size,
|
|
255
|
+
}
|
|
256
|
+
: {}),
|
|
134
257
|
});
|
|
135
258
|
}
|
|
136
259
|
catch (err) {
|
|
@@ -154,51 +277,120 @@ function registerOtaPublishCommand(ota) {
|
|
|
154
277
|
console.log('🔍 Finalizing (server-side hash verification)…');
|
|
155
278
|
let finalized;
|
|
156
279
|
try {
|
|
157
|
-
|
|
280
|
+
// OTA-03: sign the bundle hash with the locally-held private key, if
|
|
281
|
+
// this project has adopted signing. The key never leaves this machine —
|
|
282
|
+
// only the detached signature is uploaded, so ScaleBun can serve a
|
|
283
|
+
// signature it could not itself have produced. Unsigned publishes stay
|
|
284
|
+
// valid; the device only enforces once an app embeds a public key.
|
|
285
|
+
const signature = (0, ota_keys_1.signBundleHash)(sha256, opts.keyDir);
|
|
286
|
+
if (signature) {
|
|
287
|
+
console.log(' 🔏 Signed with local ed25519 key');
|
|
288
|
+
}
|
|
289
|
+
finalized = await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/finalize`, signature ? { signature } : undefined);
|
|
158
290
|
}
|
|
159
291
|
catch (err) {
|
|
160
292
|
console.error(`❌ Finalize failed: ${err.message}`);
|
|
161
293
|
process.exit(1);
|
|
162
294
|
}
|
|
163
295
|
// Step 6: Promote release to ACTIVE status with installMode
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/promote`, {
|
|
168
|
-
targetAppVersion: opts.targetVersion || '>=1.0.0',
|
|
169
|
-
rolloutPercent,
|
|
170
|
-
isMandatory: installMode === 'IMMEDIATE',
|
|
171
|
-
installMode,
|
|
172
|
-
releaseNote: opts.releaseNote,
|
|
173
|
-
});
|
|
296
|
+
if (opts.skipPromote) {
|
|
297
|
+
console.log('⏭️ Skipping promotion (--skip-promote) — bundle is uploaded but NOT live.');
|
|
298
|
+
console.log(` Promote later from the dashboard, or re-run without --skip-promote.`);
|
|
174
299
|
}
|
|
175
|
-
|
|
176
|
-
console.
|
|
300
|
+
else {
|
|
301
|
+
console.log('🚀 Promoting release to active target channel…');
|
|
302
|
+
try {
|
|
303
|
+
await client.post(`/saas/apps/${opts.appId}/ota/bundles/${presigned.bundleId}/promote`, {
|
|
304
|
+
targetAppVersion: opts.targetVersion || '>=1.0.0',
|
|
305
|
+
rolloutPercent,
|
|
306
|
+
isMandatory: installMode === 'IMMEDIATE',
|
|
307
|
+
installMode,
|
|
308
|
+
releaseNote: opts.releaseNote,
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
catch (err) {
|
|
312
|
+
// This used to warn and exit 0 — so a CI pipeline printed
|
|
313
|
+
// "published successfully" while no device would ever receive the
|
|
314
|
+
// update (promotion is what makes a bundle live). A pipeline must
|
|
315
|
+
// fail when its purpose failed.
|
|
316
|
+
console.error(`❌ Promotion failed: ${err.message}`);
|
|
317
|
+
console.error(` The bundle IS uploaded (v pending, id ${presigned.bundleId}) but is NOT live.\n` +
|
|
318
|
+
' Fix the error and promote from the dashboard, or publish again.\n' +
|
|
319
|
+
' To upload without promoting on purpose, use --skip-promote.');
|
|
320
|
+
process.exit(1);
|
|
321
|
+
}
|
|
177
322
|
}
|
|
178
|
-
// Step 7: Upload sourcemap
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
323
|
+
// Step 7: Upload the sourcemap through its presigned URL.
|
|
324
|
+
// (The old code POSTed base64 JSON to /bundles/:id/sourcemap — a route
|
|
325
|
+
// that has never existed — and downgraded the 404 to a "non-fatal"
|
|
326
|
+
// warning, so symbolication silently never worked for OTA bundles.)
|
|
327
|
+
if (sourcemapPath && presigned.sourcemapUploadUrl) {
|
|
328
|
+
console.log('🗺️ Uploading sourcemap for crash symbolication…');
|
|
329
|
+
try {
|
|
330
|
+
await client.putBytes(presigned.sourcemapUploadUrl, fs.readFileSync(sourcemapPath), 'application/json');
|
|
331
|
+
console.log(' ✅ Sourcemap uploaded');
|
|
332
|
+
sourcemapStored = true;
|
|
333
|
+
// Cleanup happens AFTER symbolication registration below — the
|
|
334
|
+
// symbols upload reads this same file.
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
console.warn(` ⚠️ Sourcemap upload failed: ${err.message}\n` +
|
|
338
|
+
' Stack traces from this bundle will not symbolicate. Re-publish to retry.');
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
else if (sourcemapPath && !presigned.sourcemapUploadUrl) {
|
|
342
|
+
console.warn(' ⚠️ Backend did not return a sourcemap upload URL — is it up to date?');
|
|
343
|
+
}
|
|
344
|
+
// D6: register the map with SYMBOLICATION, not just storage. The
|
|
345
|
+
// presigned PUT above lands the map in the OTA bundle bucket —
|
|
346
|
+
// `OtaBundle.sourcemapKey` — which NOTHING reads: the symbolication
|
|
347
|
+
// worker only consumes `symbolUpload` rows, written by
|
|
348
|
+
// POST /apps/:appId/symbols. Without this second upload, every
|
|
349
|
+
// `--sourcemap` publish paid to store a map no crash could ever use.
|
|
350
|
+
// That endpoint authenticates with the app's SDK SECRET key (a server
|
|
351
|
+
// credential, deliberately not the client key baked into the binary),
|
|
352
|
+
// so this step is opt-in via SCALEBUN_SDK_SECRET.
|
|
353
|
+
if (sourcemapPath && fs.existsSync(sourcemapPath)) {
|
|
354
|
+
const sdkSecret = process.env.SCALEBUN_SDK_SECRET;
|
|
355
|
+
if (!sdkSecret) {
|
|
356
|
+
console.warn(' ⚠️ SCALEBUN_SDK_SECRET not set — the sourcemap was stored but NOT ' +
|
|
357
|
+
'registered for crash symbolication. Set the app\'s SDK secret key ' +
|
|
358
|
+
'in that env var to enable symbolicated stack traces.');
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
console.log('🔣 Registering sourcemap for crash symbolication…');
|
|
183
362
|
try {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
363
|
+
const boundary = `----scalebun${Date.now().toString(16)}`;
|
|
364
|
+
const mapBytes = fs.readFileSync(sourcemapPath);
|
|
365
|
+
const field = (name, value) => `--${boundary}\r\nContent-Disposition: form-data; name="${name}"\r\n\r\n${value}\r\n`;
|
|
366
|
+
const head = Buffer.from(field('platform', 'js') +
|
|
367
|
+
(rnVersion ? field('version', opts.targetVersion ?? '') : '') +
|
|
368
|
+
field('buildUuid', sha256) +
|
|
369
|
+
`--${boundary}\r\nContent-Disposition: form-data; name="file"; filename="bundle.jsbundle.map"\r\nContent-Type: application/json\r\n\r\n`, 'utf-8');
|
|
370
|
+
const tail = Buffer.from(`\r\n--${boundary}--\r\n`, 'utf-8');
|
|
371
|
+
await client.postMultipart(`/apps/${opts.appId}/symbols`, Buffer.concat([head, mapBytes, tail]), `multipart/form-data; boundary=${boundary}`, { 'x-scalebun-secret-key': sdkSecret });
|
|
372
|
+
console.log(' ✅ Sourcemap registered — crashes from this bundle will symbolicate');
|
|
373
|
+
sourcemapRegistered = true;
|
|
190
374
|
}
|
|
191
375
|
catch (err) {
|
|
192
|
-
console.warn(` ⚠️
|
|
376
|
+
console.warn(` ⚠️ Symbolication registration failed: ${err.message}`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
if (!opts.keepArtifacts) {
|
|
380
|
+
try {
|
|
381
|
+
fs.unlinkSync(sourcemapPath);
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
/* non-fatal */
|
|
193
385
|
}
|
|
194
386
|
}
|
|
195
387
|
}
|
|
196
388
|
// Step 8: Print detailed success summary
|
|
197
389
|
const installModeLabel = installMode === 'IMMEDIATE'
|
|
198
|
-
? '⚡ IMMEDIATE (
|
|
390
|
+
? '⚡ IMMEDIATE (SDK restarts the app right after install)'
|
|
199
391
|
: installMode === 'ON_NEXT_RESUME'
|
|
200
|
-
? '🔄 ON_NEXT_RESUME (
|
|
201
|
-
: '🌙 ON_NEXT_RESTART (
|
|
392
|
+
? '🔄 ON_NEXT_RESUME (SDK restarts on next return to foreground)'
|
|
393
|
+
: '🌙 ON_NEXT_RESTART (activates silently on next launch)';
|
|
202
394
|
console.log('');
|
|
203
395
|
console.log(`✅ Bundle v${finalized.version} published successfully!`);
|
|
204
396
|
console.log(` Channel: ${finalized.channelName} (${finalized.environmentName})`);
|
|
@@ -207,7 +399,32 @@ function registerOtaPublishCommand(ota) {
|
|
|
207
399
|
console.log(` SHA-256: ${finalized.sha256}`);
|
|
208
400
|
console.log(` Size: ${(finalized.sizeBytes / 1024).toFixed(1)} KB`);
|
|
209
401
|
if (opts.sourcemap) {
|
|
210
|
-
|
|
402
|
+
// Report what actually happened. This line used to print success
|
|
403
|
+
// whenever --sourcemap was passed — even when no map was produced,
|
|
404
|
+
// the upload failed, or SCALEBUN_SDK_SECRET was unset so nothing was
|
|
405
|
+
// registered for symbolication. CI logs then certified symbolication
|
|
406
|
+
// that would not happen, and the first production crash arrived
|
|
407
|
+
// minified.
|
|
408
|
+
const smState = sourcemapRegistered
|
|
409
|
+
? 'Uploaded and registered ✓ (stack traces will symbolicate)'
|
|
410
|
+
: sourcemapStored
|
|
411
|
+
? 'Uploaded, NOT registered — set SCALEBUN_SDK_SECRET to symbolicate'
|
|
412
|
+
: 'NOT uploaded — stack traces from this bundle stay minified';
|
|
413
|
+
console.log(` Sourcemap: ${smState}`);
|
|
414
|
+
}
|
|
415
|
+
const rolloutNow = opts.skipPromote ? 0 : rolloutPercent;
|
|
416
|
+
console.log('');
|
|
417
|
+
console.log('Manage this release:');
|
|
418
|
+
console.log(` scalebun ota releases --app-id ${opts.appId} # see live state`);
|
|
419
|
+
if (!opts.skipPromote && rolloutNow < 100) {
|
|
420
|
+
console.log(` scalebun ota rollout --app-id ${opts.appId} --percent 100 # widen the rollout`);
|
|
421
|
+
}
|
|
422
|
+
console.log(` scalebun ota pause --app-id ${opts.appId} # stop new deliveries`);
|
|
423
|
+
console.log(` scalebun ota rollback --app-id ${opts.appId} # revert every device`);
|
|
424
|
+
if (!opts.skipPromote && rolloutNow === 100) {
|
|
425
|
+
console.log('');
|
|
426
|
+
console.log(' Tip: production releases usually start staged — `--rollout 10`, watch the');
|
|
427
|
+
console.log(' health page, then `ota rollout --percent 100` once it looks clean.');
|
|
211
428
|
}
|
|
212
429
|
// Clean up bundle unless --keep-artifacts or using pre-built
|
|
213
430
|
if (!opts.keepArtifacts && !opts.skipBundle) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ota-publish.js","sourceRoot":"","sources":["../../src/commands/ota-publish.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,8DAwNC;AA7PD,uCAAyB;AAEzB,sDAAuD;AACvD,0CAA0C;AAC1C,4CAA8C;AAC9C,wCAA2C;AAoB3C;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB,CAAC,GAAY;IACpD,GAAG;SACA,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,0DAA0D,CAAC;SACvE,cAAc,CAAC,eAAe,EAAE,yBAAyB,CAAC;SAC1D,MAAM,CAAC,sBAAsB,EAAE,iEAAiE,EAAE,SAAS,CAAC;SAC5G,MAAM,CAAC,mBAAmB,EAAE,+BAA+B,CAAC;SAC5D,MAAM,CAAC,uBAAuB,EAAE,gCAAgC,EAAE,SAAS,CAAC;SAC5E,MAAM,CACL,uBAAuB,EACvB,6LAA6L,EAC7L,iBAAiB,CAClB;SACA,MAAM,CAAC,2BAA2B,EAAE,0DAA0D,EAAE,SAAS,CAAC;SAC1G,MAAM,CAAC,qBAAqB,EAAE,mCAAmC,EAAE,KAAK,CAAC;SACzE,MAAM,CAAC,qBAAqB,EAAE,eAAe,EAAE,UAAU,CAAC;SAC1D,MAAM,CAAC,uBAAuB,EAAE,yDAAyD,CAAC;SAC1F,MAAM,CAAC,UAAU,EAAE,yDAAyD,CAAC;SAC7E,MAAM,CAAC,mBAAmB,EAAE,gDAAgD,CAAC;SAC7E,MAAM,CAAC,eAAe,EAAE,0DAA0D,CAAC;SACnF,MAAM,CAAC,sBAAsB,EAAE,iCAAiC,CAAC;SACjE,MAAM,CAAC,6BAA6B,EAAE,2CAA2C,CAAC;SAClF,MAAM,CAAC,aAAa,EAAE,uDAAuD,CAAC;SAC9E,MAAM,CAAC,kBAAkB,EAAE,wDAAwD,CAAC;SACpF,MAAM,CACL,KAAK,EAAE,IAiBN,EAAE,EAAE;QACH,MAAM,KAAK,GAAG,IAAA,6BAAe,GAAE,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7E,MAAM,UAAU,GAAkB,CAAC,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAA6B,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,6BAA6B,IAAI,CAAC,WAAW,8DAA8D,CAAC,CAAC;YAC3H,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,MAAM,WAAW,GAAG,cAA6B,CAAC;QAElD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAA6B,CAAC;QAEpD,8CAA8C;QAC9C,IAAI,UAAkB,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAClE,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAiB,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC;QAC1D,CAAC;aAAM,CAAC;YACN,qDAAqD;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,QAAQ,UAAU,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC;gBACzB,QAAQ;gBACR,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YACH,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACrC,MAAM,MAAM,GAAG,IAAA,iBAAU,EAAC,UAAU,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAElE,IAAI,SAAS,GAAG,QAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,IAAI,SAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,cAAc,IAAI,CAAC,KAAK,sBAAsB,EAC9C;gBACE,SAAS,EAAE,aAAa;gBACxB,QAAQ;gBACR,MAAM;gBACN,SAAS;gBACT,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,2BAA2B,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC;QAE/D,0BAA0B;QAC1B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,QAAQ,CACnB,SAAS,CAAC,SAAS,EACnB,UAAU,EACV,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAEnC,2EAA2E;QAC3E,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,IAAI,SAA2B,CAAC;QAChC,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAC3B,cAAc,IAAI,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,WAAW,CACtE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,sBAAsB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,4DAA4D;QAC5D,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;QAC9D,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;YACzD,MAAM,MAAM,CAAC,IAAI,CACf,cAAc,IAAI,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,UAAU,EACpE;gBACE,gBAAgB,EAAE,IAAI,CAAC,aAAa,IAAI,SAAS;gBACjD,cAAc;gBACd,WAAW,EAAE,WAAW,KAAK,WAAW;gBACxC,WAAW;gBACX,WAAW,EAAE,IAAI,CAAC,WAAW;aAC9B,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;YAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;gBACjE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC/C,MAAM,MAAM,CAAC,IAAI,CACf,cAAc,IAAI,CAAC,KAAK,gBAAgB,SAAS,CAAC,QAAQ,YAAY,EACtE,EAAE,SAAS,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAC9D,CAAC;oBACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBAEtC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACxB,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;oBAC/B,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,CAAC,8CAA8C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,MAAM,gBAAgB,GACpB,WAAW,KAAK,WAAW;YACzB,CAAC,CAAC,iDAAiD;YACnD,CAAC,CAAC,WAAW,KAAK,gBAAgB;gBAClC,CAAC,CAAC,8CAA8C;gBAChD,CAAC,CAAC,sDAAsD,CAAC;QAE7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,SAAS,CAAC,OAAO,0BAA0B,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,eAAe,GAAG,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,oBAAoB,gBAAgB,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC;QAClF,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,IAAI,CAAC;gBACH,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"ota-publish.js","sourceRoot":"","sources":["../../src/commands/ota-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ota-rollout.d.ts","sourceRoot":"","sources":["../../src/commands/ota-rollout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0FpC,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAqK7D"}
|