@otalan/cli 1.5.3 → 1.7.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,41 @@
2
2
 
3
3
  All notable changes to `@otalan/cli` will be documented in this file.
4
4
 
5
+ ## 1.7.0 - 2026-05-31
6
+
7
+ ### Added
8
+
9
+ - Add paginated `otalan bundles` and interactive `otalan rollback` bundle lists with `--page` and `--page-size`.
10
+ - Show the first page of published bundles before the interactive `otalan bundle` bundle ID prompt.
11
+
12
+ ### Changed
13
+
14
+ - Keep `otalan status` scanning paginated bundle results until it finds the active bundle.
15
+
16
+ ### Fixed
17
+
18
+ - Keep `otalan bundles` compatible with release list API responses that do not include pagination metadata.
19
+ - Print empty and out-of-range bundle pages without inverted item ranges.
20
+
21
+ ## 1.6.0 - 2026-05-30
22
+
23
+ ### Added
24
+
25
+ - Add `@clack/prompts` for maintained cross-platform interactive prompts, loading indicators, and terminal status rendering.
26
+
27
+ ### Changed
28
+
29
+ - Centralize CLI success, warning, info, and error formatting with compact symbols and colorized output.
30
+ - Render CLI context, key generation, status, channels, and bundle lists as compact terminal tables.
31
+ - Hide Expo subprocess output during `otalan bundle` by default while keeping it available with `--verbose` or `-v`.
32
+ - Show the app, release tuple, archive, rollout, and validation result in default `otalan publish` output.
33
+ - Keep release context table spacing to one blank line before the next section.
34
+ - Let interactive `otalan rollback` select the target bundle from a compact bundle list, with the current live bundle highlighted and non-target archives disabled.
35
+ - Replace the custom interactive prompt renderer with Clack prompts while keeping stable non-interactive progress output.
36
+ - Trim redundant interactive prompt hints from `otalan login` and `otalan bundle`.
37
+ - Split large bundle, bundle command, and release command modules into smaller focused files under the 500-line target.
38
+ - Update README output examples and third-party license documentation for the new terminal UI dependency.
39
+
5
40
  ## 1.5.3 - 2026-05-28
6
41
 
7
42
  ### Changed
package/README.md CHANGED
@@ -265,13 +265,12 @@ The `--kind` values and generated key prefixes keep the existing internal API id
265
265
  Output includes both the full Otalan key and the base64url suffix without the `otalan_ci_` or `otalan_ota_` prefix:
266
266
 
267
267
  ```text
268
- Generated OTA Publish Key.
268
+ Generated OTA Publish Key
269
269
 
270
- Full key:
271
- otalan_ci_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
272
-
273
- Key without prefix:
274
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
270
+ ┌────────────────┬────────────────────────────────────────────┐
271
+ │ Full key │ otalan_ci_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
272
+ │ Without prefix │ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx │
273
+ └────────────────┴────────────────────────────────────────────┘
275
274
  ```
276
275
 
277
276
  `otalan keygen` only creates local key material. Importing or activating a key should still happen through an authenticated dashboard flow; an existing OTA Publish Key should not be able to create more keys. OTA App Keys are intended for embedded app update checks and should not be shared or used as CLI credentials.
@@ -280,12 +279,14 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
280
279
 
281
280
  Saves the project OTA Publish Key and API base URL locally.
282
281
 
283
- If auth is already saved, `otalan login` shows the current API URL as the prompt default and shows the current OTA Publish Key in masked form. Press Enter to keep either value.
282
+ Otalan's default API URL is `https://api.otalan.com`. Only pass `--api-url` for self-hosted or non-production API environments.
283
+
284
+ If auth is already saved, `otalan login` shows the current API URL as the prompt default and shows the current OTA Publish Key in masked form.
284
285
 
285
286
  During interactive login, typed OTA Publish Key characters are echoed as `*` so the terminal shows input progress without exposing the key.
286
287
 
287
288
  ```bash
288
- otalan login --api-key otalan_ci_xxx --api-url https://api.otalan.com
289
+ otalan login --api-key otalan_ci_xxx
289
290
  ```
290
291
 
291
292
  ### `otalan doctor`
@@ -350,8 +351,8 @@ Current behavior:
350
351
  - Expo does not require a prebuilt `dist/` or `www/` folder
351
352
  - Expo stores the generated Otalan satellite manifest in `.otalan/bundle/manifest.json`, including `launchAsset`, `assets`, `runtimeVersion`, `bundleId`, and `expoConfig`
352
353
  - both outputs produce a ZIP plus `manifest.json`
353
- - default output shows compact bundle progress with publish-style status icons, ends with `✅ Bundle created`, and prints the generated bundle folder
354
- - `--verbose` or `-v` prints the linked project/app, Capacitor build reminder, source-map omitted count, bundle ID source, and JSON bundle result
354
+ - default output uses colorized compact terminal UI symbols, shows animated status icons in interactive terminals, ends with `✓ Bundle created`, and prints the generated bundle folder as a compact table
355
+ - `--verbose` or `-v` prints the linked project/app, streams Expo subprocess output, shows the Capacitor build reminder, source-map omitted count, bundle ID source, and JSON bundle result
355
356
  - source map files (`*.map`) are omitted from bundle ZIPs by default
356
357
  - native project/source files are rejected before bundle output is written; OTA bundles must only contain generated web/update assets
357
358
  - 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
