@otalan/cli 1.0.9 → 1.1.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 CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to `@otalan/cli` will be documented in this file.
4
4
 
5
+ ## 1.1.1 - 2026-05-07
6
+
7
+ ### Changed
8
+
9
+ - Remove unsupported target mentions from public documentation, CLI help, and package metadata.
10
+ - Document official support for Capacitor 7 and 8, and Expo SDK 54 and 55.
11
+
12
+ ## 1.1.0 - 2026-05-07
13
+
14
+ ### Added
15
+
16
+ - List active project apps during `otalan init` and validate `--app-id` against the logged-in project.
17
+
18
+ ### Changed
19
+
20
+ - Let `otalan login` reuse the saved API URL and keep the saved CI key from a masked prompt.
21
+ - Export Expo bundles into a project-local `.otalan/expo-export-*` folder so Expo accepts the output path.
22
+ - Fall back to the resolved native version when Expo runtimeVersion is not configured or present in export metadata.
23
+ - Clarify Capacitor and Expo bundling behavior in CLI help and README.
24
+
5
25
  ## 1.0.9 - 2026-05-06
6
26
 
7
27
  ### Added
@@ -74,7 +94,7 @@ Initial public release of the Otalan CLI.
74
94
  ### Added
75
95
 
76
96
  - Capacitor OTA bundle packaging from built web assets.
77
- - Expo / React Native OTA bundle packaging through `expo export`.
97
+ - Expo OTA bundle packaging through `expo export`.
78
98
  - Release publishing with rollout metadata and server-side validation polling.
79
99
  - Bundle listing, active bundle status, and rollback commands.
80
100
  - CI key login, project initialization, and API connectivity doctor checks.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@otalan/cli`
2
2
 
3
- Otalan CLI for bundling and publishing OTA update releases for Capacitor and Expo / React Native apps.
3
+ Otalan CLI for bundling and publishing OTA update releases for Capacitor and Expo apps.
4
4
 
5
5
  Website: [otalan.com](https://otalan.com)
6
6
 
@@ -21,6 +21,15 @@ The npm package ships a Bun-based CLI entrypoint, not standalone native binaries
21
21
  - Windows support is experimental until the CLI release flow is validated on Windows.
22
22
  - Native compile scripts exist for macOS, Linux, and Windows maintainers, but the compiled binaries are not included in the npm package.
23
23
 
24
+ ## App Framework Support
25
+
26
+ Officially supported app targets and versions:
27
+
28
+ - Capacitor 7 and 8 with `--target capacitor`
29
+ - Expo SDK 54 and 55 with `--target expo`
30
+
31
+ Other app targets and older framework versions may work, but they are not officially supported for the moment.
32
+
24
33
  ## Install
25
34
 
26
35
  Recommended:
@@ -50,7 +59,7 @@ otalan login --api-key otalan_ci_xxx
50
59
  2. Link the current repo to your active Otalan app:
51
60
 
52
61
  ```bash
53
- otalan init --app-id com.example.app
62
+ otalan init
54
63
  ```
55
64
 
56
65
  3. Build your web assets with your app's normal build command.
@@ -67,10 +76,10 @@ otalan bundle --target capacitor --platform ios --bundle-id 1.0.5
67
76
  otalan publish --channel production
68
77
  ```
69
78
 
70
- `otalan bundle --target capacitor` packages the built web assets from `dist/` or `www/`, so your app build must run first.
79
+ `otalan bundle --target capacitor` packages existing built web assets. By default it reads `dist/` first, then `www/`; pass `--input-dir <path>` if your build outputs somewhere else. Your app build must run first.
71
80
  `otalan publish` waits for server-side validation to finish before it returns.
72
81
 
73
- ### Expo / React Native
82
+ ### Expo
74
83
 
75
84
  1. Log in with your CI key:
76
85
 
@@ -81,7 +90,7 @@ otalan login --api-key otalan_ci_xxx
81
90
  2. Link the current repo to your active Otalan app:
82
91
 
83
92
  ```bash
84
- otalan init --app-id com.example.app
93
+ otalan init
85
94
  ```
86
95
 
87
96
  3. Bundle the OTA payload:
