mpi_cluster_tools 0.1.5

A collection of cluster management commands for HPC environments
name: Build and Release Binaries

on:
    push:
        tags:
            - 'v*'
    workflow_dispatch: {}

permissions:
    contents: write

jobs:
    build:
        name: Build (${{ matrix.os }} - ${{ matrix.arch }})
        runs-on: ${{ matrix.os }}
        strategy:
            fail-fast: false
            matrix:
                include:
                    - os: ubuntu-latest
                      arch: x64
                    - os: macos-latest
                      arch: ${{ runner.arch }}

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

            - name: Install Rust (stable)
              uses: dtolnay/rust-toolchain@stable

            - name: Cache cargo
              uses: Swatinem/rust-cache@v2
              with:
                  cache-targets: true

            - name: Build
              run: cargo build --release --locked

            - name: Prepare artifact
              shell: bash
              run: |
                  set -euxo pipefail
                  BIN_NAME="mct"
                  BIN_PATH="target/release/${BIN_NAME}"
                  test -f "$BIN_PATH"

                  # Strip symbols to reduce size (best-effort across OSes)
                  if command -v strip >/dev/null 2>&1; then
                    strip "$BIN_PATH" || true
                  fi

                  # Normalize names
                  OS_LOWER=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]')
                  ARCH_LOWER=$(echo "${{ runner.arch }}" | tr '[:upper:]' '[:lower:]')
                  TAG="${GITHUB_REF_NAME}"

                  ART_DIR="dist"
                  mkdir -p "$ART_DIR"

                  ARCHIVE_NAME="${BIN_NAME}-${TAG}-${OS_LOWER}-${ARCH_LOWER}.tar.gz"
                  tar -C target/release -czf "$ART_DIR/$ARCHIVE_NAME" "$BIN_NAME"

                  echo "artifact_name=$ARCHIVE_NAME" >> "$GITHUB_ENV"
                  echo "artifact_path=$ART_DIR/$ARCHIVE_NAME" >> "$GITHUB_ENV"

            - name: Upload artifact
              uses: actions/upload-artifact@v4
              with:
                  name: ${{ env.artifact_name }}
                  path: ${{ env.artifact_path }}
                  if-no-files-found: error

            - name: Upload to GitHub Release
              uses: softprops/action-gh-release@v2
              if: startsWith(github.ref, 'refs/tags/')
              with:
                  files: ${{ env.artifact_path }}
                  draft: false
                  prerelease: false
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}