name: client_app

on:
  workflow_dispatch:
  pull_request:
    paths:
      - ".github/workflows/client_app.yml"
      - "Package.swift"
      - ".swiftpm/*"
      - "*.podspec"
      - "scripts/install_prereqs.sh"
      - "scripts/build.sh"
      - "IntegrationTesting/ClientApp/**"
      - "Gemfile*"
  schedule:
    # Run every day at 1am (PDT) / 4am (EDT) - cron uses UTC times
    - cron: "0 8 * * *"

env:
  FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
  cancel-in-progress: true

jobs:
  client-app-spm:
    if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request'
    strategy:
      matrix:
        #TODO(ncooke3): Add multi-platform support: tvOS, macOS, catalyst
        platform: [iOS]
        scheme: [ClientApp]
        os: [macos-14, macos-15]
        include:
          - os: macos-14
            xcode: Xcode_16.2
          - os: macos-15
            xcode: Xcode_16.4
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
        with:
          cache_key: ${{ matrix.os }}
      - name: Xcode
        run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
      - name: Build Client App - ${{ matrix.platform }}
        run: scripts/third_party/travis/retry.sh ./scripts/build.sh ${{ matrix.scheme }} ${{ matrix.platform }} xcodebuild

  client-app-spm-source-firestore:
      if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request'
      env:
        FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1
        FIREBASE_SOURCE_FIRESTORE: 1
      strategy:
        matrix:
          #TODO(ncooke3): Add multi-platform support: tvOS, macOS, catalyst
          platform: [iOS]
          scheme: [ClientApp]
          os: [macos-14, macos-15]
          include:
            - os: macos-14
              xcode: Xcode_16.2
            - os: macos-15
              xcode: Xcode_16.4
      runs-on: ${{ matrix.os }}
      steps:
        - uses: actions/checkout@v4
        - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
          with:
            cache_key: ${{ matrix.os }}
        - name: Xcode
          run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
        - name: Build Client App - ${{ matrix.platform }}
          run: scripts/third_party/travis/retry.sh ./scripts/build.sh ${{ matrix.scheme }} ${{ matrix.platform }} xcodebuild

  client-app-cocoapods:
    # Don't run on private repo unless it is a PR.
    if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request'
    strategy:
      matrix:
        scheme: [ClientApp-CocoaPods]
        os: [macos-14, macos-15]
        include:
          - os: macos-14
            xcode: Xcode_16.2
          - os: macos-15
            xcode: Xcode_16.4
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4
      - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
        with:
          cache_key: ${{ matrix.os }}
      - uses: ruby/setup-ruby@354a1ad156761f5ee2b7b13fa8e09943a5e8d252 # v1
      - name: Setup Bundler
        run: scripts/setup_bundler.sh
      - name: Xcode
        run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer
      - name: Prereqs
        run: scripts/install_prereqs.sh ClientApp iOS xcodebuild
      - name: Build
        run: scripts/build.sh ${{ matrix.scheme }} iOS xcodebuild
