##
# Run tests
##
name: Tests
on:
  pull_request:
  push:

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

jobs:
  test:
    name: Run tests
    runs-on: ubuntu-latest
    steps:
    - name: Check out Git repository
      uses: actions/checkout@v4

    - name: Install Node.js, NPM and Yarn
      uses: actions/setup-node@v4
      with:
        node-version: 22

    - name: Cache node modules
      uses: actions/cache@v4
      id: cache
      with:
        path: node_modules
        key: node-modules-${{ hashFiles('**/package-lock.json') }}

    # supposedly our current cache includes native modules like Realm
    # that have compiled binaries specific to the environment where they were installed
    # which might not be the same as the github actions environment
    # so we need to rebuild them
    - name: Rebuild native modules
      if: steps.cache.outputs.cache-hit == 'true'
      run: npm rebuild

    - name: Install dependencies
      if: steps.cache.outputs.cache-hit != 'true'
      run: npm install

    # Need this for linting Ruby
    - name: Install Ruby and gems
      uses: ruby/setup-ruby@v1
      with:
        bundler-cache: true

    - name: Lint
      run: npm run lint

    - name: Test
      run: npm test

  notify:
    name: Notify Slack
    needs: test
    if: ${{ success() || failure() }}
    runs-on: ubuntu-latest
    steps:
      - uses: iRoachie/slack-github-actions@v2.3.0
        if: env.SLACK_WEBHOOK_URL != null
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_BUILDS_WEBHOOK_URL }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
