name: auth

on:
  pull_request:
    paths:
    - 'FirebaseAuth**'
    - 'Interop/Auth/Public/*.h'
    - '.github/workflows/auth.yml'
    - 'Gemfile*'
  schedule:
    # Run every day at 1am (PST) - cron uses UTC times
    - cron:  '0 9 * * *'

jobs:

  pod-lib-lint:
    # 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-latest

    strategy:
      matrix:
        target: [ios, tvos, macos, watchos]
    steps:
    - uses: actions/checkout@v2
    - name: Setup Bundler
      run: scripts/setup_bundler.sh
    - name: Build and test
      run: |
        scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseAuth.podspec --platforms=${{ matrix.target }}

  integration-tests:
    # 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'

    env:
      plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
    runs-on: macos-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Bundler
      run: scripts/setup_bundler.sh
    - name: Prereqs
      run: scripts/install_prereqs.sh Auth iOS
    - name: Install Secrets
      run: |
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthCredentials.h.gpg \
          FirebaseAuth/Tests/Sample/ApiTests/AuthCredentials.h "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/Application.plist.gpg \
          FirebaseAuth/Tests/Sample/Sample/Application.plist "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/AuthCredentials.h.gpg \
          FirebaseAuth/Tests/Sample/Sample/AuthCredentials.h "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/GoogleService-Info.plist.gpg \
          FirebaseAuth/Tests/Sample/Sample/GoogleService-Info.plist "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/GoogleService-Info_multi.plist.gpg \
          FirebaseAuth/Tests/Sample/Sample/GoogleService-Info_multi.plist "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/Sample.entitlements.gpg \
          FirebaseAuth/Tests/Sample/Sample/Sample.entitlements "$plist_secret"
        scripts/decrypt_gha_secret.sh scripts/gha-encrypted/AuthSample/Credentials.swift.gpg \
          FirebaseAuth/Tests/Sample/SwiftApiTests/Credentials.swift "$plist_secret"

    - name: BuildAndTest # can be replaced with pod lib lint with CocoaPods 1.10
      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/build.sh Auth iOS)

  spm:
    # 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-latest
    strategy:
      matrix:
        target: [iOS, tvOS, macOS, catalyst]
    steps:
    - uses: actions/checkout@v2
    - name: Initialize xcodebuild
      run: scripts/setup_spm_tests.sh
    - name: Unit Tests
      run: scripts/third_party/travis/retry.sh ./scripts/build.sh AuthUnit ${{ matrix.target }} spm

  catalyst:
    # 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-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Bundler
      run: scripts/setup_bundler.sh
    - name: Setup project and Build for Catalyst
      # Only build the unit tests on Catalyst. Their keychain reliance causes several failures.
      run: scripts/test_catalyst.sh FirebaseAuth build FirebaseAuth-Unit-unit

  quickstart:
    # 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'

    env:
      plist_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
      signin_secret: ${{ secrets.GHASecretsGPGPassphrase1 }}
    runs-on: macOS-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup quickstart
      run: scripts/setup_quickstart.sh authentication
    - name: Install Secret GoogleService-Info.plist
      run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/qs-auth.plist.gpg \
          quickstart-ios/authentication/GoogleService-Info.plist "$plist_secret"
    - name: Install Secret FIREGSignInInfo.h
      run: scripts/decrypt_gha_secret.sh scripts/gha-encrypted/FIREGSignInInfo.h.gpg \
          quickstart-ios/TestUtils/FIREGSignInInfo.h "$signin_secret"
    - name: Test swift quickstart
      run: ([ -z $plist_secret ] || scripts/third_party/travis/retry.sh scripts/test_quickstart.sh Authentication)

  auth-cron-only:
    # Don't run on private repo.
    if: github.event_name == 'schedule' && github.repository == 'Firebase/firebase-ios-sdk'

    runs-on: macos-latest
    strategy:
      matrix:
        # The macos and tvos tests can hang, and watchOS doesn't have tests.
        target: [ios, tvos --skip-tests, macos --skip-tests, watchos --skip-tests]
        flags: [
          '--use-static-frameworks',
          '--use-libraries'
        ]
    needs: pod-lib-lint
    steps:
    - uses: actions/checkout@v2
    - name: Setup Bundler
      run: scripts/setup_bundler.sh
    - name: PodLibLint Auth Cron
      run: scripts/third_party/travis/retry.sh scripts/pod_lib_lint.rb FirebaseAuth.podspec --platforms=${{ matrix.target }} ${{ matrix.flags }}

  podspec-presubmit:
    # Don't run on private repo unless it is a PR.
    if: github.repository == 'Firebase/firebase-ios-sdk' && github.event.pull_request.merged != true && github.event.action != 'closed'
    runs-on: macOS-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup Bundler
      run: scripts/setup_bundler.sh
    - name: Build and test
      run: scripts/third_party/travis/retry.sh pod spec lint FirebaseAuth.podspec --skip-tests --sources='https://github.com/firebase/SpecsTesting','https://github.com/firebase/SpecsDev.git','https://github.com/firebase/SpecsStaging.git','https://cdn.cocoapods.org/'
