avz 0.1.2

Blistering-fast Avro CLI tool — a modern replacement for avro-tools and fastavro
Documentation
name: Release

on:
  push:
    tags:
      - "v*"

permissions:
  contents: write

jobs:
  build:
    strategy:
      matrix:
        include:
          - target: aarch64-apple-darwin
            os: macos-latest
            name: avz-aarch64-apple-darwin
          - target: x86_64-apple-darwin
            os: macos-latest
            name: avz-x86_64-apple-darwin
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
            name: avz-x86_64-unknown-linux-gnu
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-latest
            name: avz-aarch64-unknown-linux-gnu

    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Install cross-compilation tools
        if: matrix.target == 'aarch64-unknown-linux-gnu'
        run: |
          sudo apt-get update
          sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

      - name: Build
        env:
          CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
          CC_aarch64_unknown_linux_gnu: aarch64-linux-gnu-gcc
          CXX_aarch64_unknown_linux_gnu: aarch64-linux-gnu-g++
        run: cargo build --release --target ${{ matrix.target }}

      - name: Package tarball
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          tar czf ../../../${{ matrix.name }}.tar.gz avz
          cd ../../..
          shasum -a 256 ${{ matrix.name }}.tar.gz > ${{ matrix.name }}.tar.gz.sha256

      - name: Build .deb package
        if: contains(matrix.target, 'linux')
        run: |
          cargo install cargo-deb || true
          # Determine arch for deb
          if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then
            DEB_ARCH="arm64"
          else
            DEB_ARCH="amd64"
          fi
          VERSION="${GITHUB_REF_NAME#v}"
          mkdir -p deb/DEBIAN deb/usr/bin
          cp target/${{ matrix.target }}/release/avz deb/usr/bin/
          cat > deb/DEBIAN/control << EOF
          Package: avz
          Version: ${VERSION}
          Section: utils
          Priority: optional
          Architecture: ${DEB_ARCH}
          Maintainer: Arun Manivannan <arun@arunma.com>
          Homepage: https://github.com/arunma/avz
          Description: Blistering-fast Avro CLI tool
           A modern replacement for Java's avro-tools and Python's fastavro.
           Supports local files, glob patterns, and S3 URIs.
          EOF
          # Remove leading spaces from control file
          sed -i 's/^          //' deb/DEBIAN/control
          dpkg-deb --build deb ${{ matrix.name }}.deb
          sha256sum ${{ matrix.name }}.deb > ${{ matrix.name }}.deb.sha256

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: ${{ matrix.name }}
          path: |
            ${{ matrix.name }}.tar.gz
            ${{ matrix.name }}.tar.gz.sha256
            ${{ matrix.name }}.deb
            ${{ matrix.name }}.deb.sha256

  release:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          merge-multiple: true

      - name: Create release
        uses: softprops/action-gh-release@v2
        with:
          files: |
            *.tar.gz
            *.deb
            *.sha256
          generate_release_notes: true

  update-homebrew:
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: avz-aarch64-apple-darwin

      - name: Get SHA256
        id: sha
        run: |
          echo "arm64=$(cat avz-aarch64-apple-darwin.tar.gz.sha256 | awk '{print $1}')" >> $GITHUB_OUTPUT

      - uses: actions/download-artifact@v4
        with:
          name: avz-x86_64-apple-darwin

      - name: Get x86 SHA256
        id: sha_x86
        run: |
          echo "x86_64=$(cat avz-x86_64-apple-darwin.tar.gz.sha256 | awk '{print $1}')" >> $GITHUB_OUTPUT

      - name: Update Homebrew formula
        uses: actions/checkout@v4
        with:
          repository: arunma/homebrew-tap
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
          path: homebrew-tap

      - name: Write formula
        env:
          VERSION: ${{ github.ref_name }}
          SHA_ARM64: ${{ steps.sha.outputs.arm64 }}
          SHA_X86: ${{ steps.sha_x86.outputs.x86_64 }}
        run: |
          VERSION="${VERSION#v}"
          cat > homebrew-tap/Formula/avz.rb << FORMULA
          class Avz < Formula
            desc "Blistering-fast Avro CLI tool — a modern replacement for avro-tools and fastavro"
            homepage "https://github.com/arunma/avz"
            version "${VERSION}"
            license any_of: ["MIT", "Apache-2.0"]

            on_macos do
              if Hardware::CPU.arm?
                url "https://github.com/arunma/avz/releases/download/v${VERSION}/avz-aarch64-apple-darwin.tar.gz"
                sha256 "${SHA_ARM64}"
              else
                url "https://github.com/arunma/avz/releases/download/v${VERSION}/avz-x86_64-apple-darwin.tar.gz"
                sha256 "${SHA_X86}"
              end
            end

            def install
              bin.install "avz"
            end

            test do
              assert_match "avz", shell_output("#{bin}/avz --version")
            end
          end
          FORMULA

      - name: Push formula
        working-directory: homebrew-tap
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add Formula/avz.rb
          git commit -m "Update avz to ${GITHUB_REF_NAME}"
          git push