Skip to content

Build and upload to TestFlight #143

Build and upload to TestFlight

Build and upload to TestFlight #143

name: Build and upload to TestFlight
# Creates a temp branch, bumps version (build.yml), uploads IPA via upload-to-testflight.yml.
# Summary metadata is passed from build.yml outputs (no second checkout for version parsing).
#
on:
workflow_call:
inputs:
source_branch:
description: 'Branch, tag, or SHA to build'
required: true
type: string
environment:
description: 'Build environment / track (exp, beta, rc)'
required: true
type: string
testflight_group:
description: 'TestFlight external testing group'
required: false
type: string
default: 'MetaMask BETA & Release Candidates'
distribute_external:
description: 'Whether to distribute to external testers. Defaults to false; nightly-build.yml relies on the script default (true) so it always distributes externally.'
required: false
type: boolean
default: false
workflow_dispatch:
inputs:
source_branch:
description: 'Branch, tag, or SHA to build'
required: true
type: string
default: 'main'
environment:
description: 'Build environment / track'
required: true
type: choice
options:
- exp
- beta
- rc
default: rc
testflight_group:
description: 'TestFlight external testing group'
required: true
type: choice
default: 'MetaMask BETA & Release Candidates'
options:
- 'MetaMask BETA & Release Candidates'
- 'MM Card Team'
- 'Ramp Provider Testing'
distribute_external:
description: 'Whether to distribute to external testers'
required: false
type: boolean
default: false
permissions:
contents: write
id-token: write
jobs:
prepare-build-branch:
uses: ./.github/workflows/create-build-branch.yml
with:
source_branch: ${{ inputs.source_branch }}
secrets: inherit
build:
name: Build iOS (${{ inputs.environment }})
needs: [prepare-build-branch]
uses: ./.github/workflows/build.yml
with:
build_name: main-${{ inputs.environment }}
platform: ios
skip_version_bump: false
source_branch: ${{ needs.prepare-build-branch.outputs.build_branch }}
secrets: inherit
upload-ios-testflight:
needs: [prepare-build-branch, build]
uses: ./.github/workflows/upload-to-testflight.yml
with:
environment: ${{ inputs.environment }}
testflight_group: ${{ inputs.testflight_group || 'MetaMask BETA & Release Candidates' }}
source_branch: ${{ inputs.source_branch }}
build_branch: ${{ needs.prepare-build-branch.outputs.build_branch }}
build_name: main-${{ inputs.environment }}
build_commit_sha: ${{ needs.build.outputs.built_commit_sha }}
build_version: ${{ needs.build.outputs.semantic_version }}
build_number: ${{ needs.build.outputs.ios_version_code }}
distribute_external: ${{ inputs.distribute_external }}
secrets: inherit
cleanup-build-branch:
name: Cleanup build branch
needs: [prepare-build-branch, upload-ios-testflight]
if: always()
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.PR_TOKEN || github.token }}
- name: Delete temporary build branch
env:
BRANCH: ${{ needs.prepare-build-branch.outputs.build_branch }}
run: |
if [ -n "$BRANCH" ]; then
git push origin --delete "$BRANCH" || true
echo "🧹 Deleted build branch: $BRANCH"
fi