Build and Submit iOS #146
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Build and Submit iOS | |
on: | |
workflow_dispatch: | |
inputs: | |
profile: | |
type: choice | |
description: Build profile to use | |
options: | |
- testflight | |
- production | |
jobs: | |
build: | |
name: Build and Submit iOS | |
runs-on: macos-14 | |
steps: | |
- name: Check for EXPO_TOKEN | |
run: > | |
if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then | |
echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" | |
exit 1 | |
fi | |
- name: ⬇️ Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 5 | |
- name: 🔧 Setup Node | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: .nvmrc | |
cache: yarn | |
- name: 🪛 Setup jq | |
uses: dcarbone/install-jq-action@v2 | |
- name: 🔨 Setup EAS | |
uses: expo/expo-github-action@v8 | |
with: | |
expo-version: latest | |
eas-version: latest | |
token: ${{ secrets.EXPO_TOKEN }} | |
- name: ⛏️ Setup EAS local builds | |
run: yarn global add eas-cli-local-build-plugin | |
- name: ⚙️ Install dependencies | |
run: yarn install | |
- uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: '15.3' | |
- name: ☕️ Setup Cocoapods | |
uses: maxim-lobanov/setup-cocoapods@v1 | |
with: | |
version: 1.14.3 | |
- name: 💾 Cache Pods | |
uses: actions/cache@v3 | |
id: pods-cache | |
with: | |
path: ./ios/Pods | |
# We'll use the yarn.lock for our hash since we don't yet have a Podfile.lock. Pod versions will not | |
# change unless the yarn version changes as well. | |
key: ${{ runner.os }}-pods-${{ hashFiles('yarn.lock') }} | |
- name: 🔤 Compile translations | |
run: yarn intl:build | |
- name: ✏️ Write environment variables | |
run: | | |
echo "${{ secrets.ENV_TOKEN }}" > .env | |
echo "EXPO_PUBLIC_BUNDLE_IDENTIFIER=$(git rev-parse --short HEAD)" >> .env | |
echo "EXPO_PUBLIC_BUNDLE_DATE=$(date -u +"%y%m%d%H")" >> .env | |
echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json | |
- name: 🏗️ EAS Build | |
run: yarn use-build-number-with-bump eas build -p ios --profile ${{ inputs.profile || 'testflight' }} --local --output build.ipa --non-interactive | |
- name: 🚀 Deploy | |
run: eas submit -p ios --non-interactive --path build.ipa | |
- name: 📚 Get version from package.json | |
id: get-build-info | |
run: bash scripts/setGitHubOutput.sh | |
- name: 🔔 Notify Slack of Production Build | |
if: ${{ inputs.profile == 'production' }} | |
uses: slackapi/[email protected] | |
with: | |
payload: | | |
{ | |
"text": "iOS production build for App Store submission is ready!\n```Artifact: Check TestFlight to know when it is available\nVersion Number: ${{ steps.get-build-info.outputs.PACKAGE_VERSION }}\nBuild Number: ${{ steps.get-build-info.outputs.BSKY_IOS_BUILD_NUMBER }}```" | |
} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }} | |
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK | |
- name: ⬇️ Restore Cache | |
id: get-base-commit | |
uses: actions/cache@v4 | |
if: ${{ inputs.profile == 'testflight' }} | |
with: | |
path: most-recent-testflight-commit.txt | |
key: most-recent-testflight-commit | |
- name: ✏️ Write commit hash to cache | |
if: ${{ inputs.profile == 'testflight' }} | |
run: echo ${{ github.sha }} > most-recent-testflight-commit.txt |