name: Semantic Release

on:
  push:
    branches: [ master]
  workflow_dispatch:

jobs:
  release:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        fetch-depth: 0
        token: ${{ secrets.GITHUB_TOKEN }}

    - name: Setup pnpm
      uses: pnpm/action-setup@v4

    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '22.x'
        cache: 'pnpm'

    - name: Install dependencies
      run: pnpm install --frozen-lockfile

    - name: Install semantic-release dependencies
      run: |
        pnpm add -wD \
          semantic-release \
          @semantic-release/changelog \
          @semantic-release/git \
          @semantic-release/github \
          @semantic-release/npm \
          @semantic-release/commit-analyzer \
          @semantic-release/release-notes-generator \
          conventional-changelog-conventionalcommits

    - name: Build and test
      run: |
        pnpm build
        pnpm typecheck
        pnpm lint || echo "Linting completed with warnings but continuing release"
        pnpm test:coverage
        
    - name: Create distribution zip
      run: zip -r lib.zip lib/
        
    - name: Semantic Release
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
      run: npx semantic-release