about summary refs log tree commit diff
path: root/.github/workflows/build-submit-ios.yml
blob: 27351402c38eca88e6a076f100b2eb2e71beb6c0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
---
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 "BITDRIFT_API_KEY=${{ secrets.BITDRIFT_API_KEY }}" >> .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/slack-github-action@v1.25.0
        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