Skip to content

cli: --app-url and .tar.gz apps for Expo / EAS builds (TB-379) - #40

Merged
jochen-testingbot merged 1 commit into
mainfrom
feat/TB-379-app-url-targz
Sep 4, 2026
Merged

cli: --app-url and .tar.gz apps for Expo / EAS builds (TB-379)#40
jochen-testingbot merged 1 commit into
mainfrom
feat/TB-379-app-url-targz

Conversation

@jochen-testingbot

Copy link
Copy Markdown
Contributor

Summary

Makes Expo / EAS Build artifacts a first-class input, and URL downloads in general.

  • --app-url <url> downloads the app instead of reading a local file. All formats are supported: .apk, .apks, .ipa, .zip and .tar.gz. The extension comes from the URL path, then Content-Disposition, then Content-Type. A 401/403 is reported as an expired signed link (EAS URLs expire after about an hour); 404 and other failures get their own messages. Every positional argument is then a flow.
  • .tar.gz as an app format, local or downloaded: extracted with the system tar (present on macOS, Linux and Windows runners), the shallowest .app bundle inside is used (root or Payload/), then zipped and uploaded via the existing .app path. A clear error when the archive holds no .app (device build instead of simulator build).
  • testingbot upload <url> accepts URLs too.
  • EAS Build awareness: inside an EAS job the build id, profile and platform are attached as run metadata and EAS_BUILD_GIT_COMMIT_HASH is the default --commit-sha.
  • Only one app source may be given: file, --app-url or --app-binary-id. Temp directories are removed after the upload, including on failure. Dry-run shows the URL without downloading.
  • README: Expo / EAS section and the new flag.

Jira: TB-379 (epic TB-370).

Test plan

  • npm test — 753 passed (25 new: URL/extension helpers, download with header fallbacks and error mapping, real tar extraction incl. nested Payload/ and corrupt archives, provider materialize/cleanup/exclusivity, CLI flag wiring and EAS metadata)
  • npm run lint, npm run build
  • Live: upload https://testingbot.com/appium/sample.apk → downloaded 25.8 MB, checksum-deduped, project 92948
  • Live: upload sample-sim.tar.gz (built from the public iOS sample) → SampleApp.app extracted, zipped, uploaded, project 92951
  • Dry-run with --app-url …tar.gz shows the URL and skips the download
  • Real EAS Build URL (needs an Expo project)

eas build hands back a download URL, and for iOS simulator builds the
artifact is a .tar.gz with the .app inside. The CLI now accepts:

- --app-url <http(s) url>: downloads .apk/.ipa/.zip/.tar.gz to a temp
  dir (extension from the URL path, Content-Disposition or Content-Type),
  with a clear message for expired signed links (401/403).
- .tar.gz as an app format, local or downloaded: extracted with the
  system tar and the shallowest .app bundle is used.
- testingbot upload <url>.
- Inside EAS Build, the build id/profile/platform are attached as
  metadata and EAS_BUILD_GIT_COMMIT_HASH is the default commit SHA.

Temp files are removed after the upload, including on failure. Only one
app source may be given (file, --app-url or --app-binary-id).
@jochen-testingbot
jochen-testingbot merged commit 11c4539 into main Sep 4, 2026
12 checks passed
@jochen-testingbot jochen-testingbot mentioned this pull request Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant