name: ci
on:
  push:
    branches: main
  pull_request:
jobs:
  setup:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - name: Get Node.js version
        id: nvm
        run: |
          VERSION=$(cat .nvmrc)
          echo ::set-output name=NODE_VERSION::$VERSION
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.nvm.outputs.NODE_VERSION }}
      - name: Get Yarn cache directory
        run: |
          YARN_CACHE_DIR=$(yarn cache dir)
          echo "::set-output name=YARN_CACHE_DIR::$YARN_CACHE_DIR"
        id: yarn-cache-dir
      - name: Get Yarn version
        run: |
          YARN_VERSION=$(yarn --version)
          echo "::set-output name=YARN_VERSION::$YARN_VERSION"
        id: yarn-version
      - name: Cache yarn dependencies
        uses: actions/cache@v2
        with:
          path: ${{ steps.yarn-cache-dir.outputs.YARN_CACHE_DIR }}
          key: yarn-cache-${{ runner.os }}-${{ steps.yarn-version.outputs.YARN_VERSION }}-${{ hashFiles('yarn.lock') }}
      - run: yarn setup
      - uses: actions/cache@v2
        id: restore-build
        with:
          path: ./*
          key: ${{ github.sha }}
  lint:
    runs-on: ubuntu-20.04
    needs: setup
    steps:
      - uses: actions/cache@v2
        id: restore-build
        with:
          path: ./*
          key: ${{ github.sha }}
      - name: Get Node.js version
        id: nvm
        run: |
          VERSION=$(cat .nvmrc)
          echo ::set-output name=NODE_VERSION::$VERSION
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.nvm.outputs.NODE_VERSION }}
      - run: yarn lint
  audit:
    runs-on: ubuntu-20.04
    needs: setup
    steps:
      - uses: actions/cache@v2
        id: restore-build
        with:
          path: ./*
          key: ${{ github.sha }}
      - name: Get Node.js version
        id: nvm
        run: |
          VERSION=$(cat .nvmrc)
          echo ::set-output name=NODE_VERSION::$VERSION
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.nvm.outputs.NODE_VERSION }}
      - run: yarn audit:ci
  tgz-check:
    runs-on: ubuntu-20.04
    needs: setup
    steps:
      - uses: actions/cache@v2
        id: restore-build
        with:
          path: ./*
          key: ${{ github.sha }}
      - name: Get Node.js version
        id: nvm
        run: |
          VERSION=$(cat .nvmrc)
          echo ::set-output name=NODE_VERSION::$VERSION
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.nvm.outputs.NODE_VERSION }}
      - run: yarn test:tgz-check
  test:
    runs-on: ubuntu-20.04
    needs: setup
    steps:
      - uses: actions/cache@v2
        id: restore-build
        with:
          path: ./*
          key: ${{ github.sha }}
      - name: Get Node.js version
        id: nvm
        run: |
          VERSION=$(cat .nvmrc)
          echo ::set-output name=NODE_VERSION::$VERSION
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.nvm.outputs.NODE_VERSION }}
      - run: NODE_OPTIONS=--max_old_space_size=20480 yarn test:unit --forceExit --silent
  all-jobs-pass:
    name: All jobs pass
    runs-on: ubuntu-20.04
    needs: [setup, lint, audit, tgz-check, test]
    steps:
      - run: echo "Great success!"
