Skip to content
Open
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
245 changes: 91 additions & 154 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,34 +21,36 @@ jobs:
settings:
- host: macos-latest
target: x86_64-apple-darwin
build: yarn build:rs --platform --target x86_64-apple-darwin
build: pnpm build:rs --platform --target x86_64-apple-darwin
- host: windows-latest
build: yarn build:rs --platform
build: pnpm build:rs --platform
target: x86_64-pc-windows-msvc
- host: ubuntu-latest
target: x86_64-unknown-linux-gnu
build: yarn build:rs --platform --target x86_64-unknown-linux-gnu --use-napi-cross
build: pnpm build:rs --platform --target x86_64-unknown-linux-gnu --use-napi-cross
- host: ubuntu-latest
target: x86_64-unknown-linux-musl
build: yarn build:rs --platform --target x86_64-unknown-linux-musl -x
build: pnpm build:rs --platform --target x86_64-unknown-linux-musl -x
- host: macos-latest
target: aarch64-apple-darwin
build: yarn build:rs --platform --target aarch64-apple-darwin
build: pnpm build:rs --platform --target aarch64-apple-darwin
- host: ubuntu-latest
target: aarch64-unknown-linux-gnu
build: yarn build:rs --platform --target aarch64-unknown-linux-gnu -x
build: pnpm build:rs --platform --target aarch64-unknown-linux-gnu -x
- host: ubuntu-latest
target: aarch64-unknown-linux-musl
build: yarn build:rs --platform --target aarch64-unknown-linux-musl -x
name: Build bindings for ${{ matrix.settings.target }} - node@22
build: pnpm build:rs --platform --target aarch64-unknown-linux-musl -x
name: Build - ${{ matrix.settings.target }} - node@22
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/checkout@v6
- name: setup pnpm
uses: pnpm/action-setup@v4
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: 22
cache: pnpm
- name: Install
uses: dtolnay/rust-toolchain@stable
with:
Expand All @@ -65,10 +67,10 @@ jobs:
.cargo-cache
target/
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }}
- uses: goto-bus-stop/setup-zig@v2
- uses: mlugg/setup-zig@v2
if: ${{ contains(matrix.settings.target, 'musl') || contains(matrix.settings.target, 'aarch64') }}
with:
version: 0.13.0
version: 0.15.2
- name: Install cargo-zigbuild
uses: taiki-e/install-action@v2
if: ${{ contains(matrix.settings.target, 'musl') || contains(matrix.settings.target, 'aarch64') }}
Expand All @@ -81,30 +83,35 @@ jobs:
if: ${{ matrix.settings.setup }}
shell: bash
- name: Install dependencies
run: |
corepack enable
yarn set version 4.6.0
yarn install
run: pnpm install
- name: Setup node x86
uses: actions/setup-node@v6
if: matrix.settings.target == 'i686-pc-windows-msvc'
with:
node-version: 22
cache: pnpm
architecture: x86
- name: Build rs
run: ${{ matrix.settings.build }}
shell: bash
- name: Build ts
run: yarn build:ts
shell: bash
run: pnpm build:ts
shell: bash
- name: Upload artifact
uses: actions/upload-artifact@v4
if: matrix.settings.target != 'wasm32-wasi-preview1-threads'
uses: actions/upload-artifact@v5
if: matrix.settings.target != 'wasm32-wasip1-threads'
with:
name: bindings-${{ matrix.settings.target }}
path: 'src/*.node'
if-no-files-found: error
- name: Upload artifact
uses: actions/upload-artifact@v4
if: matrix.settings.target == 'wasm32-wasi-preview1-threads'
uses: actions/upload-artifact@v5
if: matrix.settings.target == 'wasm32-wasip1-threads'
with:
name: bindings-${{ matrix.settings.target }}
path: '*.wasm'
if-no-files-found: error

test-macOS-windows-binding:
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
needs:
Expand All @@ -124,177 +131,107 @@ jobs:
architecture: x64
node:
- 22
- 24
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/checkout@v6
- name: setup pnpm
uses: pnpm/action-setup@v4
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
cache: pnpm
architecture: ${{ matrix.settings.architecture }}
- name: Install dependencies
run: |
corepack enable
yarn set version 4.6.0
yarn install
run: pnpm install
- name: Download artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v6
with:
name: bindings-${{ matrix.settings.target }}
path: src
- name: List packages
run: ls -R .
shell: bash
- name: Test bindings
run: yarn run test
test-linux-x64-gnu-binding:
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node:
- 22
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: corepack enable
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
run: yarn install
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-x86_64-unknown-linux-gnu
path: src
- name: List packages
run: ls -R .
shell: bash
- name: Test bindings
run: docker run --rm -v "$(pwd):/build" -w /build node:${{ matrix.node }}-slim corepack enable && yarn run test
test-linux-x64-musl-binding:
name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }}
run: pnpm test