@@ -96,7 +105,7 @@ otalan bundle --target expo --platform ios --bundle-id 1.0.5
96
105
  otalan publish --channel production
97
106
  ```
98
107
 
99
- `otalan bundle --target expo` runs `bunx expo export`, packages the exported JS bundle and assets, and stores the resolved Expo config in the Otalan manifest for publish.
108
+ `otalan bundle --target expo` runs `bunx expo export` itself, exports into a temporary project-local `.otalan/expo-export-*` folder, packages the exported JS bundle and assets, and stores the resolved Expo config in the Otalan manifest for publish. You do not need to create a `dist/` or `www/` folder before running it.
100
109
  `otalan publish` waits for server-side validation to finish before it returns.
101
110
 
102
111
  ## CI/CD Usage
@@ -124,9 +133,9 @@ otalan bundle --target capacitor --platform ios --bundle-from-package
124
133
  otalan publish --channel production
125
134
  ```
126
135
 
127
- Use your normal app build command before `otalan bundle`. The CLI then packages the built web output from `dist/` or `www/`.
136
+ Use your normal app build command before `otalan bundle`. The CLI then packages the built web output from `dist/` or `www/` by default; pass `--input-dir <path>` if your Capacitor web output uses another folder.
128
137
 
129
- ### CI/CD Example: Expo / React Native
138
+ ### CI/CD Example: Expo
130
139
 
131
140
  ```bash
132
141
  bun install --frozen-lockfile
@@ -137,7 +146,7 @@ otalan bundle --target expo --platform ios --bundle-from-package
137
146
  otalan publish --channel production
138
147
  ```
139
148
 
140
- This runs `bunx expo export` through the CLI, packages the exported OTA assets, and publishes the resulting bundle through Otalan's validation pipeline.
149
+ This runs `bunx expo export` through the CLI, using a temporary project-local `.otalan/expo-export-*` folder, packages the exported OTA assets, and publishes the resulting bundle through Otalan's validation pipeline. Do not add a separate web build step just to create `dist/` or `www/` for Expo.
141
150
 
142
151
  ### GitHub Actions Example
143
152
 
@@ -173,7 +182,7 @@ jobs:
173
182
  Adjust the build step and bundle target for your app:
174
183
 
175
184
  - Capacitor: keep your web build step and use `--target capacitor`
176
- - Expo / React Native: remove the web build step if not needed and use `--target expo`
185
+ - Expo: remove the web build step if not needed and use `--target expo`
177
186
 
178
187
  ## What It Does
179
188
 
@@ -181,7 +190,7 @@ Adjust the build step and bundle target for your app:
181
190
  - checks API connectivity and CI key context
182
191
  - generates CI and OTA key material locally for dashboard import
183
192
  - links the current repo to an Otalan app
184
- - bundles Capacitor or Expo / React Native OTA output
193
+ - bundles Capacitor or Expo OTA output
185
194
  - publishes a bundle with rollout metadata
186
195
  - lists published bundles
187
196
  - rolls back to an older bundle
@@ -258,7 +267,9 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
258
267
 
259
268
  ### `otalan login`
260
269
 
261
- Saves the CI key and API base URL locally.
270
+ Saves the project CI key and API base URL locally.
271
+
272
+ If auth is already saved, `otalan login` shows the current API URL as the prompt default and shows the current CI key in masked form. Press Enter to keep either value.
262
273
 
263
274
  ```bash
264
275
  otalan login --api-key otalan_ci_xxx --api-url https://api.otalan.com
@@ -282,11 +293,15 @@ otalan doctor --api-key "$OTALAN_API_KEY" --api-url "${OTALAN_API_URL:-https://a
282
293
 
283
294
  Creates `otalan.config.json` in the current project.
284
295
 
285
- `appId` is the registered app ID shown under the app name on the Apps page in Otalan. It is scoped to the current project, not globally unique across all projects. The app must be active; archived apps are treated as unavailable for CI publish, rollback, status, and bundle listing commands.
296
+ `otalan init` lists the active apps in the project resolved from the logged-in CI key and lets you select one. `appId` is scoped to that project, not globally unique across all projects. Archived apps are not listed and are treated as unavailable for CI publish, rollback, status, and bundle listing commands.
286
297
 
287
- If you already ran `otalan login`, the CLI resolves `organizationSlug` and `projectSlug` automatically from the CI key and stores them as a safety check.
298
+ Run `otalan init` once per app repo or working folder. If you switch to another checkout, folder, or app project, run `otalan init` there too so that folder has its own `otalan.config.json`.
299
+
300
+ If you pass `--app-id`, the CLI validates that the app exists in the logged-in project before writing `otalan.config.json`. The CLI also stores `organizationSlug` and `projectSlug` from the CI key as a safety check.
288
301
 
289
302
  ```bash
