siumai 0.10.3

A unified LLM interface library for Rust
Documentation
name: Release

on:
  push:
    tags:
      - 'v[0-9]+.[0-9]+.[0-9]+' # tag-pattern: 'v{{version}}'

env:
  CARGO_TERM_COLOR: always

jobs:
  # Run tests before publishing
  test:
    name: Test Before Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Cache dependencies
        uses: Swatinem/rust-cache@v2

      - name: Run tests
        run: cargo test --all-features

      - name: Run clippy
        run: cargo clippy --all-features -- -D warnings

  # Publish to crates.io
  publish:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    needs: test
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Cache dependencies
        uses: Swatinem/rust-cache@v2

      - name: Publish to crates.io
        run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }}

  # Create GitHub release
  github-release:
    name: Create GitHub Release
    runs-on: ubuntu-latest
    needs: [test, publish]
    permissions:
      contents: write        # required for creating a release
    steps:
      - name: Checkout source
        uses: actions/checkout@v4

      # Extract the release notes for the current version from CHANGELOG.md
      - name: Extract release notes
        id: notes
        uses: ffurrer2/extract-release-notes@v2
        # No inputs needed: the action looks for the section that follows
        # "## [Unreleased]" (Keep a Changelog convention)

      # Create the GitHub release with the extracted notes
      - name: Create GitHub release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          RELEASE_NOTES: ${{ steps.notes.outputs.release_notes }}
        run: |
          # Write release notes to temporary file to handle special characters safely
          printf '%s\n' "$RELEASE_NOTES" > /tmp/release_notes.txt
          gh release create "$GITHUB_REF_NAME" \
            --title "$GITHUB_REF_NAME" \
            --notes-file /tmp/release_notes.txt