name: E2E CI

on:
  pull_request:
    paths-ignore:
      - 'main/IDEs/**'
      - 'main/webapp/modules/core/langs/**'
      - 'extensions/database/module/langs/**'
      - 'extensions/pc-axis/module/langs/**'
      - 'extensions/phonetic/module/langs/**'
      - 'extensions/wikidata/module/langs/**'
    branches:
      - master
      - '4.0'

permissions: read-all

jobs:
  prepare_e2e_test_matrix:
    runs-on: ubuntu-latest
    outputs:
      matrix: ${{ steps.set-matrix.outputs.matrix }}
    steps:
      - uses: actions/checkout@v5
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - id: set-matrix
        run: npm install --save glob@8.1.0 && node main/tests/cypress/build-test-matrix.js >> $GITHUB_OUTPUT
        env:
          browsers: chrome
  e2e_test:
    name: e2e_test ${{ matrix.specs.group }}
    needs: prepare_e2e_test_matrix
    runs-on: ubuntu-latest
    strategy:
      matrix: ${{fromJSON(needs.prepare_e2e_test_matrix.outputs.matrix)}}
    steps:
      - uses: actions/checkout@v5

      - name: Set up Java 17
        uses: actions/setup-java@v5
        with:
          distribution: 'temurin'
          java-version: 17
          cache: 'maven'

      - name: Build OpenRefine
        run: ./refine build

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Restore Tests dependency cache
        uses: actions/cache@v4
        with:
          path: |
            ~/cache
            ~/.cache
            **/node_modules
            !~/cache/exclude
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn

      - name: Install test dependencies
        run: |
          cd ./main/tests/cypress
          npm i -g yarn
          yarn install

      - name: Test with Cypress on ${{ matrix.browser }}
        run: | 
          echo REFINE_MIN_MEMORY=1400M >> ./refine.ini
          echo REFINE_MEMORY=4096M >> ./refine.ini
          ./refine e2e_tests
        env:
          CYPRESS_BROWSER: ${{ matrix.browser }}
          CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
          CYPRESS_PROJECT_ID: ${{ vars.CYPRESS_PROJECT_ID }}
          CYPRESS_CI_BUILD_ID: '${{ github.run_id }}'
          CYPRESS_SPECS: ${{ matrix.specs.paths }}
          CYPRESS_GROUP: ${{ matrix.specs.group }}
