Release Build Pipeline #4
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release Build Pipeline | |
on: | |
release: | |
types: [published, created] | |
workflow_dispatch: | |
jobs: | |
build-native: | |
name: Build Native Library (${{ matrix.os }} - ${{ matrix.arch }}) | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
include: | |
- os: ubuntu-24.04 | |
arch: x86_64 | |
OUT_OS_NAME: linux | |
- os: ubuntu-24.04 | |
arch: aarch64 | |
OUT_OS_NAME: linux | |
- os: macos-15 | |
arch: x86_64 | |
OUT_OS_NAME: darwin | |
- os: macos-15 | |
arch: arm64 | |
OUT_OS_NAME: darwin | |
- os: windows-2025 | |
arch: x86_64 | |
OUT_OS_NAME: windows | |
fail-fast: false | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# Add debug info for testing context | |
- name: Show Release Info | |
if: ${{ github.event_name == 'release' }} | |
run: | | |
echo "Release ID: ${{ github.event.release.id }}" | |
echo "Draft Status: ${{ github.event.release.draft }}" | |
echo "Tag: ${{ github.event.release.tag_name }}" | |
# Existing build steps remain unchanged | |
- name: Setup Julia | |
uses: julia-actions/setup-julia@v2 | |
with: | |
version: '1.11' | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '21' | |
- name: Install dependencies | |
shell: bash | |
run: | | |
if [[ "$RUNNER_OS" == "Linux" ]]; then | |
sudo apt-get update | |
sudo apt-get install -y cmake make swig gcc g++ | |
elif [[ "$RUNNER_OS" == "macOS" ]]; then | |
brew update | |
brew install cmake make swig | |
elif [[ "$RUNNER_OS" == "Windows" ]]; then | |
choco install cmake make swig | |
fi | |
- name: Build native library | |
shell: bash | |
run: | | |
cd swig | |
cmake . | |
cmake --build . --config Release | |
cmake --install . --config Release | |
cd .. | |
echo "Library built at: $(pwd)/src/main/resources/native/64/${{ matrix.OUT_OS_NAME }}" | |
# Add artifact retention period based on release type | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: native-${{ matrix.OUT_OS_NAME }}-${{ matrix.arch }} | |
path: src/main/resources/native/64/${{ matrix.OUT_OS_NAME }}/ | |
retention-days: ${{ github.event.release.draft && 7 || 1 }} | |
build-java: | |
name: Build Java Library | |
runs-on: ubuntu-24.04 | |
needs: build-native | |
if: ${{ !cancelled() }} # Run unless previous jobs were cancelled | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: '21' | |
- name: Download native artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: native-artifacts | |
- name: Assemble native libraries | |
shell: bash | |
run: | | |
for artifact in native-artifacts/*; do | |
os_arch=$(basename $artifact) | |
os=$(echo $os_arch | cut -d'-' -f2) | |
mkdir -p "src/main/resources/native/64/$os" | |
cp -R "$artifact"/* "src/main/resources/native/64/$os/" | |
done | |
echo "Assembled native libraries:" | |
find src/main/resources/native -type f | |
- name: Build Java library | |
run: ./gradlew build | |
# Test artifact before final upload | |
- name: Test JAR (Example) | |
run: | | |
java -jar build/libs/*.jar --version | |
# Add your real validation commands here | |
# Conditional artifact upload | |
- name: Upload Java artifact | |
if: ${{ github.event.release.draft || github.event_name == 'workflow_dispatch' }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: java-library | |
path: build/libs/*.jar | |
retention-days: 7 | |
# Only attach to release when published | |
- name: Attach to Release | |
if: ${{ github.event_name == 'release' && !github.event.release.draft }} | |
uses: softprops/action-gh-release@v2 | |
with: | |
files: build/libs/*.jar |