# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: "CI/CD"
on:
    push:
        branches-ignore:
            - master
        paths:
            - "packages/nc-gui/**"
            - "scripts/cypress/**"
            - "packages/nocodb/**"
            - ".github/workflows/ci-cd.yml"
    pull_request:
        branches: [develop]
        paths:
            - "packages/nc-gui/**"
            - "scripts/cypress/**"
            - "packages/nocodb/**"
            - ".github/workflows/ci-cd.yml"

jobs:
    cypress-pg-restTableOps-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/cypress/docker-compose-pg.yml up -d
                  spec: "./scripts/cypress/integration/test/pg-restTableOps.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-pg-restViews-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/cypress/docker-compose-pg.yml up -d
                  spec: "./scripts/cypress/integration/test/pg-restViews.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-pg-restRoles-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/cypress/docker-compose-pg.yml up -d
                  spec: "./scripts/cypress/integration/test/pg-restRoles.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-pg-restMisc-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/cypress/docker-compose-pg.yml up -d
                  spec: "./scripts/cypress/integration/test/pg-restMisc.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-restTableOps-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/restTableOps.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-restViews-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/restViews.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restViews-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-restRoles-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/restRoles.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restRoles-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-restMisc-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/restMisc.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: restMisc-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-restTableOps-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-
            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-restTableOps.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-restTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-restViews-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-restViews.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-restViews-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-restRoles-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-restRoles.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-restRoles-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-restMisc-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-restMisc.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-restMisc-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-gqlTableOps-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/gqlTableOps.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: gqlTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-gqlViews-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/gqlViews.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: gqlViews-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-gqlRoles-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/gqlRoles.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: gqlRoles-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-gqlMisc-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:api
                      npm run start:web
                      docker-compose -f ./scripts/docker-compose-cypress.yml up -d
                  spec: "./scripts/cypress/integration/test/gqlMisc.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: gqlMisc-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-gqlTableOps-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-gqlTableOps.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-gqlTableOps-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-gqlViews-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-gqlViews.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-gqlViews-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-gqlRoles-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-gqlRoles.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-gqlRoles-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    cypress-xcdb-gqlMisc-run:
        runs-on: ubuntu-20.04
        steps:
            - name: Setup Node
              uses: actions/setup-node@v1
              with:
                  node-version: 14
            - name: Checkout
              uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Cache node modules
              uses: actions/cache@v2
              env:
                  cache-name: cache-node-modules

              with:
                  # npm cache files are stored in `~/.npm` on Linux/macOS
                  path: ~/.npm
                  key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
                  restore-keys: |
                      ${{ runner.os }}-build-${{ env.cache-name }}-
                      ${{ runner.os }}-build-
                      ${{ runner.os }}-

            - name: Set env
              run: echo "NODE_ENV=test" >> $GITHUB_ENV
            - name: Cypress run
              uses: cypress-io/github-action@v2
              with:
                  start: |
                      npm run start:xcdb-api
                      npm run start:web
                  spec: "./scripts/cypress/integration/test/xcdb-gqlMisc.js"
                  wait-on: "http://localhost:8080, http://localhost:3000/_nuxt/runtime.js"
                  wait-on-timeout: 1200
                  config-file: scripts/cypress/cypress.json
            - name: Upload screenshots
              uses: actions/upload-artifact@v2
              with:
                  name: xcdb-gqlMisc-snapshots
                  path: scripts/cypress/screenshots
                  retention-days: 2
    docker:
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v2
              with:
                  fetch-depth: 0
            - name: Check for update
              run: |
                  echo "CHANGED=$([[ $(lerna ls --since ${{github.event.before}} | grep nocodb) = nocodb ]] && echo 'OK')" >> $GITHUB_ENV

            - name: Test Mysql REST APIs
              if: ${{ env.CHANGED == 'OK' }}
              run: cd ./packages/nocodb/  && docker-compose run xc-test-mysql
            - name: Test Mysql GraphQL APIs
              if: ${{ env.CHANGED == 'OK' }}
              run: cd ./packages/nocodb/  && docker-compose run xc-test-gql-mysql

            #    - name: Test MSSQL REST APIs
            #      run: cd ./packages/nocodb/  && docker-compose run xc-test-mssql
            #    - name: Test MSSQL GraphQL APIs
            #      run: cd ./packages/nocodb/  && docker-compose run xc-test-gql-mssql
            #
            - name: Test PostgreSQL REST APIs
              if: ${{ env.CHANGED == 'OK' }}
              run: cd ./packages/nocodb/  && docker-compose run xc-test-pg
            - name: Test PostgreSQL GraphQL APIs
              if: ${{ env.CHANGED == 'OK' }}
              run: cd ./packages/nocodb/  && docker-compose run xc-test-gql-pg
#
#    - name: Test SQLite3 REST APIs
#      run: cd ./packages/nocodb/  && docker-compose run xc-test-sqlite
#    - name: Test SQLite3 GraphQL APIs
#      run: cd ./packages/nocodb/  && docker-compose run xc-test-gql-sqlite
