name: Build

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
      with:
        fetch-depth: 0
        persist-credentials: false

    - name: Install Node.js
      uses: actions/setup-node@v2
      with:
        node-version: 14.x

    - name: Get Yarn Cache Directory
      id: yarn-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Cache Yarn Cache Directory
      uses: actions/cache@v2
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    - name: Install Dependencies
      run: yarn --frozen-lockfile --prefer-offline

    - name: Lint Source
      run: yarn lint

    - name: Unit Tests
      run: yarn test

    - name: Release
      if: github.ref == 'refs/heads/master'
      env:
        GH_TOKEN: ${{ secrets.GH_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      run: yarn semantic-release
