pgfmt 2.1.5

A PostgreSQL SQL formatter
name: Release

on:
  release:
    types: [created]

permissions:
  contents: write

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

    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v5

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

      - name: Install cross (Linux aarch64)
        if: matrix.target == 'aarch64-unknown-linux-gnu'
        run: cargo install cross --git https://github.com/cross-rs/cross

      - name: Build (native)
        if: matrix.target != 'aarch64-unknown-linux-gnu'
        run: cargo build --release --target ${{ matrix.target }}

      - name: Build (cross)
        if: matrix.target == 'aarch64-unknown-linux-gnu'
        run: cross build --release --target ${{ matrix.target }}

      - name: Package binary
        run: |
          cd target/${{ matrix.target }}/release
          tar czf ../../../pgfmt-${{ matrix.target }}.tar.gz pgfmt
          cd ../../..

      - name: Upload release asset
        uses: softprops/action-gh-release@v2
        with:
          files: pgfmt-${{ matrix.target }}.tar.gz

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

      - name: Download release assets and compute checksums
        id: checksums
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          for target in aarch64-apple-darwin x86_64-apple-darwin aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu; do
            url="https://github.com/gmr/pgfmt/releases/download/${GITHUB_REF_NAME}/pgfmt-${target}.tar.gz"
            curl -fsSL -o "pgfmt-${target}.tar.gz" "$url"
            sha=$(sha256sum "pgfmt-${target}.tar.gz" | cut -d' ' -f1)
            key=$(echo "${target}" | tr '-' '_')
            echo "${key}=${sha}" >> "$GITHUB_OUTPUT"
          done

      - name: Checkout homebrew tap
        uses: actions/checkout@v5
        with:
          repository: gmr/homebrew-pgfmt
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}

      - name: Update formula
        env:
          VERSION: ${{ steps.version.outputs.version }}
          SHA_AARCH64_APPLE: ${{ steps.checksums.outputs.aarch64_apple_darwin }}
          SHA_X86_64_APPLE: ${{ steps.checksums.outputs.x86_64_apple_darwin }}
          SHA_AARCH64_LINUX: ${{ steps.checksums.outputs.aarch64_unknown_linux_gnu }}
          SHA_X86_64_LINUX: ${{ steps.checksums.outputs.x86_64_unknown_linux_gnu }}
        run: |
          sed -i "s/version \".*\"/version \"${VERSION}\"/" Formula/pgfmt.rb
          sed -i "s|download/v[^/]*/|download/v${VERSION}/|g" Formula/pgfmt.rb
          sed -i "/aarch64-apple-darwin/{n;s/sha256 \".*\"/sha256 \"${SHA_AARCH64_APPLE}\"/;}" Formula/pgfmt.rb
          sed -i "/x86_64-apple-darwin/{n;s/sha256 \".*\"/sha256 \"${SHA_X86_64_APPLE}\"/;}" Formula/pgfmt.rb
          sed -i "/aarch64-unknown-linux-gnu/{n;s/sha256 \".*\"/sha256 \"${SHA_AARCH64_LINUX}\"/;}" Formula/pgfmt.rb
          sed -i "/x86_64-unknown-linux-gnu/{n;s/sha256 \".*\"/sha256 \"${SHA_X86_64_LINUX}\"/;}" Formula/pgfmt.rb

      - name: Commit and push
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "github-actions[bot]@users.noreply.github.com"
          git add Formula/pgfmt.rb
          git commit -m "Update pgfmt to ${{ steps.version.outputs.version }}"
          git push