@@ -402,7 +403,7 @@ otalan bundle --target expo --platform ios --bundle-id 1.0.5
402
403
  If you omit `bundleId`:
403
404
 
404
405
  - in an interactive terminal, the CLI prompts for a bundle ID and shows the local bundle ID from `.otalan/bundle/manifest.json` when available
405
- - when `otalan login` and `otalan init` are configured, the prompt also shows the active published bundle ID for the selected platform/runtime version/channel
406
+ - when `otalan login` and `otalan init` are configured, the prompt prints the latest 20 published bundles for the selected platform/runtime version/channel and also shows the active or latest listed published bundle ID
406
407
  - published bundle hints use `--channel`, defaulting to `production`
407
408
  - duplicate published bundle ID checks use the same `--channel` value and default to `production`
408
409
  - pressing Enter without a bundle ID keeps the automatic bundle ID behavior
@@ -432,7 +433,7 @@ Current behavior:
432
433
  - `--rollout-percent` accepts an integer from `0` to `100`
433
434
  - `--optional` marks the update as non-mandatory
434
435
  - `--release-notes` attaches release notes to the published bundle
435
- - default output shows compact publish progress with animated terminal status icons; `--verbose` or `-v` prints the full project, release, and ingest details
436
+ - default output shows the app, bundle, platform/channel/runtime tuple, rollout, archive, and validation result, then ends with `✓ Release is Live`; `--verbose` or `-v` also prints the full project and ingest details as compact tables
436
437
  - Expo publish forwards the full generated Otalan satellite manifest when present
437
438
  - Expo publish sends the generated manifest with `runtimeVersion`
438
439
  - Expo manifests include the Expo config captured from `bunx expo config --json`; avoid placing secrets in Expo config fields that are not intended to be uploaded
@@ -481,7 +482,7 @@ otalan channels --app-id com.example.app
481
482
 
482
483
  When `--app-id` is omitted in an interactive terminal, the CLI prompts for an app filter with `All` selected by default. Non-interactive runs default to `All`.
483
484
 
484
- The command uses `GET /v1/releases/channels`, optionally with `?appId=...`, and prints each returned channel with the apps that use it:
485
+ The command uses `GET /v1/releases/channels`, optionally with `?appId=...`, and prints each returned channel with the apps that use it in a compact table:
485
486
 
486
487
  ```json
487
488
  {
@@ -500,9 +501,11 @@ The command uses `GET /v1/releases/channels`, optionally with `?appId=...`, and
500
501
 
501
502
  Lists remote bundles for the current app so you can choose a bundle for rollback or rollout operations.
502
503
 
503
- Remote bundle tables display the API `publishedAt` timestamp, not the bundle row `createdAt` timestamp.
504
+ Remote bundle tables are colorized and display the API `publishedAt` timestamp, not the bundle row `createdAt` timestamp.
505
+
506
+ The active bundle row is highlighted in green.
504
507
 
505
- In interactive terminals, the active bundle row is highlighted in green.
508
+ Bundle lists are paginated by the API. When `--page` and `--page-size` are omitted, Otalan returns page 1 with 20 bundles. `--page-size` is capped at 100.
506
509
 
507
510
  Default resolution order:
508
511
 
@@ -513,6 +516,7 @@ Default resolution order:
513
516
 
514
517
  ```bash
515
518
  otalan bundles --platform ios --channel production
519
+ otalan bundles --platform ios --channel production --page 2 --page-size 50
516
520
  ```
517
521
 
518
522
  ### `otalan rollback`
@@ -520,12 +524,14 @@ otalan bundles --platform ios --channel production
520
524
  Reactivates an older bundle for the same tuple.
521
525
 
522
526
  `rollback` uses the same runtime-version default order as `bundles`. Pass `--runtime-version` if you want to override the detected default.
527
+ If `--bundle-id` is omitted, interactive terminals show a paginated selectable bundle list. The current live bundle is highlighted in green and disabled; deleted or unavailable archives are also disabled. Use `--page` and `--page-size` to choose which rollback candidates to display.
523
528
 
524
529
  ```bash
525
530
  otalan rollback --bundle-id 1.0.0-web.1 --platform ios --channel production
531
+ otalan rollback --platform ios --channel production --page 2 --page-size 50
526
532
  ```
527
533
 
528
- When no bundles exist for the selected platform, channel, and runtimeVersion, `otalan rollback` exits without prompting for a target bundle. Successful rollbacks print `Bundle selected:`, the selected bundle summary, and then `✅ Rollback done`.
534
+ When no bundles exist for the selected platform, channel, and runtimeVersion, `otalan rollback` exits without prompting for a target bundle. Successful rollbacks print `Bundle selected`, the selected bundle summary, and then `✓ Rollback done`.
529
535
 
530
536
  ### `otalan pause`
531
537
 
@@ -620,6 +626,8 @@ bun pm pack --dry-run
620
626
  ## Notes
621
627
 
622
628
  - This is a Bun-based CLI published on npm.
629
+ - Terminal prompts, loading indicators, and interactive status rendering use `@clack/prompts`; command summaries and list commands use compact colorized tables.
630
+ - Set `OTALAN_NO_COLOR=1` if you need plain, non-colorized logs.
623
631
  - Expo bundling uses `bunx expo ...`.
624
632
  - Default API URL is `https://api.otalan.com`.
625
633
  - Publishing, rollback, status, and `bundles` expect an OTA Publish Key and an active app.