303
+ otalan init
304
+ # Non-interactive CI usage:
290
305
  otalan init \
291
306
  --app-id com.example.app
292
307
  ```
@@ -301,9 +316,11 @@ Capacitor:
301
316
 
302
317
  ```bash
303
318
  otalan bundle --target capacitor --platform ios
319
+ # Custom Capacitor web output folder:
320
+ otalan bundle --target capacitor --platform ios --input-dir build
304
321
  ```
305
322
 
306
- Expo / React Native:
323
+ Expo:
307
324
 
308
325
  ```bash
309
326
  otalan bundle --target expo --platform ios
@@ -311,9 +328,13 @@ otalan bundle --target expo --platform ios
311
328
 
312
329
  Current behavior:
313
330
 
314
- - Build your Capacitor web assets before running `otalan bundle`
315
- - Capacitor reads `dist/` or `www/`
316
- - Expo runs `bunx expo export --platform <platform>`
331
+ - Official support covers Capacitor 7 and 8, and Expo SDK 54 and 55
332
+ - Other app targets and older framework versions may work, but they are not officially supported for the moment
333
+ - Capacitor packages prebuilt web assets; it does not run your app build command
334
+ - without `--input-dir`, Capacitor checks `dist/` first and then `www/`
335
+ - pass `--input-dir <path>` to package a different Capacitor web output folder
336
+ - Expo runs `bunx expo export --platform <platform>` into a temporary project-local `.otalan/expo-export-*` folder
337
+ - Expo does not require a prebuilt `dist/` or `www/` folder
317
338
  - Expo stores the resolved Expo app config in `.otalan/bundle/manifest.json` so publish can forward it for `extra.expoClient`
318
339
  - both outputs produce a ZIP plus `manifest.json`
319
340
  - `--platform` is required so the CLI exports the selected platform and resolves the correct native/runtime version
@@ -324,9 +345,32 @@ Native version defaults:
324
345
  - Capacitor iOS reads `CFBundleShortVersionString` from `Info.plist` and resolves `$(MARKETING_VERSION)` from the Xcode project when needed
325
346
  - Capacitor Android reads `versionName` from `android/app/build.gradle` or `build.gradle.kts`
326
347
  - Expo reads the selected platform version from Expo config and falls back to the top-level Expo `version`
327
- - Expo runtimeVersion reads `--runtime-version`, Expo export metadata, or Expo config runtimeVersion policies/strings
348
+ - 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
328
349
  - `--native-version` overrides auto-detection
329
350
 
351
+ For Expo projects, the recommended app config is:
352
+
353
+ ```json
354
+ {
355
+ "expo": {
356
+ "version": "1.0.0",
357
+ "runtimeVersion": {
358
+ "policy": "appVersion"
359
+ }
360
+ }
361
+ }
362
+ ```
363
+
364
+ Use a string value instead if you manage runtime compatibility manually:
365
+
366
+ ```json
367
+ {
368
+ "expo": {
369
+ "runtimeVersion": "1.0.0"
370
+ }
371
+ }
372
+ ```
373
+
330
374
  Choose the bundle ID you want to release:
331
375
 
332
376
  ```bash
@@ -488,7 +532,7 @@ bun pm pack --dry-run
488
532
  ## Notes
489
533
 
490
534
  - This is a Bun-based CLI published on npm.
491
- - Expo / React Native bundling uses `bunx expo ...`.
535
+ - Expo bundling uses `bunx expo ...`.
492
536
  - Default API URL is `https://api.otalan.com`.
493
537
  - Publishing, rollback, status, and `bundles` expect a CI key and an active app.
494
538
  - Release commands print the organization and project resolved from the CI key before continuing.