Use when preparing a mobile release from the dev branch and deciding whether changes should ship through the app stores or through the OTA pipeline before creating the release PR to mobile-main.
Perform a mobile release from dev, with an explicit release-mode decision before the bump.
The skill must recommend one of these modes, explain why, ask the user to confirm, and then write apps/mobile/release-plan.json before running the bump:
store: normal App Store / Google Play releaseota: OTA-only publish, no store buildsDo not recommend or write any other mode. The current implementation only supports store and ota.
The CI release flow is file-driven:
apps/mobile/release-plan.json is the editable plan on devpnpm bump runs apps/mobile/scripts/apply-release-config.tsapps/mobile/release.json for the new version and resets the plan back to a safe defaultapps/mobile/release.json after merge to decide which pipelines to triggerdev. If not, abort with a warning.git pull --rebase in the repo root.apps/mobile/package.jsonapps/mobile/release-plan.json.github/workflows/tag.yml.github/workflows/publish-ota.ymlgit tag --sort=-creatordate | grep -E '^mobile[@/]' | head -1
git log --format="%H %s" | grep -Ei "^[a-f0-9]* release\\(mobile\\): release v" | head -1 | awk '{print $1}'
git log <last-tag-or-commit>..HEAD --oneline --no-merges
git diff --name-only <last-tag-or-commit>..HEAD
Shiny new thingsImprovementsNo longer brokenThanksstore when:apps/mobile/ios/**apps/mobile/android/**apps/mobile/native/**apps/mobile/package.jsonapps/mobile/app.config.tsapps/mobile/app.config.base.tsapps/mobile/eas.jsonapps/mobile/ios/Folo/Info.plist.github/workflows/build-ios.yml.github/workflows/build-android.ymlota when:If recommending ota, derive the target store binary version from recent origin/mobile-main releases and propose it as the runtimeVersion.
If you cannot determine the runtime confidently, stop and ask the user to confirm it.
Present:
ota, the proposed runtimeVersionota, the proposed channelWait for explicit user confirmation before continuing.
Update apps/mobile/release-plan.json to match the confirmed mode.
Examples:
{
"mode": "store",
"runtimeVersion": null,
"channel": null
}
{
"mode": "ota",
"runtimeVersion": "0.4.1",
"channel": "production"
}
apps/mobile/changelog/next.md.apps/mobile/changelog/next.md.nbump requires a clean working tree.
git add apps/mobile/changelog/next.md apps/mobile/release-plan.json
git commit -m "docs(mobile): prepare release metadata"
git status --short
cd apps/mobile && pnpm bump
pnpm bump will:
package.jsonios/Folo/Info.plisttsx scripts/apply-release-config.ts ${NEW_VERSION}apps/mobile/release.jsonapps/mobile/release-plan.json back to the safe default storemobile-mainapps/mobile/release.json on the release branch and report:
mode=storemode=otaapps/mobile/bump.config.tsapps/mobile/release-plan.jsonapps/mobile/release.jsonapps/mobile/scripts/apply-release-config.tsapps/mobile/changelog/apps/mobile/scripts/apply-changelog.ts.github/scripts/resolve-mobile-release-config.mjs.github/workflows/tag.yml.github/workflows/publish-ota.ymlapps/mobile/app.config.tsapps/mobile/ios/Folo/Info.plist