Skip to content

feat(eas): link the app to the EAS project so CI can build it - #185

Merged
hotlong merged 5 commits into
mainfrom
claude/issue-183-eas-link
Nov 3, 2026
Merged

hotlong merged 5 commits into
mainfrom
claude/issue-183-eas-link

Conversation

@hotlong

@hotlong hotlong commented Nov 3, 2026 •

Copy link
Copy Markdown
Contributor

Refs #183

Clause-②: no
Metadata-protocol: none

维护者速读

  • 改了什么: App 关联到 EAS 项目 @objectstack/objectos,开启受 fingerprint 保护的 OTA,新增真机开发包 profile,preview 不再预填旧服务器地址,并补上手机安装步骤和按卡片整理的真机检查清单。
  • 与卡片的差异: slug 从 objectos-mobile 改为 objectos。项目创建时 slug 就是 objectos,Expo 不支持改 slug,而且目前还没有任何安装包,所以改代码代价最小。卡片没有提到但必须补的:expo-updates 和 expo-dev-client 两个原生模块。少了它们,OTA 地址和开发包 profile 都不起作用。
  • 风险与回滚: EXPO_TOKEN 已设置,所以合并本 PR 就会真正触发 main 上的 EAS 构建和 OTA 发布。在 iOS 签名([Maintainer] Steps only the maintainer can take to get the ObjectOS app onto a phone #184 第 3 步)完成前,推送触发的 EAS Build 预计在 iOS 步骤失败,Android 步骤也不会运行;需要 Android 包时手动触发 platform=android。回滚 = 撤回本 PR。
  • 已出包: Android preview 构建在本分支上成功:APK(run 41598217327,头提交 65e8c9d)。两个新模块已编译。
  • 本 PR 现在改了 .github/workflows/**(受管面),由你合并。
  • 先看: ① app.config.ts ② eas.json ③ .github/workflows/eas-*.yml ④ docs/DEVICE-TESTING.md
  • 两分钟验证: 运行 npx expo config --json --type public,确认 owner、slug、updates.url 和 extra.eas.projectId 指向同一个项目。
  • 需要你做的:
    1. 合并本 PR。
    2. 想让 CI 的 OTA 到达 preview 包,运行一次 eas channel:edit preview --branch main。
    3. 在真机上安装上面的 APK,按 docs/DEVICE-TESTING.md 验收。

本 PR 不用 Fixes:#183 的验收还要求 iOS 包,要等 Apple 签名完成。

What changes

  • app.config.ts, app.json: owner: "objectstack", slug: "objectos", extra.eas.projectId, updates.url, and runtimeVersion: { policy: "fingerprint" }.
  • eas.json: adds development-device (a dev client with ios.simulator: false) and gives preview the channel preview. It removes EXPO_PUBLIC_DEFAULT_SERVER_URL from preview and production: eas-cli refuses an empty value, and app.config.ts already defaults the unset variable to "". preview sets SENTRY_DISABLE_AUTO_UPLOAD, because the upload task fails the release build with no SENTRY_AUTH_TOKEN.
  • .github/workflows/eas-{build,update,submit}.yml: Node 20 → 22. The setup step installs the latest eas-cli, and 27.3.0 refuses Node 20 at install.
  • package.json, lockfile: expo-updates and expo-dev-client, at the versions expo install picked for SDK 55.
  • docs/DEVICE-TESTING.md: install paths for Android and iOS, plus a smoke checklist with one row per landed card, taken from each PR's manual check.
  • docs/DEPLOYMENT.md: the project, the new profile, and the channel mapping below.
  • __tests__/lib/shell/incoming-link.test.ts: the dev-client scheme fixture follows the slug.
  • .changeset/151-objectos-rebrand.md: its unreleased note now states the current slug. A new changeset covers this PR.

Open point, not changed here. eas-update.yml publishes with eas update --auto, which uses a branch named after the git branch (main). A preview build reads channel preview, which points at branch preview by default. Until eas channel:edit preview --branch main runs, a CI update reaches no installed build. .github/workflows/** is a governed surface, so this PR documents the mapping and leaves the workflow alone.

Verification

Run on this branch's content with pnpm 10, the version CI uses:

Check Result
pnpm install --frozen-lockfile up to date
pnpm run lint (tsc + ESLint) clean
jest --ci 49 suites, 1048 tests passed
expo config --json --type public owner, slug, runtimeVersion, updates.url and extra.eas.projectId as above; defaultServerUrl is ""
expo prebuild --no-install (Android) AndroidManifest.xml has the update URL and scheme exp+objectos
expo prebuild --no-install (iOS) Expo.plist has EXUpdatesURL and EXUpdatesRuntimeVersion = file:fingerprint; Info.plist has scheme exp+objectos

Four EAS Build runs on this branch (platform=android, profile=preview):

Run Head Result
41596268179 cedb324 failed installing eas-cli on Node 20
41596510237 057feee failed validating eas.json (empty env values)
41596720266 f5afc7d failed in Gradle at Sentry's upload task
41598217327 65e8c9d succeeded: APK build, 27m 54s

The head after 65e8c9d changes only docs/DEPLOYMENT.md and the changeset.

Not verified:

  • The APK has not been installed, and no device check has run.
  • No iOS build has run: no Apple credentials yet.
  • No over-the-air update has been published or received. The build fingerprint changed from 0a40028 to 1d01151 between the last two builds, whose only difference is eas.json, so whether the update job's fingerprint matches a build's needs checking on the first real update.
  • From knowledge of eas-cli, not tested: a push to main fails at Build iOS until credentials exist, and since the step fails first, Build Android does not run.

🤖 Generated with Claude Code

Point the app at the EAS project @objectstack/objectos. The slug moves to
objectos because an Expo project's slug cannot be renamed and no binary
exists yet. Over-the-air updates use the fingerprint runtime version, so an
update only reaches a binary with the same native side.

Add expo-updates and expo-dev-client: without them the updates URL and the
development profiles have no effect. Add a development-device profile, give
preview a channel and stop pre-filling a stale server. Document how to
install on a phone and list each landed card's device check.

Refs #183

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
hotlong and others added 4 commits November 3, 2026 15:27
The setup step installs the latest eas-cli, and 27.3.0 refuses Node 20 at install, so every EAS run failed before any build step once EXPO_TOKEN was set.

Refs #183

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eas.json validation rejects an empty env value, so no build could start from either profile. app.config.ts already defaults the unset variable to an empty string, which still pre-fills no server.

Refs #183

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A release build runs Sentry's upload task, which fails with no SENTRY_AUTH_TOKEN and stops the Gradle build after compiling. Preview builds are for testers, so they skip the upload.

Refs #183

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #183

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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