Skip to content

chore: automate example app publishing to app stores - #5118

Draft
KisaneNeko wants to merge 1 commit into
callstack:mainfrom
KisaneNeko:feat/automate-example-app-release
Draft

KisaneNeko wants to merge 1 commit into
callstack:mainfrom
KisaneNeko:feat/automate-example-app-release

Conversation

@KisaneNeko

@KisaneNeko KisaneNeko commented Sep 14, 2026

Copy link
Copy Markdown

Motivation

The example app in the stores is 20 months out of date. It's only ever been updated by hand (18 times in nine years, against 83 library releases), so it drifts. This ships it with each library release instead.

Related issue

Resolves #4993

How it works

Triggers on release: published, bumps the example app's minor version, then runs eas build --platform all with auto-submit. Prereleases go to the Play internal track and TestFlight, stable releases to Play production. iOS still needs promoting from App Store Connect by hand. Build numbers are assigned remotely by EAS, and the version bump comes back as a small PR.

It runs after the release already exists, so it can't affect it. If it fails, the run page says so, and says the release itself is fine.

Before it can run

  • EXPO_TOKEN secret
  • eas credentials from example/: App Store Connect API key, Play service account
  • eas build:version:set to seed build numbers (android ≥ 38, ios ≥ 26.0.5)
  • Settings → Actions → allow GitHub Actions to create pull requests

Setup, retrying and known limitations are in .github/PUBLISHING_EXAMPLE_APP.md.

Test plan

yarn test covers the version bump script. I ran the workflow's shell locally for each tag shape, and checked profile resolution against @expo/eas-json (prerelease → internal, stable → production).

Nothing has run against real EAS yet, so the first release is the real test. If it goes wrong it costs a demo app update, not a release.

@KisaneNeko
KisaneNeko marked this pull request as draft September 14, 2026 06:46
The example app in the stores drifts away from the library: it was released
eighteen times in nine years against eighty-three library releases, all by
hand, and the last one was twenty months ago. Publish it from the release that
prompts it instead.

Publishing runs after a release already exists, so it cannot fail, revoke or
roll back one. A run that does not succeed says so on its own run page, where
the mail GitHub already sends the publisher leads, and says the release is
unaffected: a red cross beside a fresh release should not read as a broken
release. It also says to check EAS and the stores before re-running, because a
build may already have been submitted and cancelling the workflow does not
cancel a build running on EAS.

Where a release lands is decided by the tag rather than by the release's
prerelease flag, because .release-it.json pins every release to `preRelease:
true` for the 6.0 alpha cycle. Reading that flag would route a stable 6.0.0 to
the internal track until somebody remembered to revert the pin. A prerelease
goes to the Play internal track, a stable release to production; both upload to
App Store Connect, where promoting a build to the App Store stays manual.

The example app keeps its own version line rather than adopting the library's,
which App Store Connect would reject while the library is on a prerelease
version. Its minor version is bumped and recorded through a pull request. Build
numbers move to EAS, which assigns them remotely, so a retry cannot collide
with a build that has already been submitted.

Store credentials live in EAS rather than here, so EXPO_TOKEN is the only
secret this needs. Setup, retrying, and the known limitations are in
.github/PUBLISHING_EXAMPLE_APP.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@KisaneNeko
KisaneNeko force-pushed the feat/automate-example-app-release branch from 8da1cee to d1f8f7a Compare September 14, 2026 19:36
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.

feat: automate publishing of the Example App

1 participant