test-linux-binding:
name: Test ${{ matrix.target }} - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
node:
- 22
runs-on: ubuntu-latest
- '20'
- '22'
runs-on: ${{ contains(matrix.target, 'aarch64') && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v4
- run: corepack enable
- uses: actions/checkout@v6
- name: setup pnpm
uses: pnpm/action-setup@v4
- name: Setup node
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
- name: Install dependencies
cache: pnpm
- name: Output docker params
id: docker
run: |
yarn config set supportedArchitectures.libc "musl"
yarn install
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-x86_64-unknown-linux-musl
path: src
- name: List packages
run: ls -R .
shell: bash
- name: Test bindings
uses: addnab/docker-run-action@v3
with:
image: node:${{ matrix.node }}-alpine
options: '-v ${{ github.workspace }}:/build -w /build'
run: corepack enable && yarn install && yarn run test
test-linux-aarch64-gnu-binding:
name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node:
- 22
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-aarch64-unknown-linux-gnu
path: src
- name: List packages
run: ls -R .
shell: bash
node -e "
if ('${{ matrix.target }}'.startsWith('aarch64')) {
console.log('PLATFORM=linux/arm64')
} else if ('${{ matrix.target }}'.startsWith('armv7')) {
console.log('PLATFORM=linux/arm/v7')
} else {
console.log('PLATFORM=linux/amd64')
}
" >> $GITHUB_OUTPUT
node -e "
if ('${{ matrix.target }}'.endsWith('-musl')) {
console.log('IMAGE=node:${{ matrix.node }}-alpine')
} else {
console.log('IMAGE=node:${{ matrix.node }}-slim')
}
" >> $GITHUB_OUTPUT
echo "PNPM_STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT
# use --force to download the all platform/arch dependencies
- name: Install dependencies
run: |
corepack enable
yarn config set supportedArchitectures.cpu "arm64"
yarn config set supportedArchitectures.libc "glibc"
yarn install
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm64
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- name: Setup and run tests
uses: addnab/docker-run-action@v3
with:
image: node:${{ matrix.node }}-slim
options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build'
run: corepack enable && yarn run test
test-linux-aarch64-musl-binding:
name: Test bindings on aarch64-unknown-linux-musl - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node:
- 22
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
run: pnpm install --force
- name: Download artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v6
with:
name: bindings-aarch64-unknown-linux-musl
name: bindings-${{ matrix.target }}
path: src
- name: List packages
run: ls -R .
shell: bash
- name: Install dependencies
run: |
corepack enable
yarn config set supportedArchitectures.cpu "arm64"
yarn config set supportedArchitectures.libc "musl"
yarn install
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
if: ${{ contains(matrix.target, 'armv7') }}
with:
platforms: arm64
platforms: all
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- name: Setup and run tests
if: ${{ contains(matrix.target, 'armv7') }}
- name: Test bindings
uses: addnab/docker-run-action@v3
with:
image: node:${{ matrix.node }}-alpine
options: '--platform linux/arm64 -v ${{ github.workspace }}:/build -w /build'
run: corepack enable && yarn install && yarn run test
image: ${{ steps.docker.outputs.IMAGE }}
options: -v ${{ steps.docker.outputs.PNPM_STORE_PATH }}:${{ steps.docker.outputs.PNPM_STORE_PATH }} -v ${{ github.workspace }}:${{ github.workspace }} -w ${{ github.workspace }} --platform ${{ steps.docker.outputs.PLATFORM }}
run: npm run test

publish:
name: Publish
runs-on: ubuntu-latest
needs:
- test-macOS-windows-binding
- test-linux-x64-gnu-binding
- test-linux-x64-musl-binding
- test-linux-aarch64-gnu-binding
- test-linux-aarch64-musl-binding
- test-linux-binding
steps:
- uses: googleapis/release-please-action@v4
id: release
Expand All @@ -312,15 +249,15 @@ jobs:
registry-url: https://registry.npmjs.org
- name: Install dependencies
if: ${{ steps.release.outputs.release_created }}
run: yarn install
run: pnpm install
- name: Download all artifacts
if: ${{ steps.release.outputs.release_created }}
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Move artifacts
if: ${{ steps.release.outputs.release_created }}
run: yarn artifacts
run: pnpm artifacts
- name: List packages
if: ${{ steps.release.outputs.release_created }}
run: ls -R ./npm
Expand All @@ -334,10 +271,10 @@ jobs:
run: |
if node -e "console.log(require('./package.json').version)" | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$";
then
npm publish --access public --provenance
pnpm publish --access public --provenance
elif node -e "console.log(require('./package.json').version)" | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+";
then
npm publish --tag next --access public --provenance
pnpm publish --tag next --access public --provenance
else
echo "Not a release, skipping publish"
fi
Expand Down
Loading