region-proxy 1.2.5

A CLI tool to create a SOCKS proxy through AWS EC2 in any region
name: Release

on:
  push:
    tags:
      - "v*"

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  build-macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f559994984270fce7 # stable
        with:
          targets: x86_64-apple-darwin,aarch64-apple-darwin

      - name: Build release (x86_64)
        run: cargo build --release --target x86_64-apple-darwin

      - name: Build release (aarch64)
        run: cargo build --release --target aarch64-apple-darwin

      - name: Create universal binary
        run: |
          lipo -create \
            target/x86_64-apple-darwin/release/region-proxy \
            target/aarch64-apple-darwin/release/region-proxy \
            -output region-proxy

      - name: Create tarball
        env:
          TAG: ${{ github.ref_name }}
        run: |
          tar -czvf "region-proxy-${TAG}-macos.tar.gz" region-proxy

      - name: Calculate SHA256
        id: sha256
        env:
          TAG: ${{ github.ref_name }}
        run: |
          SHA256=$(shasum -a 256 "region-proxy-${TAG}-macos.tar.gz" | cut -d ' ' -f 1)
          echo "sha256=$SHA256" >> $GITHUB_OUTPUT
          echo "SHA256: $SHA256"

      - name: Upload artifacts
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: macos-release
          path: |
            region-proxy-${{ github.ref_name }}-macos.tar.gz

      - name: Save SHA256
        run: echo "${{ steps.sha256.outputs.sha256 }}" > sha256-macos.txt

      - name: Upload SHA256
        uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: sha256-macos
          path: sha256-macos.txt

  release:
    needs: build-macos
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Download macOS artifacts
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: macos-release

      - name: Download SHA256
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: sha256-macos

      - name: Create Release
        uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
        with:
          files: |
            region-proxy-${{ github.ref_name }}-macos.tar.gz
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  publish-crates:
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@4be9e76fd7c4901c61fb841f559994984270fce7 # stable

      - name: Publish to crates.io
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: cargo publish --token $CARGO_REGISTRY_TOKEN

  update-homebrew:
    needs: [build-macos, release]
    runs-on: ubuntu-latest
    steps:
      - name: Download SHA256
        uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
        with:
          name: sha256-macos

      - name: Read SHA256
        id: sha256
        run: |
          SHA256=$(cat sha256-macos.txt)
          echo "sha256=$SHA256" >> $GITHUB_OUTPUT

      - name: Update Homebrew formula
        uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
        with:
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
          repository: M-Igashi/homebrew-tap
          event-type: update-formula
          client-payload: |
            {
              "version": "${{ github.ref_name }}",
              "sha256": "${{ steps.sha256.outputs.sha256 }}"
            }