@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 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 `nativeVersion` sent to the API, matching the current Expo update matching contract.
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 native version when Expo runtimeVersion is not configured or present in export metadata.
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 native version and bundle ID, with hints for the detected native version, local bundle ID, and active published bundle ID when available.
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
- - Native version and Expo runtime version resolution helpers.
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`, `nativeVersion`, `runtimeVersion`, and `bundleId` live in `.otalan/bundle/manifest.json`.
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
- - `--platform` is required so the CLI exports the selected platform and resolves the correct native/runtime version
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
- Native version defaults:
344
+ Runtime version defaults:
344
345
 
345
- - In an interactive terminal, `otalan bundle` prompts for the native version after showing the detected active native version.
346
- - Capacitor iOS reads `CFBundleShortVersionString` from `Info.plist` and resolves `$(MARKETING_VERSION)` from the Xcode project when needed
347
- - Capacitor Android reads `versionName` from `android/app/build.gradle` or `build.gradle.kts`
348
- - Expo reads the selected platform version from Expo config and falls back to the top-level Expo `version`
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 resolved native version
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/native version/channel
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 `nativeVersion` from the selected native platform and adds a short hash suffix
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 release version stored in `.otalan/bundle/manifest.json`. Capacitor uses `nativeVersion`; Expo uses `runtimeVersion`. To release `1.0.5`, set it when you run `otalan bundle --bundle-id 1.0.5`.
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 `--native-version` can override the manifest, but only if they match it
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 `runtimeVersion` as the API `nativeVersion` and normalizes the serialized `expoManifest.nativeVersion` to the same value for server validation
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. `--native-version`
460
+ 1. `--runtime-version`
462
461
  2. `.otalan/bundle/manifest.json` if present and the manifest platform matches the selected platform
463
- 3. native version derived from the selected platform in the local app project
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 native-version default order as `bundles`. Pass `--native-version` if you want to override the detected default.
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 native-version default order as `bundles`. The active bundle remains selected, but new OTA checks stop receiving it until you resume the rollout.
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 native-version default order as `bundles`.
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 native-version default order as `bundles`.
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
- "nativeVersion": "1.0.0",
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",