name: firebase_app_check

permissions:
  contents: read

on:
  workflow_dispatch:
  pull_request:
    paths:
    - 'FirebaseAppCheck**'
    - '.github/workflows/firebase_app_check.yml'
    - '.github/workflows/common.yml'
    - '.github/workflows/common_cocoapods.yml'
    - '.github/workflows/common_catalyst.yml'
    - '.github/workflows/common_cocoapods_cron.yml'
    - 'Gemfile*'
  schedule:
    # Run every day at 12am (PDT) / 3am (EDT) - cron uses UTC times
    - cron:  '0 7 * * *'

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

jobs:
  spm:
    strategy:
      matrix:
        target: [FirebaseAppCheckUnit, FirebaseAppCheckUnitSwift]
    uses: ./.github/workflows/common.yml
    with:
      target: ${{  matrix.target }}

  catalyst:
    uses: ./.github/workflows/common_catalyst.yml
    with:
      product: FirebaseAppCheck
      target: FirebaseAppCheck-Unit-unit

  pod_lib_lint:
    strategy:
      matrix:
        product: [FirebaseAppCheckInterop, FirebaseAppCheck]
    uses: ./.github/workflows/common_cocoapods.yml
    with:
      product: ${{  matrix.product }}
      buildonly_platforms: macOS

  diagnostics:
    # 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'
    runs-on: macos-15
    strategy:
      matrix:
        diagnostic: [tsan, asan, ubsan]
    steps:
    - uses: actions/checkout@v4
    - uses: mikehardy/buildcache-action@c87cea0ccd718971d6cc39e672c4f26815b6c126
      with:
        cache_key: ${{ matrix.diagnostics }}
    - name: Xcode
      run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer
    - name: Initialize xcodebuild
      run: scripts/setup_spm_tests.sh
    - name: iOS Unit Tests
      run: scripts/third_party/travis/retry.sh ./scripts/build.sh FirebaseAppCheckUnit iOS spm ${{ matrix.diagnostic }}
    - name: Upload raw logs if failed
      if: ${{ failure() }}
      uses: actions/upload-artifact@v4
      with:
        name: failure-xcodebuild-raw-logs
        path: xcodebuild.log

  app_check-cron-only:
    needs: pod_lib_lint
    uses: ./.github/workflows/common_cocoapods_cron.yml
    with:
      product: FirebaseAppCheck
      platforms: '[ "ios" ]'
      flags: '[ "--skip-tests --use-modular-headers" ]'
