name: Test suite

on:
  push:
    branches:
      - main
  pull_request:

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
# the following are optional jobs and need to be configured according
# to this project's settings:
#
#  lintcode:
#    name: Javascript lint
#    runs-on: ubuntu-latest
#    steps:
#    - name: checkout
#      uses: actions/checkout@v4
#
#    - name: setup node
#      uses: actions/setup-node@v1
#      with:
#        node-version: '12.x'
#
#    - name: cache dependencies
#      uses: actions/cache@v1
#      with:
#        path: ~/.npm
#        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
#        restore-keys: |
#          ${{ runner.os }}-node-
#
#    - run: npm install
#    - run: npm run lint:code
#
#  lintstyle:
#    name: SCSS lint
#    runs-on: ubuntu-latest
#    needs: [lintcode]
#    steps:
#    - name: checkout
#      uses: actions/checkout@v4
#
#    - name: setup node
#      uses: actions/setup-node@v1
#      with:
#        node-version: '12.x'
#
#    - name: cache dependencies
#      uses: actions/cache@v1
#      with:
#        path: ~/.npm
#        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
#        restore-keys: |
#          ${{ runner.os }}-node-
#    - run: npm install
#    - run: npm run lint:style
#
#  lintdocs:
#    name: documentation lint
#    runs-on: ubuntu-latest
#    needs: [lintcode,lintstyle]
#    steps:
#    - name: checkout
#      uses: actions/checkout@v4
#
#    - name: setup node
#      uses: actions/setup-node@v1
#      with:
#        node-version: '12.x'
#
#    - name: cache dependencies
#      uses: actions/cache@v1
#      with:
#        path: ~/.npm
#        key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
#        restore-keys: |
#          ${{ runner.os }}-node-
#
#    - run: npm install
#    - run: npm run lint:markdown

  tests:
    name: Meteor ${{ matrix.meteor }} tests
    runs-on: ubuntu-latest
    steps:

      # CHECKOUTS
      - name: Checkout
        uses: actions/checkout@v4

      # CACHING
      - name: Install Meteor
        id: cache-meteor-install
        uses: actions/cache@v4
        with:
          path: ~/.meteor
          key: v1-meteor-${{ hashFiles('.meteor/versions') }}
          restore-keys: |
                v1-meteor-

      - name: Cache NPM dependencies
        id: cache-meteor-npm
        uses: actions/cache@v4
        with:
          path: ~/.npm
          key: v1-npm-${{ hashFiles('package-lock.json') }}
          restore-keys: |
                v1-npm-

      - name: Cache Meteor build
        id: cache-meteor-build
        uses: actions/cache@v4
        with:
          path: |
            .meteor/local/resolver-result-cache.json
            .meteor/local/plugin-cache
            .meteor/local/isopacks
            .meteor/local/bundler-cache/scanner
          key: v1-meteor_build_cache-${{ github.ref }}-${{ github.sha }}
          restore-keys: |
            v1-meteor_build_cache-

      - name: Setup meteor
        uses: meteorengineer/setup-meteor@v2
        with:
          meteor-release: '2.2'

      - name: Install NPM Dependencies
        run: meteor npm ci

      - name: Run Tests
        run: sh ./test-wekan.sh -cv

      - name: Upload coverage
        uses: actions/upload-artifact@v4
        with:
          name: coverage-folder
          path: .coverage/

  coverage:
    name: Coverage report
    runs-on: ubuntu-latest
    needs: [tests]
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Download coverage
        uses: actions/download-artifact@v4
        with:
          name: coverage-folder
          path: .coverage/


      - name: Coverage Report
        uses: VeryGoodOpenSource/very_good_coverage@v3.0.0
        with:
          path: ".coverage/lcov.info"
          min_coverage: 1 # TODO add tests and increase to 95!
