name: CI

on:
  pull_request:
  push:
    branches: master

jobs:
  ci-check:
    runs-on: ubuntu-22.04
    name: JavaScript tests
    steps:
      - uses: actions/checkout@v3
      - name: Set Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - uses: actions/cache@v3
        with:
          path: 'node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn
      - run: yarn ci:check
      - name: Gradle Wrapper Validation
        uses: gradle/wrapper-validation-action@v1.0.6
      - name: Check docs build
        run: cd docs-website && yarn install && cd .. && yarn docs:build
  ios:
    runs-on: macos-11
    name: iOS tests
    steps:
      - uses: actions/checkout@v3
      - name: Set Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - name: Set Xcode version
        uses: maxim-lobanov/setup-xcode@v1.2.1
        with:
          xcode-version: 13.2.1
      - name: ccache
        uses: hendrikmuhs/ccache-action@v1
      - name: cache node_modules
        uses: actions/cache@v3
        with:
          path: 'node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn
      - name: cache Pods
        uses: actions/cache@v3
        id: pods-cache
        with:
          path: native/iosTest/Pods
          key: ${{ runner.os }}-pods-cache-${{ hashFiles('**/Podfile.lock') }}
      - run: bundle install
      - name: 'pod install'
        if: true # steps.pods-cache.outputs.cache-hit != 'true'
        run: yarn cocoapods
      - run: yarn test:ios
      - run: yarn swiftlint
  android:
    # https://github.com/ReactiveCircus/android-emulator-runner/issues/46
    runs-on: macos-11
    name: Android tests
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-java@v3
        with:
          distribution: 'adopt'
          java-version: '11'
      - name: Set Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - uses: actions/cache@v3
        with:
          path: 'node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn
      - run: yarn dev:native &
      # See: https://github.com/android/compose-samples/actions/runs/27015993/workflow for ideas for caching
      - name: run tests
        uses: reactivecircus/android-emulator-runner@v2
        with:
          api-level: 29
          working-directory: ./native/androidTest
          script: ./gradlew connectedAndroidTest
      - run: yarn ktlint
  windows:
    runs-on: windows-2022
    name: Windows tests
    steps:
      - uses: actions/checkout@v3
      - name: Set Node.js version
        uses: actions/setup-node@v3
        with:
          node-version: 18.x
      - uses: actions/cache@v3
        with:
          path: 'node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
      - run: yarn --network-timeout 100000
      # FIXME: concurrently seems broken on windows
      # - run: yarn ci
      - run: yarn test
      - run: yarn eslint
      - run: yarn flow
      # FIXME: TS broken on Windows?
      # - run: yarn test:typescript
      # Build WatermelonTester and run in background
      - run: yarn test:windows
      # Give it some time to bundle
      - run: sleep 90
      # Start E2E runner to capture integration test results
      - run: cd native/windowsE2E && yarn
      - run: yarn test:windows:ci
