diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index b1964f96..31799eac 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -4,6 +4,10 @@ on: - push - workflow_dispatch +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: optimize_ci: runs-on: ubuntu-latest # or whichever runner you use for your CI @@ -93,3 +97,104 @@ jobs: - name: Biome lint run: pnpm run -r "check" + + build_mobile: + name: Build Mobile EAS + needs: optimize_ci + if: needs.optimize_ci.outputs.skip == 'false' + strategy: + matrix: + platform: [ios] # TODO: Add android when we have android builds + profile: [development, preview, production] + runs-on: ${{ matrix.platform == 'ios' && 'macos-latest' || 'ubuntu-latest' }} + + steps: + - name: 🏗 Setup repo + uses: actions/checkout@v3 + + - name: 🏗 Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + + - uses: pnpm/action-setup@v4 + name: 🏗 Install pnpm + with: + run_install: false + + - name: 🏗 Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - uses: actions/cache@v4 + name: 🏗 Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: 🏗 Install homebrew + run: | + if ! command -v brew &> /dev/null; then + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" + else + echo "🤩 Homebrew already installed" + fi + + - name: 🏗 Setup fastlane & cocoapods + run: | + brew install fastlane + brew install cocoapods + + - name: 🏗 For act to work (local testing) + if: ${{ env.ACT == 'true' }} + run: pnpm install -g yarn + + - 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: | + pnpm install -g eas-cli-local-build-plugin + + - name: 📦 Install dependencies + run: pnpm install + + - name: 🔐 Setup Apple certificate + if: ${{ env.ACT != 'true' }} + run: | + sudo security authorizationdb write com.apple.trust-settings.admin allow + security add-trusted-cert -d -r unspecified -k ~/Library/Keychains/login.keychain-db ./AppleWWDRCAG3.cer + + - name: 📱 Prebuild native code + working-directory: apps/mobile + run: pnpm prebuild + + - name: 👷 Build app + working-directory: apps/mobile + env: + NODE_ENV: production + EXPO_USE_METRO_WORKSPACE_ROOT: 0 + EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY: ${{ secrets.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY }} + EXPO_PUBLIC_API_URL: ${{ secrets.EXPO_PUBLIC_API_URL }} + SENTRY_ORG: ${{ secrets.SENTRY_ORG }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ALLOW_FAILURE: true + EXPO_PUBLIC_SENTRY_DSN: ${{ secrets.EXPO_PUBLIC_SENTRY_DSN }} + EXPO_PUBLIC_POSTHOG_API_KEY: ${{ secrets.EXPO_PUBLIC_POSTHOG_API_KEY }} + EXPO_PUBLIC_POSTHOG_HOST: ${{ secrets.EXPO_PUBLIC_POSTHOG_HOST }} + EXPO_PUBLIC_REVENUECAT_PROJECT_IOS_API_KEY: ${{ secrets.EXPO_PUBLIC_REVENUECAT_PROJECT_IOS_API_KEY }} + run: | + eas build \ + --local \ + --non-interactive \ + --output=./app-build \ + --platform=${{ matrix.platform }} \ + --profile=${{ matrix.profile }}