Skip to content

fix(deps): update rust crate infer to 0.19 (#985) #2254

fix(deps): update rust crate infer to 0.19 (#985)

fix(deps): update rust crate infer to 0.19 (#985) #2254

Workflow file for this run

name: CI
env:
DEBUG: 'napi:*'
APP_NAME: 'skia'
MACOSX_DEPLOYMENT_TARGET: '10.13'
permissions:
contents: write
id-token: write
on:
push:
branches:
- main
tags-ignore:
- '**'
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: ${{ github.ref_name != 'main' }}
jobs:
lint:
name: Lint SourceCode
runs-on: ubuntu-latest
container:
image: ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- name: Install
uses: ./.github/actions/setup-rust
with:
targets: x86_64-apple-darwin
components: clippy, rustfmt
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Download skia binary
run: |
git config --global --add safe.directory $(pwd)
node ./scripts/release-skia-binary.mjs --download
- name: 'Lint JS/TS'
run: yarn lint
- name: Cargo fmt
run: cargo fmt -- --check
- name: Clippy
run: cargo clippy
build:
strategy:
fail-fast: false
matrix:
settings:
- host: macos-latest
target: 'x86_64-apple-darwin'
setup: brew install nasm
build: |
rustc --print target-cpus
clang --version
yarn build --target x86_64-apple-darwin
downloadTarget: ''
- host: windows-latest
setup: |
choco upgrade llvm
build: yarn build --target x86_64-pc-windows-msvc
target: 'x86_64-pc-windows-msvc'
downloadTarget: ''
- host: ubuntu-latest
target: 'x86_64-unknown-linux-gnu'
downloadTarget: ''
docker: ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy
build: yarn build --target x86_64-unknown-linux-gnu
- host: ubuntu-latest
downloadTarget: 'x86_64-unknown-linux-musl'
target: 'x86_64-unknown-linux-musl'
docker: ghcr.io/brooooooklyn/canvas/musl-builder:lts
build: >-
set -e &&
apk add libc++-dev libc++-static &&
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/*.o /usr/lib/ &&
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc.a /usr/lib/ &&
cp /usr/lib/gcc/x86_64-alpine-linux-musl/14.2.0/libgcc_eh.a /usr/lib/ &&
wget "https://github.com/Brooooooklyn/canvas/releases/download/libcxxabi-$(cat llvm-version)/libc++abi-x86_64.a" &&
mv libc++abi-x86_64.a /usr/lib/libc++abi.a &&
CXXFLAGS="-std=c++20 -stdlib=libc++ -static -fPIC -fno-cxx-exceptions -fno-exceptions -I/usr/include/c++/v1" CC=clang CXX=clang++ yarn build --target x86_64-unknown-linux-musl
- host: macos-latest
downloadTarget: 'aarch64-apple-darwin'
target: 'aarch64-apple-darwin'
build: |
export MACOSX_DEPLOYMENT_TARGET='11.0'
clang --version
yarn build --target aarch64-apple-darwin
- host: ubuntu-latest
downloadTarget: 'aarch64-unknown-linux-gnu'
target: 'aarch64-unknown-linux-gnu'
docker: ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy-aarch64
build: >-
set -e &&
rustup target add aarch64-unknown-linux-gnu &&
yarn build --target aarch64-unknown-linux-gnu
- host: ubuntu-24.04-arm
target: 'aarch64-unknown-linux-musl'
downloadTarget: 'aarch64-unknown-linux-musl'
docker: node:18-alpine
build: >-
set -e &&
apk add musl-dev wget rustup bash python3 git build-base cmake perl clang llvm libc++-dev libc++-static llvm-libunwind-static tar xz ninja &&
apk add --no-cache --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing gn perl meson &&
wget "https://github.com/Brooooooklyn/canvas/releases/download/libcxxabi-$(cat llvm-version)/libc++abi-aarch64.a" &&
mv libc++abi-aarch64.a /usr/lib/libc++abi.a &&
cp /usr/lib/gcc/aarch64-alpine-linux-musl/14.2.0/*.o /usr/lib/ &&
cp /usr/lib/gcc/aarch64-alpine-linux-musl/14.2.0/libgcc.a /usr/lib/ &&
cp /usr/lib/gcc/aarch64-alpine-linux-musl/14.2.0/libgcc_eh.a /usr/lib/ &&
export GN_EXE=gn &&
rustup-init -y --default-host aarch64-unknown-linux-musl &&
source "$HOME/.cargo/env" &&
export CXXFLAGS="-std=c++20 -stdlib=libc++ -static -fPIC -fno-cxx-exceptions -fno-exceptions -I/usr/include/c++/v1" &&
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-alpine-linux-musl-gcc &&
CC=clang CXX=clang++ yarn build --target aarch64-unknown-linux-musl
- host: ubuntu-latest
target: 'aarch64-linux-android'
downloadTarget: 'aarch64-linux-android'
build: |
export CLANG_VERSION=`ls ${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/lib/clang | sed 's/ *$//g'`
touch "${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/${CLANG_VERSION}/lib/linux/aarch64/libgcc.a"
chmod 777 "${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/${CLANG_VERSION}/lib/linux/aarch64/libgcc.a"
echo "INPUT(-lunwind)" > "${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/${CLANG_VERSION}/lib/linux/aarch64/libgcc.a"
export LDFLAGS="-fuse-ld=lld"
export CC=aarch64-linux-android24-clang
export CXX=aarch64-linux-android24-clang++
export CMAKE_TOOLCHAIN_FILE_aarch64_linux_android="$(pwd)/cmake/android-determine.cmake"
yarn build --target aarch64-linux-android
- host: ubuntu-latest
target: 'riscv64gc-unknown-linux-gnu'
downloadTarget: 'riscv64gc-unknown-linux-gnu'
build: |
sudo apt-get update
sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y
export CC=riscv64-linux-gnu-gcc
export CXX=riscv64-linux-gnu-g++
yarn build --target riscv64gc-unknown-linux-gnu
name: stable - ${{ matrix.settings.target }} - node@20
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- name: Set env
if: matrix.settings.host == 'windows-latest'
run: echo "C:\\msys64\\mingw64\\bin" >> $GITHUB_PATH
shell: bash
- name: Setup nasm
uses: ilammy/setup-nasm@v1
if: matrix.settings.host == 'windows-latest'
- name: Install
uses: ./.github/actions/setup-rust
with:
targets: ${{ matrix.settings.target }}
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Setup toolchain
run: ${{ matrix.settings.setup }}
if: ${{ matrix.settings.setup }}
- name: Download skia binary
run: node ./scripts/release-skia-binary.mjs --download --target=${{ matrix.settings.downloadTarget }}
- name: 'Build'
if: ${{ !matrix.settings.docker }}
run: ${{ matrix.settings.build }}
- 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: Upload artifact
uses: actions/upload-artifact@v4
with:
name: bindings-${{ matrix.settings.target }}
path: ${{ env.APP_NAME }}.*.node
build-armv7-linux-gnueabihf:
name: Build armv7-unknown-linux-gnueabihf
runs-on: ubuntu-latest
container:
image: debian:buster
steps:
- name: Setup tools
run: |
apt-get update
apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf libatomic1-armhf-cross git build-essential cmake ninja-build wget curl gnupg
echo "deb http://apt.llvm.org/buster/ llvm-toolchain-buster-18 main" >> /etc/apt/sources.list
echo "deb-src http://apt.llvm.org/buster/ llvm-toolchain-buster-18 main" >> /etc/apt/sources.list
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
apt-get update
apt-get install -y clang-18
ln -s /usr/bin/clang-18 /usr/bin/clang
ln -s /usr/bin/clang++-18 /usr/bin/clang++
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install
uses: ./.github/actions/setup-rust
with:
targets: "armv7-unknown-linux-gnueabihf"
- name: Install dependencies
run: |
corepack enable
yarn install --immutable --mode=skip-build
- name: Download skia binary
run: |
git config --global --add safe.directory "$(pwd)"
git config --global --add safe.directory "$(pwd)/skia"
node ./scripts/release-skia-binary.mjs --download --target=armv7-unknown-linux-gnueabihf
- name: Build
run: |
export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc
yarn build --target armv7-unknown-linux-gnueabihf
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: bindings-armv7-unknown-linux-gnueabihf
path: ${{ env.APP_NAME }}.*.node
test-macOS-windows-binding:
name: Test bindings on ${{ matrix.settings.target }} - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
settings:
- host: macos-latest
target: 'x86_64-apple-darwin'
- host: macos-latest
target: 'aarch64-apple-darwin'
- host: windows-latest
target: 'x86_64-pc-windows-msvc'
node: ['18', '20', '22']
runs-on: ${{ matrix.settings.host }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
fileName: [email protected]
tag: '0.15.4'
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Setup node
uses: actions/setup-node@v4
if: startsWith(matrix.settings.target, 'x86_64')
with:
node-version: ${{ matrix.node }}
cache: 'yarn'
architecture: 'x64'
- name: Setup node
uses: actions/setup-node@v4
if: startsWith(matrix.settings.target, 'aarch64')
with:
node-version: ${{ matrix.node }}
cache: 'yarn'
architecture: 'arm64'
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-${{ matrix.settings.target }}
path: .
- name: Download icudtl.dat
if: matrix.settings.host == 'windows-latest'
run: node ./scripts/release-skia-binary.mjs --download-icu
- name: Test bindings
run: yarn test:ci
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-${{ matrix.settings.target }}-${{ matrix.node }}
path: __test__/failure/**
test-linux-x64-gnu-binding:
name: Test bindings on Linux-x64-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node: ['18', '20', '22']
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
tag: '0.15.4'
fileName: [email protected]
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: 'yarn'
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- 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):/canvas -w /canvas node:${{ matrix.node }}-slim yarn test:ci
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-x86_64-unknown-linux-gnu-${{ matrix.node }}
path: __test__/failure/**
test-linux-x64-musl-binding:
name: Test bindings on x86_64-unknown-linux-musl - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node: ['18', '20', '22']
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
fileName: [email protected]
tag: '0.15.4'
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
cache: 'yarn'
- name: Install dependencies
run: |
yarn config set supportedArchitectures.libc "musl"
yarn install --immutable --mode=skip-build
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-x86_64-unknown-linux-musl
path: .
- name: List packages
run: ls -R .
shell: bash
- name: Test bindings
run: docker run --rm -v $(pwd):/canvas -w /canvas node:${{ matrix.node }}-alpine yarn test:ci
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-x86_64-unknown-linux-musl-${{ matrix.node }}
path: __test__/failure/**
test-linux-aarch64-gnu-binding:
name: Test bindings on aarch64-unknown-linux-gnu - node@${{ matrix.node }}
needs:
- build
strategy:
fail-fast: false
matrix:
node: ['20', '22']
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
tag: '0.15.4'
fileName: [email protected]
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-aarch64-unknown-linux-gnu
path: .
- name: List packages
run: ls -R .
shell: bash
- name: Install dependencies
run: |
yarn config set supportedArchitectures.cpu "arm64"
yarn config set supportedArchitectures.libc "glibc"
yarn install --immutable --mode=skip-build
- 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 }}:/skia -w /skia'
run: |
set -e && \
yarn test:ci && \
ls -la
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-aarch64-unknown-linux-gnu-${{ matrix.node }}
path: __test__/failure/**
test-linux-aarch64-musl-binding:
name: Test bindings on aarch64-unknown-linux-musl - node@lts
needs:
- build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
tag: '0.15.4'
fileName: [email protected]
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-aarch64-unknown-linux-musl
path: .
- name: List packages
run: ls -R .
shell: bash
- name: Install dependencies
run: |
yarn config set supportedArchitectures.cpu "arm64"
yarn config set supportedArchitectures.libc "musl"
yarn install --immutable --mode=skip-build
- 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:lts-alpine
options: '--platform linux/arm64 -v ${{ github.workspace }}:/skia -w /skia'
run: |
set -e
yarn test:ci
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-aarch64-unknown-linux-musl-lts
path: __test__/failure/**
test-linux-arm-gnueabihf-binding:
name: Test bindings on armv7-unknown-linux-gnueabihf - node@${{ matrix.node }}
needs:
- build-armv7-linux-gnueabihf
strategy:
fail-fast: false
matrix:
node: ['18', '20', '22']
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download Apple Emoji font
uses: robinraju/release-downloader@v1
with:
repository: 'PoomSmart/EmojiLibrary'
tag: '0.15.4'
fileName: [email protected]
token: ${{ secrets.GITHUB_TOKEN }}
out-file-path: __test__/fonts/
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-armv7-unknown-linux-gnueabihf
path: .
- name: List packages
run: ls -R .
shell: bash
- name: Install dependencies
run: |
yarn config set supportedArchitectures.cpu "arm"
yarn install --immutable --mode=skip-build
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
platforms: arm
- 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 }}-bookworm-slim
options: '--platform linux/arm/v7 -v ${{ github.workspace }}:/skia -w /skia'
run: |
set -e && \
yarn test:ci && \
ls -la
- name: Test failed
if: ${{ failure() }}
uses: actions/upload-artifact@v4
with:
name: failure-images-armv7-unknown-linux-gnueabihf-${{ matrix.node }}
path: __test__/failure/**
rust-test:
name: stable - macOS - cargo - test
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install
uses: ./.github/actions/setup-rust
with:
targets: aarch64-apple-darwin
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Install llvm
run: brew install llvm
- name: Download skia binary
run: node ./scripts/release-skia-binary.mjs --download
- name: Test
run: |
clang --version
cargo test -- --nocapture
bench:
name: Bench
runs-on: ubuntu-latest
container:
image: ghcr.io/brooooooklyn/canvas/ubuntu-builder:jammy
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- name: Install
uses: ./.github/actions/setup-rust
with:
targets: x86_64-unknown-linux-gnu
- name: Install dependencies
run: yarn install --immutable
- name: Download skia binary
run: |
git config --global --add safe.directory $(pwd)
node ./scripts/release-skia-binary.mjs --download
- name: 'Build'
run: yarn build
- name: 'Run benchmark'
run: yarn bench
publish:
name: Publish
runs-on: ubuntu-latest
needs:
- test-linux-x64-gnu-binding
- test-linux-x64-musl-binding
- test-linux-aarch64-gnu-binding
- test-linux-aarch64-musl-binding
- test-linux-arm-gnueabihf-binding
- test-macOS-windows-binding
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'yarn'
- name: Install dependencies
run: yarn install --immutable --mode=skip-build
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Move artifacts
run: yarn artifacts
- name: Download ICU for Windows
run: node ./scripts/release-skia-binary.mjs --download-icu
- name: List packages
run: ls -R ./npm
shell: bash
- name: Publish
run: |
npm config set provenance true
if git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+$";
then
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
npm publish --access public
elif git log -1 --pretty=%B | grep "^[0-9]\+\.[0-9]\+\.[0-9]\+";
then
echo "//registry.npmjs.org/:_authToken=$NPM_TOKEN" >> ~/.npmrc
npm publish --tag next --access public
else
echo "Not a release, skipping publish"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}