1.0.95 #664
This file contains 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: CI | |
env: | |
DEBUG: napi:* | |
APP_NAME: ffi-rs | |
MACOSX_DEPLOYMENT_TARGET: "10.13" | |
"on": | |
push: | |
branches: | |
- main | |
- master | |
tags-ignore: | |
- "**" | |
paths-ignore: | |
- "**/*.md" | |
- LICENSE | |
- "**/*.gitignore" | |
- .editorconfig | |
- docs/** | |
pull_request: null | |
jobs: | |
build: | |
if: ${{ !contains(github.event.head_commit.message, 'skip ci') && !contains(github.event.head_commit.message, '.md')}} | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-latest | |
target: x86_64-apple-darwin | |
build: | | |
rustup -V | |
target=x86_64-apple-darwin yarn build && ls | |
strip -x *.node | |
- host: windows-latest | |
build: uname -a && yarn build && ls | |
target: x86_64-pc-windows-msvc | |
- host: windows-latest | |
target: aarch64-pc-windows-msvc | |
build: target=aarch64-pc-windows-msvc yarn build && ls | |
- host: windows-latest | |
build: target=i686-pc-windows-msvc yarn build && ls && uname -a | |
target: i686-pc-windows-msvc | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:stable-2023-09-17-x64 | |
build: |- | |
set -e && | |
target=x86_64-unknown-linux-gnu yarn build && | |
strip *.node && | |
ls | |
- host: macos-latest | |
target: aarch64-apple-darwin | |
build: | | |
uname -a && | |
target=aarch64-apple-darwin yarn build && | |
ls && | |
strip -x *.node | |
- host: ubuntu-latest | |
target: aarch64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:stable-2023-09-17-aarch64 | |
build: |- | |
set -e && | |
uname -a && | |
apt-get update && | |
apt-get install gcc-aarch64-linux-gnu -y && | |
export CFLAGS="$CFLAGS -D__GLIBC_USE\(...\)=0" && | |
target=aarch64-unknown-linux-gnu yarn build && | |
find . -name config.log && | |
aarch64-unknown-linux-gnu-strip *.node && | |
ls | |
# - host: ubuntu-latest | |
# target: arm-unknown-linux-gnueabihf | |
- host: ubuntu-latest | |
target: arm-unknown-linux-gnueabihf | |
docker: ghcr.io/catthehacker/ubuntu:custom-20.04-dev | |
build: | | |
set -e && uname -a && | |
apt-get update && | |
apt-get install gcc-arm-linux-gnueabihf -y && | |
rustup target add arm-unknown-linux-gnueabihf && | |
target=arm-unknown-linux-gnueabihf yarn build && | |
arm-linux-gnueabihf-strip *.node && | |
ls | |
- host: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:stable-2023-09-17-alpine | |
build: | | |
set -e && uname -a && apk update && | |
apk add linux-headers && | |
CC="/usr/bin/x86_64-alpine-linux-musl-gcc" LDFLAGS="-L/usr/lib/gcc/x86_64-alpine-linux-musl/12.2.1/" yarn build && | |
strip *.node && yarn test && | |
ls | |
- host: ubuntu-latest | |
target: aarch64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
build: |- | |
set -e && | |
uname -a && | |
apt update && | |
apt install gcc-aarch64-linux-gnu -y && | |
export CFLAGS="$CFLAGS -D__GLIBC_USE\(...\)=0" && | |
rustup target add aarch64-unknown-linux-musl && | |
RUSTFLAGS='-C link-arg=-lgcc -C linker=aarch64-linux-gnu-gcc' target=aarch64-unknown-linux-musl yarn build && | |
ls && | |
aarch64-unknown-linux-gnu-strip *.node | |
name: stable - ${{ matrix.settings.target }} - node@18 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
if: ${{ !matrix.settings.docker }} | |
with: | |
node-version: 18 | |
check-latest: true | |
- name: Install | |
uses: dtolnay/rust-toolchain@stable | |
if: ${{ !matrix.settings.docker }} | |
with: | |
toolchain: 1.73.0 | |
targets: ${{ matrix.settings.target }} | |
- name: Cache cargo | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
.cargo-cache | |
target/ | |
key: ${{ matrix.settings.target }}-cargo-${{ matrix.settings.host }} | |
# - name: Setup zig | |
# uses: goto-bus-stop/setup-zig@v2 | |
# if: ${{ matrix.settings.target == 'arm-unknown-linux-gnueabihf' }} | |
# with: | |
# version: 0.13.0 | |
# - name: Setup Cross | |
# if: ${{ matrix.settings.target == 'arm-unknown-linux-gnueabihf' }} | |
# uses: houseabsolute/actions-rust-cross@v0 | |
# with: | |
# target: arm-unknown-linux-gnueabihf | |
# args: "--locked --release" | |
# strip: true | |
# - name: Move gnuabihf | |
# if: ${{ matrix.settings.target == 'arm-unknown-linux-gnueabihf' }} | |
# run: mv target/arm-unknown-linux-gnueabihf/release/libffi_rs.so ./ffi-rs.arm-unknown-linux-gnueabihf.node | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ matrix.settings.setup }} | |
shell: bash | |
- name: Setup node x86 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
run: yarn config set supportedArchitectures.cpu "ia32" | |
shell: bash | |
- name: Install dependencies | |
run: node scripts/preinstall.js && yarn add esno@^4.0.0 shelljs@^0.8.5 @napi-rs/cli@^2.15.2 --registry https://registry.npmjs.org/ --prod | |
- name: Setup node x86 | |
uses: actions/setup-node@v4 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
check-latest: true | |
architecture: x86 | |
- name: Build in docker | |
uses: addnab/docker-run-action@v3 | |
if: ${{ matrix.settings.docker }} | |
with: | |
image: ${{ matrix.settings.docker }} | |
options: "--user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build" | |
run: ${{ matrix.settings.build }} | |
- name: Build | |
run: ${{ matrix.settings.build }} | |
if: ${{ !matrix.settings.docker }} | |
shell: bash | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: | | |
${{ env.APP_NAME }}.*.node | |
*.so | |
*.dll | |
index.js | |
index.d.ts | |
if-no-files-found: error | |
test-windows-binding: | |
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: windows-latest | |
target: x86_64-pc-windows-msvc | |
# - host: windows-latest | |
# target: i686-pc-windows-msvc | |
# - host: windows-latest | |
# target: aarch64-pc-windows-msvc | |
node: | |
- "18" | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Setup node x86 | |
uses: actions/setup-node@v4 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
with: | |
node-version: 18 | |
check-latest: true | |
architecture: x86 | |
- name: Setup node x86 | |
if: matrix.settings.target == 'i686-pc-windows-msvc' | |
run: yarn config set supportedArchitectures.cpu "ia32" | |
shell: bash | |
- name: Install dependencies | |
run: node scripts/preinstall.js && yarn add esno@^4.0.0 shelljs@^0.8.5 @napi-rs/cli@^2.15.2 --registry https://registry.npmjs.org/ --prod | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: . | |
- name: List packages | |
run: ls . | |
shell: bash | |
- name: Test bindings | |
run: yarn test | |
test-linux-x64-gnu-binding: | |
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }} | |
needs: | |
- build | |
strategy: | |
fail-fast: false | |
matrix: | |
node: | |
- "18" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: ${{ matrix.node }} | |
check-latest: true | |
- name: Install dependencies | |
run: node scripts/preinstall.js && yarn add esno@^4.0.0 shelljs@^0.8.5 @napi-rs/cli@^2.15.2 --registry https://registry.npmjs.org/ --prod | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
name: bindings-x86_64-unknown-linux-gnu | |
path: . | |
- name: List packages | |
run: ls -R . | |
shell: bash | |
- name: Test bindings | |
run: docker run --rm -v $(pwd):/build -w /build node:${{ matrix.node }}-slim yarn test | |
publish: | |
name: Publish | |
runs-on: ubuntu-latest | |
needs: | |
- test-linux-x64-gnu-binding | |
- test-windows-binding | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
check-latest: true | |
- name: Install dependencies | |
run: node scripts/preinstall.js && yarn add esno@^4.0.0 shelljs@^0.8.5 @napi-rs/cli@^2.15.2 --registry https://registry.npmjs.org/ --prod | |
- name: Download all artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: artifacts | |
- name: Move artifacts | |
run: yarn artifacts | |
- name: List packages | |
run: mv ./artifacts/bindings-aarch64-apple-darwin/index.js . && mv ./artifacts/bindings-aarch64-apple-darwin/index.d.ts . && ls . && ls -R ./npm | |
shell: bash | |
- name: Publish | |
run: | | |
if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$"; | |
then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
npm run publish:npm | |
elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+"; | |
then | |
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc | |
npm run publish:npm | |
else | |
echo "Not a release, skipping publish" | |
fi | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} |