name: Build iOS

on:
  workflow_dispatch:
  push:
    branches:
      - master
    paths:
      - '.github/workflows/build-ios.yml'
      - 'ios/**'
      - '*.podspec'
      - 'examples/bare/ios/**'
  pull_request:
    paths:
      - '.github/workflows/build-ios.yml'
      - 'ios/**'
      - '*.podspec'
      - 'examples/bare/ios/**'

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

      - name: Install node_modules at Root
        uses: ./.github/actions/setup-node
        with:
          working-directory: ./

      - name: Build Library
        working-directory: ./
        run: yarn build

      - name: Install node_modules at Example
        uses: ./.github/actions/setup-node
        with:
          working-directory: examples/bare

      - 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.6.10
          bundler-cache: true

      - name: Restore Pods cache
        uses: actions/cache@v4
        with:
          path: |
            examples/bare/ios/Pods
            ~/Library/Caches/CocoaPods
            ~/.cocoapods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Generate Native Project
        run: pod install

      - name: Install Pods
        run: pod install

      - name: Install xcpretty
        run: gem install xcpretty

      - name: Build App
        run: "set -o pipefail && xcodebuild \
          -derivedDataPath build -UseModernBuildSystem=YES \
          -workspace BareExample.xcworkspace \
          -scheme BareExample \
          -sdk iphonesimulator \
          -configuration Debug \
          -destination 'platform=iOS Simulator,name=iPhone 14' \
          build \
          CODE_SIGNING_ALLOWED=NO | xcpretty"

  build-with-ads:
    name: Build iOS Example App With Ads
    runs-on: macos-latest
    defaults:
      run:
        working-directory: examples/bare/ios
    steps:
      - uses: actions/checkout@v4

      - name: Install node_modules at Root
        uses: ./.github/actions/setup-node
        with:
          working-directory: ./

      - name: Build Library
        working-directory: ./
        run: yarn build

      - name: Install node_modules at Example
        uses: ./.github/actions/setup-node
        with:
          working-directory: examples/bare

      - 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.6.10
          bundler-cache: true

      - name: Restore Pods cache
        uses: actions/cache@v4
        with:
          path: |
            examples/bare/ios/Pods
            ~/Library/Caches/CocoaPods
            ~/.cocoapods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Generate Native Project
        run: export RNV_SAMPLE_ENABLE_ADS=true && pod install

      - name: Install Pods
        run:  export RNV_SAMPLE_ENABLE_ADS=true && pod install

      - name: Install xcpretty
        run: gem install xcpretty

      - name: Build App
        run: "set -o pipefail && export RNV_SAMPLE_ENABLE_ADS=true && xcodebuild \
          -derivedDataPath build -UseModernBuildSystem=YES \
          -workspace BareExample.xcworkspace \
          -scheme BareExample \
          -sdk iphonesimulator \
          -configuration Debug \
          -destination 'platform=iOS Simulator,name=iPhone 14' \
          build \
          CODE_SIGNING_ALLOWED=NO | xcpretty"

  build-with-caching:
    name: Build iOS Example App With Caching
    runs-on: macos-latest
    defaults:
      run:
        working-directory: examples/bare/ios
    steps:
      - uses: actions/checkout@v4

      - name: Install node_modules at Root
        uses: ./.github/actions/setup-node
        with:
          working-directory: ./

      - name: Build Library
        working-directory: ./
        run: yarn build

      - name: Install node_modules at Example
        uses: ./.github/actions/setup-node
        with:
          working-directory: examples/bare

      - 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.6.10
          bundler-cache: true

      - name: Restore Pods cache
        uses: actions/cache@v4
        with:
          path: |
            examples/bare/ios/Pods
            ~/Library/Caches/CocoaPods
            ~/.cocoapods
          key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
          restore-keys: |
            ${{ runner.os }}-pods-

      - name: Generate Native Project
        run: export RNV_SAMPLE_VIDEO_CACHING=true && pod install

      - name: Install Pods
        run: export RNV_SAMPLE_VIDEO_CACHING=true && pod install

      - name: Install xcpretty
        run: gem install xcpretty

      - name: Build App
        run: "set -o pipefail && export RNV_SAMPLE_VIDEO_CACHING=true && xcodebuild \
          -derivedDataPath build -UseModernBuildSystem=YES \
          -workspace BareExample.xcworkspace \
          -scheme BareExample \
          -sdk iphonesimulator \
          -configuration Debug \
          -destination 'platform=iOS Simulator,name=iPhone 14' \
          build \
          CODE_SIGNING_ALLOWED=NO | xcpretty"