@otalan/cli 1.2.2 → 1.3.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/CHANGELOG.md +20 -4
- package/README.md +23 -23
- package/dist/bin.js +35 -35
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@otalan/cli` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 1.3.1 - 2026-05-18
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Check for an already published bundle ID during `otalan bundle` when auth and project config are available.
|
|
10
|
+
|
|
11
|
+
## 1.3.0 - 2026-05-18
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- Validate Capacitor and Expo bundle contents before writing output, rejecting native project/source files in OTA bundle data.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Use `runtimeVersion` as the only bundle manifest, CLI option, and release API field for both Capacitor and Expo.
|
|
20
|
+
|
|
5
21
|
## 1.2.2 - 2026-05-13
|
|
6
22
|
|
|
7
23
|
### Changed
|
|
@@ -25,7 +41,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
25
41
|
- 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
42
|
- Stream the local ZIP through Bun's disk-backed file body during direct uploads instead of loading the full archive into memory.
|
|
27
43
|
- 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
|
|
44
|
+
- Use the Expo `runtimeVersion` as the release version sent to the API, matching the current Expo update matching contract.
|
|
29
45
|
- Use the release bundle `publishedAt` timestamp for bundle lists, status summaries, rollback prompts, and published bundle ID hints.
|
|
30
46
|
|
|
31
47
|
## 1.1.1 - 2026-05-07
|
|
@@ -45,7 +61,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
45
61
|
|
|
46
62
|
- Let `otalan login` reuse the saved API URL and keep the saved CI key from a masked prompt.
|
|
47
63
|
- Export Expo bundles into a project-local `.otalan/expo-export-*` folder so Expo accepts the output path.
|
|
48
|
-
- Fall back to the resolved
|
|
64
|
+
- Fall back to the resolved app version when Expo runtimeVersion is not configured or present in export metadata.
|
|
49
65
|
- Clarify Capacitor and Expo bundling behavior in CLI help and README.
|
|
50
66
|
|
|
51
67
|
## 1.0.9 - 2026-05-06
|
|
@@ -88,7 +104,7 @@ All notable changes to `@otalan/cli` will be documented in this file.
|
|
|
88
104
|
|
|
89
105
|
### Added
|
|
90
106
|
|
|
91
|
-
- Prompt interactively for bundle
|
|
107
|
+
- 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
108
|
|
|
93
109
|
### Changed
|
|
94
110
|
|
|
@@ -124,5 +140,5 @@ Initial public release of the Otalan CLI.
|
|
|
124
140
|
- Release publishing with rollout metadata and server-side validation polling.
|
|
125
141
|
- Bundle listing, active bundle status, and rollback commands.
|
|
126
142
|
- CI key login, project initialization, and API connectivity doctor checks.
|
|
127
|
-
-
|
|
143
|
+
- Runtime version resolution helpers.
|
|
128
144
|
- 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,17 @@ 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
|
+
- when `otalan login` and `otalan init` are configured, the CLI checks that the selected `bundleId` is not already published for the selected platform, runtimeVersion, and channel before writing bundle output
|
|
343
|
+
- `--platform` is required so the CLI exports the selected platform and resolves the correct runtime version
|
|
342
344
|
|
|
343
|
-
|
|
345
|
+
Runtime version defaults:
|
|
344
346
|
|
|
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
|
|
347
|
+
- In an interactive terminal, `otalan bundle` prompts for the runtime version after showing the detected active runtime version.
|
|
348
|
+
- Capacitor iOS defaults runtimeVersion from `CFBundleShortVersionString` in `Info.plist` and resolves `$(MARKETING_VERSION)` from the Xcode project when needed
|
|
349
|
+
- Capacitor Android defaults runtimeVersion from `versionName` in `android/app/build.gradle` or `build.gradle.kts`
|
|
350
|
+
- 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`
|
|
351
|
+
- `--runtime-version` overrides auto-detection
|
|
352
352
|
|
|
353
353
|
For Expo projects, the recommended app config is:
|
|
354
354
|
|
|
@@ -385,10 +385,11 @@ otalan bundle --target expo --platform ios --bundle-id 1.0.5
|
|
|
385
385
|
If you omit `bundleId`:
|
|
386
386
|
|
|
387
387
|
- 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/
|
|
388
|
+
- 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
389
|
- published bundle hints use `--channel`, defaulting to `production`
|
|
390
|
+
- duplicate published bundle ID checks use the same `--channel` value and default to `production`
|
|
390
391
|
- pressing Enter without a bundle ID keeps the automatic bundle ID behavior
|
|
391
|
-
- the CLI reads `
|
|
392
|
+
- the CLI reads `runtimeVersion` from the selected platform and adds a short hash suffix
|
|
392
393
|
- example: `1.0.0-abc123def456`
|
|
393
394
|
|
|
394
395
|
If you want to take the bundle ID from `package.json` instead:
|
|
@@ -402,20 +403,20 @@ otalan bundle --target expo --platform ios --bundle-from-package
|
|
|
402
403
|
|
|
403
404
|
Publishes the current bundle output with rollout metadata.
|
|
404
405
|
|
|
405
|
-
`otalan publish` uses the `bundleId`, `platform`, and
|
|
406
|
+
`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
407
|
|
|
407
408
|
Current behavior:
|
|
408
409
|
|
|
409
410
|
- `channel` is chosen at publish time
|
|
410
411
|
- publishes are mandatory by default
|
|
411
412
|
- default rollout is `100`
|
|
412
|
-
- `--platform` and `--
|
|
413
|
+
- `--platform` and `--runtime-version` can override the manifest, but only if they match it
|
|
413
414
|
- `--output-dir` lets you publish a bundle from a non-default folder
|
|
414
415
|
- `--rollout-percent` accepts an integer from `0` to `100`
|
|
415
416
|
- `--optional` marks the update as non-mandatory
|
|
416
417
|
- `--release-notes` attaches release notes to the published bundle
|
|
417
418
|
- Expo publish forwards the full generated Otalan satellite manifest when present
|
|
418
|
-
- Expo publish sends
|
|
419
|
+
- Expo publish sends the generated manifest with `runtimeVersion`
|
|
419
420
|
- Otalan validates the release ZIP before the publish completes
|
|
420
421
|
- active rollouts can be paused and resumed later without changing the selected bundle
|
|
421
422
|
|
|
@@ -458,9 +459,9 @@ Remote bundle tables display the API `publishedAt` timestamp, not the bundle row
|
|
|
458
459
|
|
|
459
460
|
Default resolution order:
|
|
460
461
|
|
|
461
|
-
1. `--
|
|
462
|
+
1. `--runtime-version`
|
|
462
463
|
2. `.otalan/bundle/manifest.json` if present and the manifest platform matches the selected platform
|
|
463
|
-
3.
|
|
464
|
+
3. runtime version derived from the selected platform in the local app project
|
|
464
465
|
4. interactive prompt
|
|
465
466
|
|
|
466
467
|
```bash
|
|
@@ -471,7 +472,7 @@ otalan bundles --platform ios --channel production
|
|
|
471
472
|
|
|
472
473
|
Reactivates an older bundle for the same tuple.
|
|
473
474
|
|
|
474
|
-
`rollback` uses the same
|
|
475
|
+
`rollback` uses the same runtime-version default order as `bundles`. Pass `--runtime-version` if you want to override the detected default.
|
|
475
476
|
|
|
476
477
|
```bash
|
|
477
478
|
otalan rollback --bundle-id 1.0.0-web.1 --platform ios --channel production
|
|
@@ -481,7 +482,7 @@ otalan rollback --bundle-id 1.0.0-web.1 --platform ios --channel production
|
|
|
481
482
|
|
|
482
483
|
Pauses delivery of the currently active bundle for the selected release tuple.
|
|
483
484
|
|
|
484
|
-
`pause` uses the same
|
|
485
|
+
`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
486
|
|
|
486
487
|
```bash
|
|
487
488
|
otalan pause --platform ios --channel production
|
|
@@ -491,7 +492,7 @@ otalan pause --platform ios --channel production
|
|
|
491
492
|
|
|
492
493
|
Resumes delivery of the currently active bundle for the selected release tuple.
|
|
493
494
|
|
|
494
|
-
`resume` uses the same
|
|
495
|
+
`resume` uses the same runtime-version default order as `bundles`.
|
|
495
496
|
|
|
496
497
|
```bash
|
|
497
498
|
otalan resume --platform ios --channel production
|
|
@@ -503,7 +504,7 @@ Shows the active bundle for the selected release tuple.
|
|
|
503
504
|
|
|
504
505
|
The active bundle summary displays `publishedAt` as `Published at`.
|
|
505
506
|
|
|
506
|
-
`status` also uses the same
|
|
507
|
+
`status` also uses the same runtime-version default order as `bundles`.
|
|
507
508
|
|
|
508
509
|
```bash
|
|
509
510
|
otalan status --platform ios --channel production
|
|
@@ -517,7 +518,7 @@ otalan status --platform ios --channel production
|
|
|
517
518
|
{
|
|
518
519
|
"target": "capacitor",
|
|
519
520
|
"hash": "sha256...",
|
|
520
|
-
"
|
|
521
|
+
"runtimeVersion": "1.0.0",
|
|
521
522
|
"bundleId": "1.0.0-abcdef123456",
|
|
522
523
|
"createdAt": "2026-04-07T12:00:00.000Z",
|
|
523
524
|
"platform": "ios"
|
|
@@ -530,7 +531,6 @@ otalan status --platform ios --channel production
|
|
|
530
531
|
{
|
|
531
532
|
"target": "expo",
|
|
532
533
|
"hash": "sha256...",
|
|
533
|
-
"nativeVersion": "1.0.0",
|
|
534
534
|
"runtimeVersion": "1.0.0",
|
|
535
535
|
"bundleId": "1.0.0-abcdef123456",
|
|
536
536
|
"launchAsset": "bundles/ios-xxxxx.js",
|