name: Test & release

on:
  pull_request:
  push:
    branches:
      - master
      - main

jobs:
  test:
    name: npm test
    runs-on: ubuntu-latest
    timeout-minutes: 10
    strategy:
      matrix:
        node: [16, 18]
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v4

      - name: ⎔ Setup node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node }}
          # cache requires lockfile
          # cache: "npm"

      - name: 📥 Download deps
        run: npm install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: ▶️ Run tests
        run: npm test

  release:
    name: 🚀 Release
    needs: [test]
    runs-on: ubuntu-latest
    if: ${{ !github.event.fork &&
      contains('refs/heads/master,refs/heads/main,refs/heads/beta,refs/heads/next,refs/heads/alpha',
      github.ref) && github.event_name == 'push' }}
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v4

      - name: ⎔ Setup node
        uses: actions/setup-node@v4
        with:
          node-version: 18
          # cache requires lockfile
          # cache: "npm"

      - name: 📥 Download deps
        run: npm install
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

      - name: 🏗 Run build script
        run: npm run --if-present build

      - name: 🚀 Release
        uses: tradeshift/actions-semantic-release@v1
        id: semantic-release
        with:
          branches: |
            [
              'master',
              'main',
              'next',
              {name: 'beta', prerelease: true},
              {name: 'alpha', prerelease: true}
            ]
          registry: https://registry.npmjs.com/
          npm_publish: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NODE_AUTH_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN_PUBLIC }}
