post-push-party 0.1.6

Push code, earn points, throw a party!
Documentation
name: CD

on:
  push:
    tags:
      - "v*.*.*"

jobs:
  publish:
    name: Build for ${{ matrix.target }}
    runs-on: ${{ matrix.os }}

    permissions:
      contents: write

    strategy:
      fail-fast: false
      matrix:
        include:
          - os: macos-latest
            target: x86_64-apple-darwin
            artifact_name: party

          - os: macos-latest
            target: aarch64-apple-darwin
            artifact_name: party

          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            dependencies: "gcc"
            artifact_name: party

          - os: ubuntu-latest
            target: x86_64-unknown-linux-musl
            cross_arch: true
            artifact_name: party

          - os: windows-latest
            target: x86_64-pc-windows-msvc
            artifact_name: party.exe

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Linux Dependencies
        if: matrix.dependencies
        run: sudo apt-get update && sudo apt-get install -y ${{ matrix.dependencies }}

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

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

      - name: Build
        uses: actions-rs/cargo@v1
        with:
          command: build
          args: --locked --release --target ${{ matrix.target }} --package post-push-party
          use-cross: ${{ matrix.cross_arch }}

      - name: Package
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          case ${{ matrix.target }} in
          *-pc-windows-*)
            7z -y a post-push-party-${{ matrix.target }}.zip party.exe
            sha256sum post-push-party-${{ matrix.target }}.zip > post-push-party-${{ matrix.target }}.sha256
            ;;
          *)
            tar czvf post-push-party-${{ matrix.target }}.tar.gz party
            shasum -a 256 post-push-party-${{ matrix.target }}.tar.gz > post-push-party-${{ matrix.target }}.sha256
            ;;
          esac;

      - name: Release
        uses: softprops/action-gh-release@v2
        with:
          files: target/${{ matrix.target }}/release/post-push-party-*
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

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

      - name: Wait for release assets
        run: sleep 10

      - name: Download SHA256 checksums
        run: |
          curl -sL "https://github.com/drewzemke/post-push-party/releases/download/${{ github.ref_name }}/post-push-party-aarch64-apple-darwin.sha256" -o arm64.sha256
          curl -sL "https://github.com/drewzemke/post-push-party/releases/download/${{ github.ref_name }}/post-push-party-x86_64-apple-darwin.sha256" -o x86_64.sha256
          echo "ARM64_SHA256=$(cut -d ' ' -f 1 arm64.sha256)" >> "$GITHUB_ENV"
          echo "X86_64_SHA256=$(cut -d ' ' -f 1 x86_64.sha256)" >> "$GITHUB_ENV"

      - name: Checkout homebrew-tap repo
        uses: actions/checkout@v4
        with:
          repository: drewzemke/homebrew-tap
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}

      - name: Update formula
        run: |
          sed -i 's/version "[^"]*"/version "${{ steps.version.outputs.version }}"/' Formula/post-push-party.rb
          sed -i '/on_arm do/{n;n;s/sha256 "[^"]*"/sha256 "${{ env.ARM64_SHA256 }}"/}' Formula/post-push-party.rb
          sed -i '/on_intel do/{n;n;s/sha256 "[^"]*"/sha256 "${{ env.X86_64_SHA256 }}"/}' Formula/post-push-party.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/post-push-party.rb
          git commit -m "chore(post-push-party): update to ${{ steps.version.outputs.version }}"
          git push