name: CI

on: [push]

env:
  NODE_VERSION: 14.x

jobs:
  install:
    runs-on: ubuntu-latest

    steps:
      - name: CI
        uses: actions/checkout@v2
      - name: Use Node ${{ env.NODE_VERSION }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ env.NODE_VERSION }}
      - uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }}
      - name: Install dependencies
        run: yarn install --frozen-lockfile
        env:
          CI: true

  lint:
    runs-on: ubuntu-latest
    needs: [install]

    steps:
      - name: Running lint
        uses: actions/checkout@v2
      - uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }}
      - name: Lint
        run: yarn lint
        env:
          CI: true

  test:
    runs-on: ubuntu-latest
    needs: [install]

    steps:
      - name: Running tests
        uses: actions/checkout@v2
      - uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }}
      - name: Test
        run: yarn test --coverage --reporters=default
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v1.5.2
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
        env:
          CI: true

  build:
    runs-on: ubuntu-latest
    needs: [install]

    steps:
      - name: Build
        uses: actions/checkout@v2
      - uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-${{ env.NODE_VERSION }}-modules-${{ hashFiles('**/yarn.lock') }}
      - name: Build
        run: yarn build
      - name: Release
        uses: cycjimmy/semantic-release-action@v2.7.0
        id: semantic
        with:
          branch: master
          semantic_version: 18.0.0
          extra_plugins: |
            @semantic-release/git
            @semantic-release/changelog
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
