name: 'Publish to npm'
on:
  release:
    types: [published]
  push:
    tags:
      - '*.*.*-build.*'

jobs:
  release:
    name: Publish stable release
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - name: Set up NodeJS LTS
        uses: actions/setup-node@v6
        with:
          node-version: 'lts/*'
          registry-url: 'https://registry.npmjs.org'
      - name: Update npm package manager
        run: npm install -g npm@latest
      - name: Checkout
        uses: actions/checkout@v6
      - name: Install pnpm
        run: npm install -g pnpm
      - name: Set pnpm store-dir path
        run: mkdir -p ~/.pnpm-store && pnpm config set store-dir ~/.pnpm-store
      - name: Install dependencies
        run: pnpm install --no-lockfile
      - name: Bump package.json version from tag
        uses: TypescriptPrime/bump-packagejson-version@72720c4d073ed0c5b9e9393d7334abfe3fabb47c
      - name: Build
        run: npm run build:stable
      - name : Publish to npm
        run: npm publish --access public
    if: ${{ github.event_name == 'release' && github.event.release.prerelease == false }}
  beta-release:
    name: Publish beta release
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - name: Set up NodeJS LTS
        uses: actions/setup-node@v6
        with:
          node-version: 'lts/*'
          registry-url: 'https://registry.npmjs.org'
      - name: Update npm package manager
        run: npm install -g npm@latest
      - name: Checkout
        uses: actions/checkout@v6
      - name: Install pnpm
        run: npm install -g pnpm
      - name: Set pnpm store-dir path
        run: mkdir -p ~/.pnpm-store && pnpm config set store-dir ~/.pnpm-store
      - name: Install dependencies
        run: pnpm install --no-lockfile
      - name: Bump package.json version from tag
        uses: TypescriptPrime/bump-packagejson-version@72720c4d073ed0c5b9e9393d7334abfe3fabb47c
      - name: Build
        run: npm run build:stable
      - name : Publish to npm
        run: npm publish --tag beta --access public
    if: ${{ github.event_name == 'release' && github.event.release.prerelease == true && contains(github.event.release.tag_name, '-beta.') }}
  build-release:
    name: Build release (no publish)
    runs-on: ubuntu-latest
    permissions:
      contents: read
      id-token: write
    steps:
      - name: Set up NodeJS LTS
        uses: actions/setup-node@v6
        with:
          node-version: 'lts/*'
          registry-url: 'https://registry.npmjs.org'
      - name: Update npm package manager
        run: npm install -g npm@latest
      - name: Checkout
        uses: actions/checkout@v6
      - name: Install pnpm
        run: npm install -g pnpm
      - name: Set pnpm store-dir path
        run: mkdir -p ~/.pnpm-store && pnpm config set store-dir ~/.pnpm-store
      - name: Install dependencies
        run: pnpm install --no-lockfile
      - name: Bump package.json version from tag
        uses: TypescriptPrime/bump-packagejson-version@72720c4d073ed0c5b9e9393d7334abfe3fabb47c
      - name: Build
        run: npm run build:dev
      - name : Publish to npm
        run: npm publish --tag build --access public
    if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') && contains(github.ref, '-build.') }}
  purge:
    name: Purge jsdelivr cache
    runs-on: ubuntu-latest
    permissions:
      contents: read
      actions: read
    steps:
      - name: Set up NodeJS LTS
        uses: actions/setup-node@v6
        with:
          node-version: 'lts/*'
      - name: Purge jsdelivr cache
        uses: FilteringDev/jsdelivr-purge-npm@0bee790e911f359243cd8d98cd87f6bbbc879e80
        with:
          package: '@filteringdev/namulink'
          disttag: 'latest'
    needs: [release]