efmt 0.21.0

Erlang code formatter
Documentation
name: Release

on:
  push:
    tags:
      - '*'

jobs:
  github-release-draft:
    name: 'Create GitHub Release Draft'
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.get_version.outputs.VERSION }}
      upload-url: ${{ steps.create-release.outputs.upload_url }}
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6

      - name: Get the version
        id: get_version
        run: echo "VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT

      - name: Create Release Draft
        id: create-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh release create ${{ steps.get_version.outputs.VERSION }} \
            --generate-notes \
            --draft \
            --title "v${{ steps.get_version.outputs.VERSION }}"
          echo "upload_url=https://uploads.github.com/repos/${{ github.repository }}/releases/latest/assets" >> $GITHUB_OUTPUT

  linux-binary:
    name: 'Upload Binary for Linux'
    runs-on: ubuntu-latest
    needs: github-release-draft
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6

      - name: Install dependent packages
        run: sudo apt install -y musl-tools

      - run: rustup update stable
      - run: rustup target add x86_64-unknown-linux-musl
      - run: cargo build --release --target=x86_64-unknown-linux-musl

      - name: Upload Release Asset
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          mv target/x86_64-unknown-linux-musl/release/efmt efmt-${{ needs.github-release-draft.outputs.version }}.x86_64-unknown-linux-musl
          gh release upload ${{ needs.github-release-draft.outputs.version }} \
            efmt-${{ needs.github-release-draft.outputs.version }}.x86_64-unknown-linux-musl

  macos-binary:
    name: 'Upload Binary for MacOS'
    runs-on: macos-latest
    needs: github-release-draft
    strategy:
      matrix:
        target: ["x86_64-apple-darwin", "aarch64-apple-darwin"]
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6

      - run: rustup update stable
      - run: rustup target add ${{ matrix.target }}
      - run: cargo build --release --target=${{ matrix.target }}

      - name: Upload Release Asset
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          mv target/${{ matrix.target }}/release/efmt efmt-${{ needs.github-release-draft.outputs.version }}.${{ matrix.target }}
          gh release upload ${{ needs.github-release-draft.outputs.version }} \
            efmt-${{ needs.github-release-draft.outputs.version }}.${{ matrix.target }}