mutiny-diff 0.1.22

TUI git diff viewer with worktree management
name: Release

on:
  push:
    tags:
      - "v*"

permissions:
  contents: write

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    name: Build ${{ matrix.target }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - target: x86_64-apple-darwin
            os: macos-latest
          - target: aarch64-apple-darwin
            os: macos-latest
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-latest

    steps:
      - uses: actions/checkout@v4

      - run: rustup target add ${{ matrix.target }}

      - uses: Swatinem/rust-cache@v2
        with:
          key: ${{ matrix.target }}

      - name: Install cross
        if: runner.os == 'Linux'
        run: cargo install cross --git https://github.com/cross-rs/cross

      - name: Build (cross)
        if: runner.os == 'Linux'
        run: cross build --release --target ${{ matrix.target }}

      - name: Build (cargo)
        if: runner.os != 'Linux'
        run: cargo build --release --target ${{ matrix.target }}

      - name: Package
        shell: bash
        run: |
          dir="mdiff-${{ matrix.target }}"
          mkdir "$dir"
          cp "target/${{ matrix.target }}/release/mdiff" "$dir/"
          cp LICENSE "$dir/"
          tar czf "$dir.tar.gz" "$dir"

      - name: Upload artifact
        uses: actions/upload-artifact@v4
        with:
          name: mdiff-${{ matrix.target }}
          path: mdiff-${{ matrix.target }}.tar.gz

  release:
    name: Create Release
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/download-artifact@v4
        with:
          path: artifacts

      - name: Collect tarballs
        run: |
          mkdir release
          mv artifacts/mdiff-*/mdiff-*.tar.gz release/

      - name: Generate checksums
        working-directory: release
        run: sha256sum *.tar.gz > sha256sums.txt

      - name: Create GitHub Release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh release create "${{ github.ref_name }}" \
            --title "${{ github.ref_name }}" \
            --generate-notes \
            release/*

  update-homebrew:
    name: Update Homebrew Formula
    needs: release
    runs-on: ubuntu-latest
    steps:
      - name: Get version
        id: version
        run: echo "version=${GITHUB_REF_NAME#v}" >> $GITHUB_OUTPUT

      - name: Download macOS artifacts for SHA
        uses: actions/download-artifact@v4
        with:
          path: artifacts

      - name: Calculate SHAs
        id: sha
        run: |
          echo "arm64_sha=$(sha256sum artifacts/mdiff-aarch64-apple-darwin/mdiff-aarch64-apple-darwin.tar.gz | cut -d' ' -f1)" >> $GITHUB_OUTPUT
          echo "x86_64_sha=$(sha256sum artifacts/mdiff-x86_64-apple-darwin/mdiff-x86_64-apple-darwin.tar.gz | cut -d' ' -f1)" >> $GITHUB_OUTPUT

      - name: Update Homebrew formula
        uses: peter-evans/repository-dispatch@v3
        with:
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
          repository: mutinyhq/homebrew-tap
          event-type: update-formula
          client-payload: |
            {
              "version": "${{ steps.version.outputs.version }}",
              "arm64_sha": "${{ steps.sha.outputs.arm64_sha }}",
              "x86_64_sha": "${{ steps.sha.outputs.x86_64_sha }}"
            }