name: Release

on:
  workflow_dispatch:

env:
  CARGO_TERM_COLOR: always

jobs:
  #todo: cargo test beforehand

  bump:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
    - uses: actions/checkout@v4
    - name: Config git
      run: git config user.name github_actions && git config user.email nil
    - name: Install cargo-workspaces
      run: cargo install cargo-workspaces
    - name: BUMP!
      run: cargo ws version patch -y

  binary:
    runs-on: ubuntu-latest
    needs: bump
    steps:
      - uses: actions/checkout@v4
      - name: Release binary
        uses: rust-build/rust-build.action@v1.4.5
  
  publish:
    runs-on: ubuntu-latest
    needs: bump
    permissions:
      id-token: write
    steps:
    - uses: actions/checkout@v4
    - name: Get latest commit
      run: git pull
    - name: Authenticate to crates.io
      uses: rust-lang/crates-io-auth-action@v1.0.5
      id: auth
    - name: Publish to crates.io
      run: cargo publish --workspace
      env:
        CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}