name: Build iOS

on:
  push:
    branches:
      - main
    paths:
      - ".github/workflows/build-ios.yml"
      - "package/ios/**"
      - "package/*.podspec"
      - "example/ios/**"
  pull_request:
    paths:
      - ".github/workflows/build-ios.yml"
      - "package/ios/**"
      - "package/*.podspec"
      - "example/ios/**"

jobs:
  build:
    name: Build iOS Example App
    runs-on: macOS-latest
    defaults:
      run:
        working-directory: example/ios
    steps:
      - uses: actions/checkout@v4

      - uses: oven-sh/setup-bun@v2

      - name: Install npm dependencies (bun)
        run: cd ../../ && bun install

      - name: Restore buildcache
        uses: mikehardy/buildcache-action@v2
        continue-on-error: true

      - name: Setup Ruby (bundle)
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7.2
          bundler-cache: true
          working-directory: example/ios

      - name: Restore Pods cache
        uses: actions/cache@v4
        with:
          path: example/ios/Pods
          key: ${{ runner.os }}-with-fps-pods-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-with-fps-pods-
      - name: Install Pods
        run: pod install
      - name: Install xcpretty
        run: gem install xcpretty
      - name: Build App
        run: "set -o pipefail && xcodebuild \
          CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \
          -derivedDataPath build -UseModernBuildSystem=YES \
          -workspace VisionCameraExample.xcworkspace \
          -scheme VisionCameraExample \
          -sdk iphonesimulator \
          -configuration Debug \
          -destination 'platform=iOS Simulator,name=iPhone 15' \
          build \
          CODE_SIGNING_ALLOWED=NO | xcpretty"

  build-no-frame-processors:
    name: Build iOS Example App without Frame Processors
    runs-on: macOS-latest
    defaults:
      run:
        working-directory: example/ios
    steps:
      - uses: actions/checkout@v4

      - uses: oven-sh/setup-bun@v2

      - name: Install npm dependencies (bun)
        run: cd ../../ && bun install
      - name: Remove worklets, skia and reanimated
        run: |
          bun remove react-native-worklets-core @shopify/react-native-skia react-native-reanimated --cwd ..
          bun remove react-native-worklets-core @shopify/react-native-skia react-native-reanimated --cwd ../../package

      - name: Restore buildcache
        uses: mikehardy/buildcache-action@v2
        continue-on-error: true

      - name: Setup Ruby (bundle)
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 2.7.2
          bundler-cache: true
          working-directory: example/ios

      - name: Restore Pods cache
        uses: actions/cache@v4
        with:
          path: example/ios/Pods
          key: ${{ runner.os }}-without-fps-pods-${{ hashFiles('**/Podfile.lock', '**/Gemfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-without-fps-pods-
      - name: Install Pods
        run: pod install
      - name: Install xcpretty
        run: gem install xcpretty
      - name: Build App
        run: "set -o pipefail && xcodebuild \
          CC=clang CPLUSPLUS=clang++ LD=clang LDPLUSPLUS=clang++ \
          -derivedDataPath build -UseModernBuildSystem=YES \
          -workspace VisionCameraExample.xcworkspace \
          -scheme VisionCameraExample \
          -sdk iphonesimulator \
          -configuration Debug \
          -destination 'platform=iOS Simulator,name=iPhone 15' \
          build \
          CODE_SIGNING_ALLOWED=NO | xcpretty"
