name: Publish utilities on release

on:
  push:
    tags: [ 'utils-*.*.*' ]

env:
    BINARIES: "--bin czutil --bin pakutil"

permissions:
  contents: write

jobs:
    build:
        name: Build binaries for Windows and Linux
        runs-on: ubuntu-latest
        steps:
        - name: '📄 Checkout'
          uses: actions/checkout@v4

        - name: '⚙️ Set up Rust environment'
          uses: dtolnay/rust-toolchain@master
          with:
              toolchain: stable
              targets: x86_64-pc-windows-gnu, i686-pc-windows-gnu, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu

        - name: '🔽 Cache Rust dependencies'
          uses: actions/cache@v4
          with:
              path: target
              key: ${{ runner.OS }}-build-${{ hashFiles('**/Cargo.lock') }}
              restore-keys: |
                  ${{ runner.OS }}-build-

        - name: '🔄 Set up additional requirements'
          run: |
            sudo apt-get install -y gcc-mingw-w64
            pip install cargo-zigbuild

        - name: '📦 Package Windows x86_64'
          run: |
              cd ${{github.workspace}}
              cargo build --profile production --target x86_64-pc-windows-gnu $BINARIES
              zip -j lbee-utils_Windows-x86_64.zip target/x86_64-pc-windows-gnu/production/czutil.exe target/x86_64-pc-windows-gnu/production/pakutil.exe
              gh release upload ${{ github.ref_name }} lbee-utils_Windows-x86_64.zip
          env:
              GITHUB_TOKEN: ${{ github.TOKEN }}
          shell: bash

        - name: '📦 Package Windows i686'
          run: |
              cd ${{github.workspace}}
              cargo build --profile production --target i686-pc-windows-gnu $BINARIES
              zip -j lbee-utils_Windows-x86.zip target/i686-pc-windows-gnu/production/czutil.exe target/i686-pc-windows-gnu/production/pakutil.exe
              gh release upload ${{ github.ref_name }} lbee-utils_Windows-x86.zip
          env:
              GITHUB_TOKEN: ${{ github.TOKEN }}
          shell: bash

        - name: '📦 Package Linux x86_64'
          run: |
              cd ${{github.workspace}}
              cargo build --profile production --target x86_64-unknown-linux-gnu $BINARIES
              zip -j lbee-utils_Linux-x86_64.zip target/x86_64-unknown-linux-gnu/production/czutil target/x86_64-unknown-linux-gnu/production/pakutil
              gh release upload ${{ github.ref_name }} lbee-utils_Linux-x86_64.zip
          env:
              GITHUB_TOKEN: ${{ github.TOKEN }}
          shell: bash

        - name: '📦 Package Linux aarch64'
          run: |
              cd ${{github.workspace}}
              cargo zigbuild --profile production --target aarch64-unknown-linux-gnu $BINARIES
              zip -j lbee-utils_Linux-Arm64.zip target/aarch64-unknown-linux-gnu/production/czutil target/aarch64-unknown-linux-gnu/production/pakutil
              gh release upload ${{ github.ref_name }} lbee-utils_Linux-Arm64.zip
          env:
              GITHUB_TOKEN: ${{ github.TOKEN }}
          shell: bash

    build-mac:
        name: Build binaries for MacOS
        runs-on: macos-14
        steps:
        - name: '📄 Checkout'
          uses: actions/checkout@v4

        - name: '⚙️ Set up Rust environment'
          uses: dtolnay/rust-toolchain@master
          with:
              toolchain: stable
              targets: x86_64-apple-darwin, aarch64-apple-darwin

        - name: '🔽 Cache Rust dependencies'
          uses: actions/cache@v4
          with:
              path: target
              key: ${{ runner.OS }}-build-${{ hashFiles('**/Cargo.lock') }}
              restore-keys: |
                  ${{ runner.OS }}-build-

        - name: '🔄 Set up additional requirements'
          run: |
            brew install zig
            cargo install --locked cargo-zigbuild

        - name: '📦 Package MacOS Universal2'
          run: |
              cd ${{github.workspace}}
              cargo zigbuild --manifest-path "utils/Cargo.toml" --profile production --target universal2-apple-darwin $BINARIES
              zip -j lbee-utils_Mac-Universal.zip target/universal2-apple-darwin/production/czutil target/universal2-apple-darwin/production/pakutil
              gh release upload ${{ github.ref_name }} lbee-utils_Mac-Universal.zip
          env:
              GITHUB_TOKEN: ${{ github.TOKEN }}
          shell: bash