@otalan/cli 1.2.2 → 1.3.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/CHANGELOG.md +14 -4
- package/README.md +21 -23
- package/dist/bin.js +35 -35
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@otalan/cli` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.3.0 - 2026-05-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Validate Capacitor and Expo bundle contents before writing output, rejecting native project/source files in OTA bundle data.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Use `runtimeVersion` as the only bundle manifest, CLI option, and release API field for both Capacitor and Expo.
|
|
14
|
+
|
|
5
15
|
## 1.2.2 - 2026-05-13
|
|
6
16
|
|
|
7
17
|
### Changed
|
|
@@ -25,7 +35,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
25
35
|
- Switch `otalan publish` to the direct-upload release contract: create JSON upload metadata, upload the ZIP to the returned opaque `uploadUrl`, complete the ingest, then poll validation.
|
|
26
36
|
- Stream the local ZIP through Bun's disk-backed file body during direct uploads instead of loading the full archive into memory.
|
|
27
37
|
- Send the full generated Otalan Expo satellite manifest as `expoManifest` during publish instead of only raw Expo config.
|
|
28
|
-
- Use the Expo `runtimeVersion` as the release
|
|
38
|
+
- Use the Expo `runtimeVersion` as the release version sent to the API, matching the current Expo update matching contract.
|
|
29
39
|
- Use the release bundle `publishedAt` timestamp for bundle lists, status summaries, rollback prompts, and published bundle ID hints.
|
|
30
40
|
|
|
31
41
|
## 1.1.1 - 2026-05-07
|
|
@@ -45,7 +55,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
45
55
|
|
|
46
56
|
- Let `otalan login` reuse the saved API URL and keep the saved CI key from a masked prompt.
|
|
47
57
|
- Export Expo bundles into a project-local `.otalan/expo-export-*` folder so Expo accepts the output path.
|
|
48
|
-
- Fall back to the resolved
|
|
58
|
+
- Fall back to the resolved app version when Expo runtimeVersion is not configured or present in export metadata.
|
|
49
59
|
- Clarify Capacitor and Expo bundling behavior in CLI help and README.
|
|
50
60
|
|
|
51
61
|
## 1.0.9 - 2026-05-06
|
|
@@ -88,7 +98,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
88
98
|
|
|
89
99
|
### Added
|
|
90
100
|
|
|
91
|
-
- Prompt interactively for bundle
|
|
101
|
+
- Prompt interactively for bundle runtime version and bundle ID, with hints for the detected runtime version, local bundle ID, and active published bundle ID when available.
|
|
92
102
|
|
|
93
103
|
### Changed
|
|
94
104
|
|
|
@@ -124,5 +134,5 @@ Initial public release of the Otalan CLI.
|
|
|
124
134
|
- Release publishing with rollout metadata and server-side validation polling.
|
|
125
135
|
- Bundle listing, active bundle status, and rollback commands.
|
|
126
136
|
- CI key login, project initialization, and API connectivity doctor checks.
|
|
127
|
-
-
|
|
137
|
+
- Runtime version resolution helpers.
|
|
128
138
|
- Public npm package metadata, license notices, and Bun-based CLI entrypoint.
|
package/README.md
CHANGED
|
@@ -222,7 +222,7 @@ Example project config:
|
|
|
222
222
|
}
|
|
223
223
|
```
|
|
224
224
|
|
|
225
|
-
`otalan.config.json` only links the repo to an Otalan project/app. Bundle and release targeting data such as `target`, `platform`, `
|
|
225
|
+
`otalan.config.json` only links the repo to an Otalan project/app. Bundle and release targeting data such as `target`, `platform`, `runtimeVersion`, and `bundleId` live in `.otalan/bundle/manifest.json`.
|
|
226
226
|
|
|
227
227
|
## Command Reference
|
|
228
228
|
|
|
@@ -338,17 +338,16 @@ Current behavior:
|
|
|
338
338
|
- Expo stores the generated Otalan satellite manifest in `.otalan/bundle/manifest.json`, including `launchAsset`, `assets`, `runtimeVersion`, `bundleId`, and `expoConfig`
|
|
339
339
|
- both outputs produce a ZIP plus `manifest.json`
|
|
340
340
|
- source map files (`*.map`) are omitted from bundle ZIPs by default; the CLI prints the omitted file count when any are skipped
|
|
341
|
-
-
|
|
341
|
+
- native project/source files are rejected before bundle output is written; OTA bundles must only contain generated web/update assets
|
|
342
|
+
- `--platform` is required so the CLI exports the selected platform and resolves the correct runtime version
|
|
342
343
|
|
|
343
|
-
|
|
344
|
+
Runtime version defaults:
|
|
344
345
|
|
|
345
|
-
- In an interactive terminal, `otalan bundle` prompts for the
|
|
346
|
-
- Capacitor iOS
|
|
347
|
-
- Capacitor Android
|
|
348
|
-
- Expo reads
|
|
349
|
-
-
|
|
350
|
-
- Expo publishes use `runtimeVersion` as the Otalan release `nativeVersion` because Expo update checks send `expo-runtime-version`
|
|
351
|
-
- `--native-version` overrides auto-detection
|
|
346
|
+
- In an interactive terminal, `otalan bundle` prompts for the runtime version after showing the detected active runtime version.
|
|
347
|
+
- Capacitor iOS defaults runtimeVersion from `CFBundleShortVersionString` in `Info.plist` and resolves `$(MARKETING_VERSION)` from the Xcode project when needed
|
|
348
|
+
- Capacitor Android defaults runtimeVersion from `versionName` in `android/app/build.gradle` or `build.gradle.kts`
|
|
349
|
+
- Expo runtimeVersion reads `--runtime-version`, Expo export metadata, or Expo config runtimeVersion policies/strings; if none are present, the CLI falls back to the selected platform Expo `version`
|
|
350
|
+
- `--runtime-version` overrides auto-detection
|
|
352
351
|
|
|
353
352
|
For Expo projects, the recommended app config is:
|
|
354
353
|
|
|
@@ -385,10 +384,10 @@ otalan bundle --target expo --platform ios --bundle-id 1.0.5
|
|
|
385
384
|
If you omit `bundleId`:
|
|
386
385
|
|
|
387
386
|
- in an interactive terminal, the CLI prompts for a bundle ID and shows the local bundle ID from `.otalan/bundle/manifest.json` when available
|
|
388
|
-
- when `otalan login` and `otalan init` are configured, the prompt also shows the active published bundle ID for the selected platform/
|
|
387
|
+
- when `otalan login` and `otalan init` are configured, the prompt also shows the active published bundle ID for the selected platform/runtime version/channel
|
|
389
388
|
- published bundle hints use `--channel`, defaulting to `production`
|
|
390
389
|
- pressing Enter without a bundle ID keeps the automatic bundle ID behavior
|
|
391
|
-
- the CLI reads `
|
|
390
|
+
- the CLI reads `runtimeVersion` from the selected platform and adds a short hash suffix
|
|
392
391
|
- example: `1.0.0-abc123def456`
|
|
393
392
|
|
|
394
393
|
If you want to take the bundle ID from `package.json` instead:
|
|
@@ -402,20 +401,20 @@ otalan bundle --target expo --platform ios --bundle-from-package
|
|
|
402
401
|
|
|
403
402
|
Publishes the current bundle output with rollout metadata.
|
|
404
403
|
|
|
405
|
-
`otalan publish` uses the `bundleId`, `platform`, and
|
|
404
|
+
`otalan publish` uses the `bundleId`, `platform`, and `runtimeVersion` stored in `.otalan/bundle/manifest.json`. To release `1.0.5`, set it when you run `otalan bundle --bundle-id 1.0.5`.
|
|
406
405
|
|
|
407
406
|
Current behavior:
|
|
408
407
|
|
|
409
408
|
- `channel` is chosen at publish time
|
|
410
409
|
- publishes are mandatory by default
|
|
411
410
|
- default rollout is `100`
|
|
412
|
-
- `--platform` and `--
|
|
411
|
+
- `--platform` and `--runtime-version` can override the manifest, but only if they match it
|
|
413
412
|
- `--output-dir` lets you publish a bundle from a non-default folder
|
|
414
413
|
- `--rollout-percent` accepts an integer from `0` to `100`
|
|
415
414
|
- `--optional` marks the update as non-mandatory
|
|
416
415
|
- `--release-notes` attaches release notes to the published bundle
|
|
417
416
|
- Expo publish forwards the full generated Otalan satellite manifest when present
|
|
418
|
-
- Expo publish sends
|
|
417
|
+
- Expo publish sends the generated manifest with `runtimeVersion`
|
|
419
418
|
- Otalan validates the release ZIP before the publish completes
|
|
420
419
|
- active rollouts can be paused and resumed later without changing the selected bundle
|
|
421
420
|
|
|
@@ -458,9 +457,9 @@ Remote bundle tables display the API `publishedAt` timestamp, not the bundle row
|
|
|
458
457
|
|
|
459
458
|
Default resolution order:
|
|
460
459
|
|
|
461
|
-
1. `--
|
|
460
|
+
1. `--runtime-version`
|
|
462
461
|
2. `.otalan/bundle/manifest.json` if present and the manifest platform matches the selected platform
|
|
463
|
-
3.
|
|
462
|
+
3. runtime version derived from the selected platform in the local app project
|
|
464
463
|
4. interactive prompt
|
|
465
464
|
|
|
466
465
|
```bash
|
|
@@ -471,7 +470,7 @@ otalan bundles --platform ios --channel production
|
|
|
471
470
|
|
|
472
471
|
Reactivates an older bundle for the same tuple.
|
|
473
472
|
|
|
474
|
-
`rollback` uses the same
|
|
473
|
+
`rollback` uses the same runtime-version default order as `bundles`. Pass `--runtime-version` if you want to override the detected default.
|
|
475
474
|
|
|
476
475
|
```bash
|
|
477
476
|
otalan rollback --bundle-id 1.0.0-web.1 --platform ios --channel production
|
|
@@ -481,7 +480,7 @@ otalan rollback --bundle-id 1.0.0-web.1 --platform ios --channel production
|
|
|
481
480
|
|
|
482
481
|
Pauses delivery of the currently active bundle for the selected release tuple.
|
|
483
482
|
|
|
484
|
-
`pause` uses the same
|
|
483
|
+
`pause` uses the same runtime-version default order as `bundles`. The active bundle remains selected, but new OTA checks stop receiving it until you resume the rollout.
|
|
485
484
|
|
|
486
485
|
```bash
|
|
487
486
|
otalan pause --platform ios --channel production
|
|
@@ -491,7 +490,7 @@ otalan pause --platform ios --channel production
|
|
|
491
490
|
|
|
492
491
|
Resumes delivery of the currently active bundle for the selected release tuple.
|
|
493
492
|
|
|
494
|
-
`resume` uses the same
|
|
493
|
+
`resume` uses the same runtime-version default order as `bundles`.
|
|
495
494
|
|
|
496
495
|
```bash
|
|
497
496
|
otalan resume --platform ios --channel production
|
|
@@ -503,7 +502,7 @@ Shows the active bundle for the selected release tuple.
|
|
|
503
502
|
|
|
504
503
|
The active bundle summary displays `publishedAt` as `Published at`.
|
|
505
504
|
|
|
506
|
-
`status` also uses the same
|
|
505
|
+
`status` also uses the same runtime-version default order as `bundles`.
|
|
507
506
|
|
|
508
507
|
```bash
|
|
509
508
|
otalan status --platform ios --channel production
|
|
@@ -517,7 +516,7 @@ otalan status --platform ios --channel production
|
|
|
517
516
|
{
|
|
518
517
|
"target": "capacitor",
|
|
519
518
|
"hash": "sha256...",
|
|
520
|
-
"
|
|
519
|
+
"runtimeVersion": "1.0.0",
|
|
521
520
|
"bundleId": "1.0.0-abcdef123456",
|
|
522
521
|
"createdAt": "2026-04-07T12:00:00.000Z",
|
|
523
522
|
"platform": "ios"
|
|
@@ -530,7 +529,6 @@ otalan status --platform ios --channel production
|
|
|
530
529
|
{
|
|
531
530
|
"target": "expo",
|
|
532
531
|
"hash": "sha256...",
|
|
533
|
-
"nativeVersion": "1.0.0",
|
|
534
532
|
"runtimeVersion": "1.0.0",
|
|
535
533
|
"bundleId": "1.0.0-abcdef123456",
|
|
536
534
|
"launchAsset": "bundles/ios-xxxxx.js",
|