Files
zosbuilder/components/zinit/.github/workflows/release.yaml

135 lines
4.4 KiB
YAML

on:
push:
# Sequence of patterns matched against refs/tags
tags:
- "v*" # Push events to matching v*, i.e. v1.0, v20.15.10
name: Create Release
jobs:
build:
name: Build and Release
runs-on: ${{ matrix.os }}
permissions:
contents: write
strategy:
fail-fast: false # Continue with other builds if one fails
matrix:
include:
# Linux builds
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
binary_name: zinit-linux-x86_64
# macOS builds
- os: macos-latest
target: x86_64-apple-darwin
binary_name: zinit-macos-x86_64
- os: macos-latest
target: aarch64-apple-darwin
binary_name: zinit-macos-aarch64
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for proper versioning
# Cache Rust dependencies
- name: Cache Rust dependencies
uses: actions/cache@v3
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ matrix.target }}-cargo-
- name: Setup build environment (macOS)
if: matrix.os == 'macos-latest'
run: |
# Install required build tools for macOS
brew install llvm
# For cross-compilation to Apple Silicon when on Intel
if [[ "${{ matrix.target }}" == "aarch64-apple-darwin" ]]; then
rustup target add aarch64-apple-darwin
fi
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.target }}
override: true
profile: minimal # Minimal components for faster installation
- name: Install MUSL tools (Linux)
if: matrix.os == 'ubuntu-latest' && contains(matrix.target, 'musl')
run: |
sudo apt-get update
sudo apt-get install -y musl-tools musl-dev
- name: Build release
env:
CC: ${{ matrix.os == 'macos-latest' && 'clang' || '' }}
CXX: ${{ matrix.os == 'macos-latest' && 'clang++' || '' }}
MACOSX_DEPLOYMENT_TARGET: '10.12'
run: |
# Add special flags for Apple Silicon builds
if [[ "${{ matrix.target }}" == "aarch64-apple-darwin" ]]; then
export RUSTFLAGS="-C target-feature=+crt-static"
fi
cargo build --release --target=${{ matrix.target }} --verbose
# Verify binary exists
if [ ! -f "target/${{ matrix.target }}/release/zinit" ]; then
echo "::error::Binary not found at target/${{ matrix.target }}/release/zinit"
exit 1
fi
- name: Strip binary (Linux)
if: matrix.os == 'ubuntu-latest'
run: |
strip target/${{ matrix.target }}/release/zinit
- name: Strip binary (macOS)
if: matrix.os == 'macos-latest'
run: |
strip -x target/${{ matrix.target }}/release/zinit || true
- name: Rename binary
run: |
cp target/${{ matrix.target }}/release/zinit ${{ matrix.binary_name }}
# Verify binary was copied successfully
if [ ! -f "${{ matrix.binary_name }}" ]; then
echo "::error::Binary not copied successfully to ${{ matrix.binary_name }}"
exit 1
fi
# Show binary info for debugging
echo "Binary details for ${{ matrix.binary_name }}:"
ls -la ${{ matrix.binary_name }}
file ${{ matrix.binary_name }} || true
# Upload artifacts even if the release step fails
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.binary_name }}
path: ${{ matrix.binary_name }}
retention-days: 5
- name: Upload Release Assets
uses: softprops/action-gh-release@v2
with:
files: ${{ matrix.binary_name }}
name: Release ${{ github.ref_name }}
draft: false
prerelease: false
fail_on_unmatched_files: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}