vastar 0.2.0

HTTP load generator. Fast, zero-copy, raw TCP. Alternative to hey, oha, wrk.
name: Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

env:
  CARGO_TERM_COLOR: always
  FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true

jobs:
  build:
    name: Build ${{ matrix.target }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
            archive: tar.gz
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-latest
            archive: tar.gz
            cross: true
          - target: x86_64-apple-darwin
            os: macos-latest
            archive: tar.gz
          - target: aarch64-apple-darwin
            os: macos-latest
            archive: tar.gz
          - target: x86_64-pc-windows-msvc
            os: windows-latest
            archive: zip

    steps:
      - uses: actions/checkout@v4

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

      - name: Install cross
        if: matrix.cross
        run: cargo install cross --git https://github.com/cross-rs/cross

      - name: Build (cross)
        if: matrix.cross
        run: cross build --release --target ${{ matrix.target }}

      - name: Build (native)
        if: ${{ !matrix.cross }}
        run: cargo build --release --target ${{ matrix.target }}

      - name: Package (unix)
        if: matrix.archive == 'tar.gz'
        run: |
          cd target/${{ matrix.target }}/release
          tar czf ../../../vastar-${{ github.ref_name }}-${{ matrix.target }}.tar.gz vastar
          cd ../../..

      - name: Package (windows)
        if: matrix.archive == 'zip'
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          7z a ../../../vastar-${{ github.ref_name }}-${{ matrix.target }}.zip vastar.exe
          cd ../../..

      - name: Upload to release directly
        uses: softprops/action-gh-release@v2
        with:
          files: vastar-${{ github.ref_name }}-${{ matrix.target }}.*

  checksums:
    name: Generate checksums
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Download release assets
        run: |
          TAG=${{ github.ref_name }}
          gh release download "$TAG" --repo Vastar-AI/vastar --dir assets
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Generate and upload SHA256SUMS
        run: |
          cd assets
          sha256sum vastar-* > SHA256SUMS.txt
          cat SHA256SUMS.txt

      - name: Upload checksums to release
        uses: softprops/action-gh-release@v2
        with:
          files: assets/SHA256SUMS.txt

  homebrew:
    name: Update Homebrew tap
    needs: checksums
    runs-on: ubuntu-latest
    steps:
      - name: Download checksums
        run: |
          TAG=${{ github.ref_name }}
          gh release download "$TAG" --repo Vastar-AI/vastar --pattern "SHA256SUMS.txt"
          cat SHA256SUMS.txt
        env:
          GH_TOKEN: ${{ github.token }}

      - name: Parse checksums
        id: shas
        run: |
          echo "linux=$(grep 'x86_64-unknown-linux-gnu' SHA256SUMS.txt | awk '{print $1}')" >> "$GITHUB_OUTPUT"
          echo "mac_intel=$(grep 'x86_64-apple-darwin' SHA256SUMS.txt | awk '{print $1}')" >> "$GITHUB_OUTPUT"
          echo "mac_arm=$(grep 'aarch64-apple-darwin' SHA256SUMS.txt | awk '{print $1}')" >> "$GITHUB_OUTPUT"

      - name: Checkout homebrew-tap
        uses: actions/checkout@v4
        with:
          repository: Vastar-AI/homebrew-tap
          token: ${{ secrets.TAP_TOKEN }}
          path: homebrew-tap

      - name: Update formula
        run: |
          TAG=${{ github.ref_name }}
          VERSION="${TAG#v}"
          BASE="https://github.com/Vastar-AI/vastar/releases/download/${TAG}"
          cat > homebrew-tap/Formula/vastar.rb << EOF
          class Vastar < Formula
            desc "HTTP load generator. Fast, zero-copy, raw TCP."
            homepage "https://github.com/Vastar-AI/vastar"
            version "${VERSION}"
            license "MIT"

            on_macos do
              if Hardware::CPU.arm?
                url "${BASE}/vastar-${TAG}-aarch64-apple-darwin.tar.gz"
                sha256 "${{ steps.shas.outputs.mac_arm }}"
              else
                url "${BASE}/vastar-${TAG}-x86_64-apple-darwin.tar.gz"
                sha256 "${{ steps.shas.outputs.mac_intel }}"
              end
            end

            on_linux do
              url "${BASE}/vastar-${TAG}-x86_64-unknown-linux-gnu.tar.gz"
              sha256 "${{ steps.shas.outputs.linux }}"
            end

            def install
              bin.install "vastar"
            end

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

      - name: Push formula
        run: |
          cd homebrew-tap
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add Formula/vastar.rb
          git commit -m "vastar ${GITHUB_REF_NAME#v}"
          git push