diff --git a/CLAUDE.md b/CLAUDE.md index fac8b28ca..4b591b464 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -109,7 +109,7 @@ Use `APP_VARIANT` in `packages/app/app.config.js` to control app name + package - `production` -> app name `Paseo`, package `sh.paseo` - `development` -> app name `Paseo Debug`, package `sh.paseo.debug` -EAS profiles live in `packages/app/eas.json` as `development` and `production`. +EAS profiles live in `packages/app/eas.json` as `development`, `production`, and `production-apk`. `development` uses Android `debug`. @@ -136,6 +136,28 @@ npm run android:production `npm run android:prod` and `npm run android:release` are aliases for `npm run android:production`. +### Cloud build + submit (EAS Workflows) + +Tag pushes like `v0.1.0` trigger `packages/app/.eas/workflows/release-mobile.yml` on Expo servers. + +That workflow does: +- Build iOS with the `production` profile +- Build Android with the `production` profile +- Submit each build with the `production` submit profile + +Useful commands: + +```bash +# List recent mobile workflow runs +cd packages/app && npx eas workflow:runs --workflow release-mobile.yml --limit 10 + +# Inspect one run (jobs, status, outputs) +cd packages/app && npx eas workflow:view + +# Stream logs for all steps in one failed job +cd packages/app && npx eas workflow:logs --non-interactive --all-steps +``` + ## Testing with Playwright MCP **CRITICAL:** When asked to test the app, you MUST use the Playwright MCP connecting to Metro at `http://localhost:8081`. @@ -160,15 +182,22 @@ npm run release:patch npm run version:all:patch # npm version across all workspaces (creates commit + local tag) npm run release:check npm run release:publish -npm run release:push # pushes HEAD and current version tag (triggers desktop release) +npm run release:push # pushes HEAD and current version tag (triggers desktop + EAS mobile workflows) ``` Notes: - `version:all:*` uses `npm version` with workspace support and runs the root `version` lifecycle script to sync internal `@getpaseo/*` dependency versions before the release commit/tag is created. - `release:prepare` refreshes workspace `node_modules` links to prevent stale local package types during release checks. - If `release:publish` fails after a successful publish of one workspace, re-run `npm run release:publish`; npm will skip already-published versions and continue where possible. +- If a user asks to "release paseo" (without specifying major/minor), treat it as a patch release and run `npm run release:patch`. +- All workspaces share one version by design. Keep versions synchronized and release together. - After each release, update the website Mac download CTA URL to the new version tag in `packages/website/src/routes/index.tsx`. +Release completion checklist: +- `npm run release:patch` completes successfully. +- GitHub `Desktop Release` workflow for the new `v*` tag is green. +- EAS `release-mobile.yml` workflow for the same tag is green (Expo queues can take longer on the free plan). + ## Orchestrator Mode - **When agent control tool calls fail**, make sure you list agents before trying to launch another one. It could just be a wait timeout. diff --git a/README.md b/README.md index c0eedb329..6818c71a1 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ PASEO_SPEECH_E2E_DOWNLOAD=1 PASEO_SPEECH_E2E_MODEL_SET=parakeet-pocket \ See [paseo.sh/docs](https://paseo.sh/docs) for full documentation. -## Desktop releases +## Releases Desktop app binaries are built and attached to a GitHub Release when you push a version tag (for example `v0.1.0` or `desktop-v0.1.0`). @@ -86,7 +86,23 @@ For the full package release flow, use: npm run release:patch ``` -This triggers the `Desktop Release` workflow (`.github/workflows/desktop-release.yml`). +`npm run release:patch` bumps all workspace versions together, publishes npm packages (`@getpaseo/relay`, `@getpaseo/server`, `@getpaseo/cli`), and pushes the matching `v*` tag. + +The tag triggers: +- GitHub `Desktop Release` workflow (`.github/workflows/desktop-release.yml`) +- Expo EAS mobile workflow (`packages/app/.eas/workflows/release-mobile.yml`) to build + submit Android/iOS + +Useful monitoring commands after a release push: + +```bash +# Desktop (GitHub Actions) +gh run list --workflow "Desktop Release" --limit 10 +gh run watch + +# Mobile (EAS Workflows) +cd packages/app && npx eas workflow:runs --workflow release-mobile.yml --limit 10 +cd packages/app && npx eas workflow:view +``` ## License diff --git a/packages/app/.eas/workflows/release-mobile.yml b/packages/app/.eas/workflows/release-mobile.yml new file mode 100644 index 000000000..130d268fa --- /dev/null +++ b/packages/app/.eas/workflows/release-mobile.yml @@ -0,0 +1,38 @@ +name: Release Mobile + +on: + push: + tags: + - "v*" + workflow_dispatch: {} + +jobs: + build_ios: + name: Build iOS + type: build + params: + platform: ios + profile: production + + build_android: + name: Build Android + type: build + params: + platform: android + profile: production + + submit_ios: + name: Submit iOS + needs: [build_ios] + type: submit + params: + build_id: ${{ needs.build_ios.outputs.build_id }} + profile: production + + submit_android: + name: Submit Android + needs: [build_android] + type: submit + params: + build_id: ${{ needs.build_android.outputs.build_id }} + profile: production