gauth 0.10.2

HTTP Client for Google OAuth2
Documentation
name: Release

on:
  push:
    tags: ["v*"]
  workflow_dispatch:
    inputs:
      version:
        required: true
        description: "Semver version without v prefix (e.g. 0.10.0)"

jobs:
  setup:
    name: Resolve release version
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.resolve.outputs.value }}
    steps:
      - name: Resolve version
        id: resolve
        env:
          INPUT_VERSION: ${{ inputs.version }}
          REF_NAME: ${{ github.ref_name }}
        run: |
          if [ -n "$INPUT_VERSION" ]; then
            VERSION="$INPUT_VERSION"
          else
            VERSION="${REF_NAME#v}"
          fi
          if ! printf '%s' "$VERSION" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.-]+)?$'; then
            echo "::error::Resolved version ($VERSION) is not valid semver"
            exit 1
          fi
          echo "value=$VERSION" >> "$GITHUB_OUTPUT"

  publish:
    name: Publish to crates.io
    needs: setup
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          ref: v${{ needs.setup.outputs.version }}

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

      - uses: Swatinem/rust-cache@v2

      - name: Verify Cargo.toml matches tag
        run: |
          manifest_version=$(grep -m1 '^version' Cargo.toml | sed 's/.*"\(.*\)".*/\1/')
          expected="${{ needs.setup.outputs.version }}"
          if [ "$manifest_version" != "$expected" ]; then
            echo "::error::Cargo.toml version ($manifest_version) does not match release version ($expected)"
            exit 1
          fi

      - name: Publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: cargo publish --all-features