dotune 0.3.1

A cross-platform dotfile manager configured with Lua
name: Publish to crates.io

on:
  push:
    branches: [main]

jobs:
  publish:
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install mise
        uses: jdx/mise-action@v4

      - name: Check version tag
        id: version
        shell: bash
        run: |
          version=$(cargo metadata --no-deps --format-version 1 --locked | jq -r '.packages[0].version')
          tag="v$version"
          if git show-ref --verify --quiet "refs/tags/$tag"; then
            echo "$tag is already released."
          else
            echo "tag=$tag" >> "$GITHUB_OUTPUT"
          fi

      - name: Prepare Rust cache
        if: steps.version.outputs.tag != ''
        uses: Swatinem/rust-cache@v2

      - name: Publish and tag
        if: steps.version.outputs.tag != ''
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
          RELEASE_TAG: ${{ steps.version.outputs.tag }}
        shell: bash
        run: |
          mise run publish
          git tag "$RELEASE_TAG"
          git push origin "refs/tags/$RELEASE_TAG"