name: Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
      with:
        submodules: 'recursive'

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.10'

    - name: Install uv
      run: |
        curl -LsSf https://astral.sh/uv/install.sh | sh
        echo "$HOME/.cargo/bin" >> $GITHUB_PATH

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        if [ -f skill_seeker_mcp/requirements.txt ]; then pip install -r skill_seeker_mcp/requirements.txt; fi
        # Install package in editable mode for tests (required for src/ layout)
        pip install -e .

    - name: Run tests
      run: |
        python -m pytest tests/ -v

    - name: Extract version from tag
      id: get_version
      run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT

    - name: Create Release Notes
      id: release_notes
      run: |
        if [ -f CHANGELOG.md ]; then
          # Extract changelog for this version
          sed -n "/## \[${{ steps.get_version.outputs.VERSION }}\]/,/## \[/p" CHANGELOG.md | sed '$d' > release_notes.md
        else
          echo "Release ${{ steps.get_version.outputs.VERSION }}" > release_notes.md
        fi

    - name: Check if release exists
      id: check_release
      run: |
        if gh release view ${{ github.ref_name }} > /dev/null 2>&1; then
          echo "exists=true" >> $GITHUB_OUTPUT
        else
          echo "exists=false" >> $GITHUB_OUTPUT
        fi
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Create GitHub Release
      if: steps.check_release.outputs.exists == 'false'
      uses: softprops/action-gh-release@v1
      with:
        body_path: release_notes.md
        draft: false
        prerelease: false
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    - name: Skip Release Creation
      if: steps.check_release.outputs.exists == 'true'
      run: |
        echo "ℹ️  Release ${{ github.ref_name }} already exists, skipping creation"
        echo "View at: https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"

    - name: Build package
      run: |
        uv build

    - name: Publish to PyPI
      env:
        UV_PUBLISH_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
      run: |
        uv publish --token $UV_PUBLISH_TOKEN
