name: Continuous Integration

on:
    push:
        branches: [ master ]
    pull_request:
        branches: [ master ]
    release:
        types: [ created ]

# See https://docs.npmjs.com/trusted-publishers#step-2-configure-your-cicd-workflow
permissions:
  id-token: write
  contents: read

jobs:
    build:

        runs-on: ubuntu-latest

        steps:
            - name: Checkout code
              uses: actions/checkout@v4

            - name: Setup Node
              uses: actions/setup-node@v4
              with:
                  node-version: 20

            - name: Install dependencies
              run: npm install

            - name: Run test suite
              run: npm run test


    publish:
        needs: build
        runs-on: ubuntu-latest
        if: ${{ github.event_name == 'release' }}

        steps:
            - name: Checkout code
              uses: actions/checkout@v4

            - name: Setup Node
              uses: actions/setup-node@v4
              with:
                  node-version: 20
                  registry-url: https://registry.npmjs.org/

            # Ensure npm 11.5.1 or later is installed
            - name: Update npm
              run: npm install -g npm@latest

            - name: Install dependencies
              run: npm install

            - name: Run test suite
              run: npm run test

            - name: Set new version
              run: npm version --allow-same-version --no-git-tag-version ${{ github.event.release.tag_name }}

            - name: Publish release
              run: npm publish
