odometer 0.6.1

A workspace version management tool that keeps package versions synchronized across projects
Documentation
name: Release

on:
  push:
    tags:
      - "v*.*.*" # Triggers on version tags like v0.1.0, v1.2.3, etc.

env:
  CARGO_TERM_COLOR: always

jobs:
  # Validate release in Docker environment
  validate:
    name: Release Validation
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: TAG_VERSION="${GITHUB_REF#refs/tags/v}" make release-validation

  # Publish to crates.io
  publish:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    needs: validate
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - run: make publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  # Create GitHub release with changelog
  github-release:
    name: Create GitHub Release
    runs-on: ubuntu-latest
    needs: publish
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - name: Extract changelog for this version
        run: |
          TAG_VERSION="${GITHUB_REF#refs/tags/v}"
          if [ -f CHANGELOG.md ]; then
            sed -n "/## \[$TAG_VERSION\]/,/## \[/p" CHANGELOG.md | sed '$d' > release_notes.md
            echo "Release notes for v$TAG_VERSION:" 
            cat release_notes.md
          else
            echo "Release v$TAG_VERSION" > release_notes.md
            echo "" >> release_notes.md
            echo "See the README for detailed information about odometer features." >> release_notes.md
          fi
      - name: Create GitHub Release
        run: |
          TAG_VERSION="${GITHUB_REF#refs/tags/v}"
          gh release create "${{ github.ref_name }}" \
            --title "Release v$TAG_VERSION" \
            --notes-file release_notes.md
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}