name: Build macOS
on:
workflow_call:
inputs:
ref:
required: true
type: string
description: 'Git ref to checkout (tag or branch)'
skip_release:
required: false
type: boolean
default: false
description: 'Skip packaging and uploading artifacts'
jobs:
build:
runs-on: macos-15
steps:
- name: Checkout
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref }}
- name: Get package info
id: pkg
run: |
# Try to get bin name from [[bin]], fallback to [package] name
BIN_NAME=$(grep -A1 '^\[\[bin\]\]' Cargo.toml | grep '^name' | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/' || true)
if [ -z "$BIN_NAME" ]; then
BIN_NAME=$(grep '^name' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')
fi
VERSION="${{ inputs.ref }}"
VERSION="${VERSION#v}"
echo "bin_name=$BIN_NAME" >> $GITHUB_OUTPUT
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-apple-darwin
- name: Build
run: cargo build --profile minimum --target aarch64-apple-darwin
- name: Package tar.gz
if: ${{ !inputs.skip_release }}
run: |
mkdir -p dist
cp target/aarch64-apple-darwin/minimum/${{ steps.pkg.outputs.bin_name }} dist/
cp LICENSE dist/
cd dist
tar -czvf ../${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-macos-aarch64.tar.gz *
- name: Package zip
if: ${{ !inputs.skip_release }}
run: |
cd dist
zip -r ../${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-macos-aarch64.zip *
- name: Upload tar.gz artifact
if: ${{ !inputs.skip_release }}
uses: actions/upload-artifact@v6
with:
name: ${{ steps.pkg.outputs.bin_name }}-macos-aarch64-tar
path: ${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-macos-aarch64.tar.gz
retention-days: 1
- name: Upload zip artifact
if: ${{ !inputs.skip_release }}
uses: actions/upload-artifact@v6
with:
name: ${{ steps.pkg.outputs.bin_name }}-macos-aarch64-zip
path: ${{ steps.pkg.outputs.bin_name }}-v${{ steps.pkg.outputs.version }}-macos-aarch64.zip
retention-days: 1