| ... | ... | @@ -24,6 +24,8 @@ name: Mobile EAS Production |
| 24 | 24 | # into the void. |
| 25 | 25 | # workflow_dispatch remains as a manual override for both modes (e.g. to |
| 26 | 26 | # retry an errored build or force an OTA). |
| 27 | # Manual v2-preview builds keep the production app identity and disable OTA. |
| 28 | # Select the v2 branch when dispatching a preview build. |
| 27 | 29 | on: |
| 28 | 30 | workflow_dispatch: |
| 29 | 31 | inputs: |
| ... | ... | @@ -35,6 +37,14 @@ on: |
| 35 | 37 | options: |
| 36 | 38 | - build |
| 37 | 39 | - update |
| 40 | profile: |
| 41 | description: "Store build profile (v2-preview supports build mode only)" |
| 42 | required: true |
| 43 | type: choice |
| 44 | default: production |
| 45 | options: |
| 46 | - production |
| 47 | - v2-preview |
| 38 | 48 | platform: |
| 39 | 49 | description: "Target platform" |
| 40 | 50 | required: true |
| ... | ... | @@ -75,7 +85,7 @@ concurrency: |
| 75 | 85 | |
| 76 | 86 | jobs: |
| 77 | 87 | production: |
| 78 | | name: EAS Production ${{ github.event_name == 'push' && 'auto' || inputs.mode }} |
| 88 | name: EAS ${{ inputs.profile || 'production' }} ${{ github.event_name == 'push' && 'auto' || inputs.mode }} |
| 79 | 89 | runs-on: blacksmith-8vcpu-ubuntu-2404 |
| 80 | 90 | permissions: |
| 81 | 91 | contents: read |
| ... | ... | @@ -83,6 +93,12 @@ jobs: |
| 83 | 93 | APP_VARIANT: production |
| 84 | 94 | NODE_OPTIONS: --max-old-space-size=8192 |
| 85 | 95 | steps: |
| 96 | - name: Reject preview OTA updates |
| 97 | if: github.event_name == 'workflow_dispatch' && inputs.profile == 'v2-preview' && inputs.mode == 'update' |
| 98 | run: | |
| 99 | echo "::error::V2 previews use store builds only. Select mode=build." |
| 100 | exit 1 |
| 101 | |
| 86 | 102 | - id: expo-token |
| 87 | 103 | name: Check for EXPO_TOKEN |
| 88 | 104 | env: |
| ... | ... | @@ -125,6 +141,16 @@ jobs: |
| 125 | 141 | args: |
| 126 | 142 | - --filter=@t3tools/mobile... |
| 127 | 143 | |
| 144 | - name: Verify v2 preview source |
| 145 | if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.profile == 'v2-preview' |
| 146 | run: | |
| 147 | node --input-type=module -e ' |
| 148 | import * as environment from "./packages/contracts/src/environment.ts"; |
| 149 | if (environment.ORCHESTRATION_PROTOCOL_VERSION !== 2) { |
| 150 | throw new Error("V2 previews require a v2 source branch. Select the v2 branch when running this workflow."); |
| 151 | } |
| 152 | ' |
| 153 | |
| 128 | 154 | - name: Expose pnpm |
| 129 | 155 | if: steps.expo-token.outputs.present == 'true' |
| 130 | 156 | run: | |
| ... | ... | @@ -199,10 +225,12 @@ jobs: |
| 199 | 225 | - name: Summarize manual build version |
| 200 | 226 | if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'build' |
| 201 | 227 | working-directory: apps/mobile |
| 228 | env: |
| 229 | MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }} |
| 202 | 230 | run: | |
| 203 | 231 | version="$(npx expo config --json --type public | jq -r '.version')" |
| 204 | 232 | { |
| 205 | | echo "## Manual production build" |
| 233 | echo "## Manual $MOBILE_BUILD_PROFILE build" |
| 206 | 234 | echo |
| 207 | 235 | echo "- App version: \`$version\`" |
| 208 | 236 | echo "- Platform: \`${{ inputs.platform }}\`" |
| ... | ... | @@ -215,7 +243,8 @@ jobs: |
| 215 | 243 | working-directory: apps/mobile |
| 216 | 244 | env: |
| 217 | 245 | EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }} |
| 218 | | run: eas build --platform ${{ inputs.platform }} --profile production --auto-submit --non-interactive --no-wait |
| 246 | MOBILE_BUILD_PROFILE: ${{ inputs.profile || 'production' }} |
| 247 | run: eas build --platform ${{ inputs.platform }} --profile "$MOBILE_BUILD_PROFILE" --auto-submit --non-interactive --no-wait |
| 219 | 248 | |
| 220 | 249 | - name: Publish OTA update (manual) |
| 221 | 250 | if: steps.expo-token.outputs.present == 'true' && github.event_name == 'workflow_dispatch' && inputs.mode == 'update' |