river-data-core 0.10.0

Client, sync runner, and shared types for the river-data platform
Documentation
name: Release

on:
  push:
    tags:
      - "v[0-9]+.[0-9]+.[0-9]+"
      - "[0-9]+.[0-9]+.[0-9]+"

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: Test before publish
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Run tests
        run: cargo test --all-features

  publish:
    name: Publish to crates.io
    needs: test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - name: Check tag matches crate version
        run: |
          crate_version=$(grep -m1 '^version' Cargo.toml | cut -d '"' -f2)
          tag="${GITHUB_REF_NAME#v}"
          if [ "$tag" != "$crate_version" ]; then
            echo "Tag $GITHUB_REF_NAME does not match crate version $crate_version"
            exit 1
          fi
      - name: Check README install snippet matches crate version
        run: |
          crate_version=$(grep -m1 '^version' Cargo.toml | cut -d '"' -f2)
          major_minor="${crate_version%.*}"
          if ! grep -q "river-data-core = { version = \"$major_minor\"" README.md; then
            echo "README install snippet does not pin version $major_minor (crate is $crate_version)"
            exit 1
          fi
      - name: Publish river-data-core
        run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  release:
    name: Create GitHub Release
    needs: publish
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - name: Create GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true