Skip to content

Commit

Permalink
Merge pull request #144 from ircam-ismm/chore/refactor-ci
Browse files Browse the repository at this point in the history
Refactor CI to build binaries using cross-rs
  • Loading branch information
b-ma authored Jan 6, 2025
2 parents 0572bf0 + 719961d commit b76fb8b
Show file tree
Hide file tree
Showing 19 changed files with 325 additions and 502 deletions.
25 changes: 0 additions & 25 deletions .cargo/config.toml

This file was deleted.

9 changes: 3 additions & 6 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,14 @@ root = true

[*]
indent_style = space
indent_size = 4
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.js]
indent_size = 2

[*.mjs]
indent_size = 2
[*.rs]
indent_size = 4

[*.md]
trim_trailing_whitespace = false
142 changes: 0 additions & 142 deletions .github/workflows/build.yml

This file was deleted.

140 changes: 140 additions & 0 deletions .github/workflows/matrix-build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
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:
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: darwin-x64
runner: macos-latest
target: x86_64-apple-darwin
command: cargo

- name: win32-arm64-msvc
runner: windows-latest
target: aarch64-pc-windows-msvc
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: linux-x64-gnu
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
command: cross

- name: linux-arm-gnueabihf
runner: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
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: |
rustup target add ${{ matrix.target }}
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_PREFIX=""
BIN_SUFFIX=""
if [[ "${{ matrix.runner }}" == "windows-latest" ]]; then
BIN_PREFIX=""
BIN_SUFFIX=".dll"
elif [[ "${{ matrix.runner }}" == "macos-latest" ]]; then
BIN_PREFIX="lib"
BIN_SUFFIX=".dylib"
elif [[ "${{ matrix.runner }}" == "ubuntu-latest" ]]; then
BIN_PREFIX="lib"
BIN_SUFFIX=".so"
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

66 changes: 66 additions & 0 deletions .github/workflows/verify-build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# yaml-language-server: $schema=https://json.schemastore.org/github-workflow

name: verify-build
env:
MACOSX_DEPLOYMENT_TARGET: '10.13'
CARGO_TERM_COLOR: always

# read-only repo token, no access to secrets
permissions:
contents: read

# no access to secrets
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
workflow_call: # make the job callable by matrix-build

jobs:
verify-build:
# run on macos-latest which seems to have a soundcard available
runs-on: macos-latest

steps:
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy, rustfmt

- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 22

- name: Check out repository
uses: actions/checkout@v4

- name: Generate Cargo.lock
run: cargo generate-lockfile

# restore cargo cache from previous runs
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
# The cache should not be shared between different workflows and jobs.
shared-key: ${{ github.workflow }}-${{ github.job }}

- name: Install Deps
run: npm install

# check it builds
- name: Build
run: npm run build

# run checks and tests
- name: Clippy
# run: cargo clippy --all-features -- -D warnings
run: cargo clippy --all-targets -- -D warnings
- name: Fmt
run: cargo fmt -- --check --color always
- name: Lint
run: npm run lint
- name: Test
run: npm run test:ci

Loading

0 comments on commit b76fb8b

Please sign in to comment.