Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions .github/workflows/build-natives.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: Build Native Libraries

on:
workflow_call:
workflow_dispatch:

jobs:
build:
name: ${{ matrix.target }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: macos-latest
target: aarch64-apple-darwin
resource_dir: darwin-aarch64
lib: libnucleus_rodio.dylib
- os: macos-15-intel
target: x86_64-apple-darwin
resource_dir: darwin-x64
lib: libnucleus_rodio.dylib
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
resource_dir: linux-x64
lib: libnucleus_rodio.so
- os: ubuntu-24.04-arm
target: aarch64-unknown-linux-gnu
resource_dir: linux-aarch64
lib: libnucleus_rodio.so
- os: windows-latest
target: x86_64-pc-windows-msvc
resource_dir: win32-x64
lib: nucleus_rodio.dll
- os: windows-11-arm
target: aarch64-pc-windows-msvc
resource_dir: win32-aarch64
lib: nucleus_rodio.dll
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Linux audio dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends libasound2-dev pkg-config

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Build nucleus_rodio
working-directory: rodio/src/main/native
run: cargo build --release --target ${{ matrix.target }}

- name: Stage native into resources
shell: bash
run: |
mkdir -p "rodio/src/main/resources/nucleus/native/${{ matrix.resource_dir }}"
cp "rodio/src/main/native/target/${{ matrix.target }}/release/${{ matrix.lib }}" \
"rodio/src/main/resources/nucleus/native/${{ matrix.resource_dir }}/${{ matrix.lib }}"
ls -lh "rodio/src/main/resources/nucleus/native/${{ matrix.resource_dir }}/${{ matrix.lib }}"

- name: Upload native library
uses: actions/upload-artifact@v4
with:
name: native-${{ matrix.resource_dir }}
path: rodio/src/main/resources/nucleus/native/${{ matrix.resource_dir }}/${{ matrix.lib }}
retention-days: 1
44 changes: 44 additions & 0 deletions .github/workflows/pre-merge.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Pre-merge smoke

on:
pull_request:
branches: [main]

jobs:
smoke:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Build the host native only (the per-platform build scripts handle
# cross-arch in CI via build-natives.yaml). compileKotlin + the sample
# JVM target is enough to catch Kotlin/JNI wiring regressions.
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install Linux audio dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends libasound2-dev pkg-config

- name: Setup Rust
uses: dtolnay/rust-toolchain@stable

- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3

- name: Make Gradle wrapper executable
if: runner.os != 'Windows'
run: chmod +x gradlew

- name: Compile Kotlin (builds host native via processResources)
run: ./gradlew :rodio:compileKotlin --no-configuration-cache
Loading
Loading