name: CI

# Triggers the workflow on push or pull request events but only for the master branch
on:
    push:
        branches: [master]
    pull_request:
        branches: [master]

jobs:
    setup:
        runs-on: ubuntu-latest
        strategy:
            matrix:
                node-version: [18.x]

        steps:
            - name: checkout
              uses: actions/checkout@v2

            - name: cache yarn.lock
              uses: actions/cache@v2
              with:
                  path: package-temp-dir
                  key: lock-${{ github.sha }}

            - name: create yarn.lock
              run: yarn generate-lock-entry

            - name: hack for single file
              run: |
                  if [ ! -d "package-temp-dir" ]; then
                    mkdir package-temp-dir
                  fi
                  cp yarn.lock package-temp-dir
            - name: cache node_modules
              id: node_modules_cache_id
              uses: actions/cache@v2
              with:
                  path: node_modules
                  key: node_modules-${{ hashFiles('**/package-temp-dir/yarn.lock') }}

            - name: install
              if: steps.node_modules_cache_id.outputs.cache-hit != 'true'
              run: yarn

    test:
        runs-on: ubuntu-latest
        needs: [setup]
        steps:
            - uses: actions/checkout@v2

            - name: Restore cache from yarn.lock
              uses: actions/cache@v2
              with:
                  path: package-temp-dir
                  key: lock-${{ github.sha }}

            - name: Restore cache from node_modules
              uses: actions/cache@v2
              with:
                  path: node_modules
                  key: node_modules-${{ hashFiles('**/package-temp-dir/yarn.lock') }}
             
            - name: Run Units Test
              run: |
                export NODE_OPTIONS="--max_old_space_size=4096"
                npx jest test/utils
                npx jest test/parser/flinksql
                npx jest test/parser/spark
                npx jest test/parser/generic
                npx jest test/parser/hive
                npx jest test/parser/pgsql
                npx jest test/parser/plsql
    build:
        runs-on: ubuntu-latest
        needs: [setup]
        steps:
            - uses: actions/checkout@v2

            - name: Restore cache from yarn.lock
              uses: actions/cache@v2
              with:
                  path: package-temp-dir
                  key: lock-${{ github.sha }}

            - name: Restore cache from node_modules
              uses: actions/cache@v2
              with:
                  path: node_modules
                  key: node_modules-${{ hashFiles('**/package-temp-dir/yarn.lock') }}

            - name: Run Build
              run: yarn build
