name: release
on: [push, pull_request]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

permissions:
  contents: write # to be able to publish a GitHub release
  id-token: write # to enable use of OIDC for npm provenance
  issues: write # to be able to comment on released issues
  pull-requests: write # to be able to comment on released pull requests

jobs:
  test:
    name: 🧪 Test
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v5

      - name: ⎔ Setup node
        uses: actions/setup-node@v6
        with:
          node-version: 24

      - name: 📥 Download deps
        uses: bahmutov/npm-install@v1
        with:
          useLockFile: false

      - name: 🧪 Test
        run: npm run test
  typecheck:
    name: 💪 Typecheck
    runs-on: ubuntu-latest
    steps:
      - name: ⬇️ Checkout repo
        uses: actions/checkout@v5

      - name: ⎔ Setup node
        uses: actions/setup-node@v6
        with:
          node-version: 24

      - name: 📥 Download deps
        uses: bahmutov/npm-install@v1
        with:
          useLockFile: false

      - name: 💪 Typecheck
        run: npm run typecheck

  release:
    name: 🚀 Release
    needs: [test, typecheck]
    runs-on: ubuntu-latest
    environment:
      name: production
    if:
      ${{ github.repository == 'epicweb-dev/epicli' &&
      contains('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@v5

      - name: ⎔ Setup node
        uses: actions/setup-node@v6
        with:
          node-version: 24

      - name: 📥 Download deps
        uses: bahmutov/npm-install@v1
        with:
          useLockFile: false

      - name: 🏗️ Build
        run: npm run build

      - name: 🚀 Release
        uses: cycjimmy/semantic-release-action@v5.0.2
        with:
          semantic_version: 25
          branches: |
            [
              '+([0-9])?(.{+([0-9]),x}).x',
              'main',
              'next',
              'next-major',
              {name: 'beta', prerelease: true},
              {name: 'alpha', prerelease: true}
            ]
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_CONFIG_PROVENANCE: true
