name: Build, check, release

on:
  pull_request:
    types:
      - opened
      - synchronize
  push:
    branches:
      - main

jobs:

  test-build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
        
      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Check code syntax
        run: yarn lint

      - name: Run tests
        run: yarn test

  release:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    needs: test-build

    permissions:
      contents: write

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Update tags
        run: git fetch --all --tags

      - name: Check Release Version
        uses: thebongy/version-check@v1
        id: version_check
        with:
          file: package.json

      - name: Tag
        env:
          TAG: ${{steps.version_check.outputs.releaseVersion}}
        run: |
          git config user.name ${{ github.event.pusher.email }}
          git config user.email ${{ github.event.pusher.email }}
          git tag -a $TAG -m "Release $TAG"
          git push origin $TAG

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16.x
          registry-url: 'https://registry.npmjs.org'

      - name: Publish NPM package
        run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
    