Skip to content

chore: add Cross.toml #9

chore: add Cross.toml

chore: add Cross.toml #9

Workflow file for this run

name: matrix-build
env:
DEBUG: napi:*
PROJECT_NAME: node-web-audio-api
CARGO_BUILD_NAME: node_web_audio_api
MACOSX_DEPLOYMENT_TARGET: '10.13'
CARGO_TERM_COLOR: always
on:
push:
branches: [chore/refactor-ci]
tags:
- '*'
workflow_dispatch:
jobs:
# verify-build:
# uses: ./.github/workflows/verify-build.yaml
matrix-build:
# needs: verify-build
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
# - name: darwin-arm64
# runner: macos-latest
# target: aarch64-apple-darwin
# command: cargo
# - name: win32-x64-msvc
# runner: windows-latest
# target: x86_64-pc-windows-msvc
# command: cargo
- name: linux-arm64-gnu
runner: ubuntu-latest
target: aarch64-unknown-linux-gnu
command: cross
name: build - ${{ matrix.name }}
steps:
- name: Check out repository
uses: actions/checkout@v4
# node is only used to generate the files, can use host architecture
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
# only install cross (via cargo-binstall) if we need it
- name: Install Cross
if: matrix.command == 'cross'
shell: bash
run: |
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
cargo binstall --no-confirm cross
- name: Generate Cargo.lock
run: cargo generate-lockfile
- name: Install Deps
run: npm install
- name: Re-generate files from IDL
run: npm run generate
- name: Build Binary
shell: bash
run: |
if [[ "${{ matrix.runner }}" == "ubuntu-latest" ]]; then
echo "Build with Jack feature"
${{ matrix.command }} build --locked --features jack --release --target ${{ matrix.target }}
else
${{ matrix.command }} build --locked --release --target ${{ matrix.target }}
fi
- name: Rename Binary
shell: bash
run: |
BIN_SUFFIX=""
if [[ "${{ matrix.runner }}" == "windows-latest" ]]; then
BIN_SUFFIX=".dll"
elif [[ "${{ matrix.runner }}" == "macos-latest" ]]; then
BIN_SUFFIX=".dylib"
elif [[ "${{ matrix.runner }}" == "ubuntu-latest" ]]; then
BIN_SUFFIX=".so"
fi
BIN_PREFIX=""
if [[ "${{ matrix.runner }}" == "windows-latest" ]]; then
BIN_PREFIX=""
elif [[ "${{ matrix.runner }}" == "macos-latest" ]]; then
BIN_PREFIX="lib"
elif [[ "${{ matrix.runner }}" == "ubuntu-latest" ]]; then
BIN_PREFIX="lib"
fi
ls -al target/${{ matrix.target }}/release/
# The built binary output location
BIN_OUTPUT="target/${{ matrix.target }}/release/${BIN_PREFIX}${CARGO_BUILD_NAME}${BIN_SUFFIX}"
# Define a better name for the final binary
BIN_RELEASE="${PROJECT_NAME}.${{ matrix.name }}.node"
# Move the built binary where you want it
mv "${BIN_OUTPUT}" "./${BIN_RELEASE}"
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: bindings-${{ matrix.name }}
path: ${{ env.PROJECT_NAME }}.${{ matrix.name }}.node
if-no-files-found: error