name: Publish

on:
  workflow_dispatch:
  push:
    tags:
      - v*.*.*

jobs:
  publish:
    runs-on: ubuntu-latest

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

      - name: Setup Node.js to publish to npmjs.org
        uses: actions/setup-node@v2
        with:
          node-version: '20.x'
          registry-url: 'https://registry.npmjs.org'

      - name: Install Packages
        run: yarn install --frozen-lockfile

      - name: Build
        run: yarn build

      - name: Test
        run: yarn run test
        env:
          CI: true
          FORCE_COLOR: 1

      - name: Generate Release Body
        run: npx extract-changelog-release > RELEASE_BODY.md

      - name: Publish to NPM
        run: yarn publish dist --non-interactive
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: Create GitHub Release
        uses: ncipollo/release-action@v1
        with:
          bodyFile: "RELEASE_BODY.md"
          token: ${{ secrets.GITHUB_TOKEN }}
