rmcl 0.4.0

A fully featured Minecraft TUI launcher
name: release

on:
  workflow_dispatch:

permissions:
  contents: write

concurrency:
  group: release
  cancel-in-progress: false

jobs:
  checks:
    uses: ./.github/workflows/checks.yml
    with:
      network-tests: true
      ref: master
    secrets:
      curseforge-api-key: ${{ secrets.CURSEFORGE_API_KEY }}

  prepare:
    needs: checks
    runs-on: ubuntu-latest
    outputs:
      release: ${{ steps.version.outputs.release }}
      tag: ${{ steps.version.outputs.tag }}
    steps:
      - uses: actions/checkout@v6
        with:
          ref: master
          fetch-depth: 0
          fetch-tags: true

      - name: check version
        id: version
        shell: bash
        run: |
          set -euo pipefail

          version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "rmcl") | .version')
          mapfile -t versions < <(git tag --list 'v*' --sort=-v:refname | sed -nE 's/^v([0-9]+\.[0-9]+\.[0-9]+([-+][0-9A-Za-z.-]+)?)$/\1/p')
          latest=${versions[0]:-}
          tag="v${version}"
          release=false

          if [[ -z "$latest" ]] || [[ "$version" != "$latest" && "$(printf '%s\n%s\n' "$latest" "$version" | sort -V | tail -n1)" == "$version" ]]; then
            release=true
          fi

          echo "release=$release" >> "$GITHUB_OUTPUT"
          echo "tag=$tag" >> "$GITHUB_OUTPUT"

          if [[ "$release" == true ]]; then
            echo "releasing $tag (latest release: ${latest:-none})"
          else
            echo "Cargo.toml version $version is not newer than latest release v$latest; nothing to release"
          fi

      - name: create tag
        if: steps.version.outputs.release == 'true'
        env:
          TAG: ${{ steps.version.outputs.tag }}
        run: |
          git config user.name github-actions[bot]
          git config user.email 41898282+github-actions[bot]@users.noreply.github.com
          git tag --annotate "$TAG" --message "Release $TAG"
          git push origin "$TAG"

  publish:
    needs: prepare
    if: needs.prepare.outputs.release == 'true'
    uses: ./.github/workflows/build-release.yml
    with:
      tag: ${{ needs.prepare.outputs.tag }}
    secrets: inherit
    permissions:
      contents: write