name: Release

on:
  push:
    tags:
      - 'v*'
  workflow_dispatch:
    inputs:
      version:
        description: 'Release version (e.g., v1.0.0)'
        required: true

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          version: "latest"

      - name: Set up Python
        run: uv python install 3.11

      - name: Install dependencies
        run: uv sync --extra test

      - name: Run full test suite
        run: uv run pytest tests/ -v --cov=src/embeddingbuddy --cov-report=term-missing

  build-and-release:
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install uv
        uses: astral-sh/setup-uv@v3
        with:
          version: "latest"

      - name: Set up Python
        run: uv python install 3.11

      - name: Install dependencies
        run: uv sync

      - name: Build package
        run: uv build

      - name: Create release notes
        run: |
          echo "# Release Notes" > release-notes.md
          echo "" >> release-notes.md
          echo "## What's New" >> release-notes.md
          echo "" >> release-notes.md
          echo "- Modular architecture with improved testability" >> release-notes.md
          echo "- Comprehensive test suite" >> release-notes.md
          echo "- Enhanced documentation" >> release-notes.md
          echo "- Security scanning and dependency management" >> release-notes.md
          echo "" >> release-notes.md
          echo "## Installation" >> release-notes.md
          echo "" >> release-notes.md
          echo '```bash' >> release-notes.md
          echo 'pip install embeddingbuddy' >> release-notes.md
          echo 'embeddingbuddy serve' >> release-notes.md
          echo '```' >> release-notes.md

      - name: Create Release
        uses: akkuman/gitea-release-action@v1
        env:
          NODE_OPTIONS: '--experimental-fetch'
        with:
          token: ${{ secrets.GITEA_TOKEN }}
          tag_name: ${{ github.ref_name || github.event.inputs.version }}
          release_name: Release ${{ github.ref_name || github.event.inputs.version }}
          body_path: release-notes.md
          draft: false
          prerelease: false
          files: |-
            dist/*