feat: upgrade skia to chrome/122 #1771
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: 'skia' | |
MACOSX_DEPLOYMENT_TARGET: '10.13' | |
permissions: | |
contents: write | |
id-token: write | |
on: | |
push: | |
branches: | |
- main | |
tags-ignore: | |
- '**' | |
pull_request: | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-14 | |
target: 'x86_64-apple-darwin' | |
setup: brew install nasm | |
build: | | |
rustc --print target-cpus | |
yarn build --target x86_64-apple-darwin | |
strip -x skia.darwin-x64.node | |
downloadTarget: '' | |
- host: windows-latest | |
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: >- | |
set -e && | |
yarn build --target x86_64-unknown-linux-gnu && | |
strip skia.linux-x64-gnu.node | |
- 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 && | |
export LIB_AOM_STATIC_LIB_PATH=/usr/lib && | |
export LIB_AOM_INCLUDE_PATH=/usr/include/aom/aom && | |
export LIB_AOM_PKG_CONFIG_PATH=/usr/lib/pkgconfig && | |
yarn build --target x86_64-unknown-linux-musl && | |
strip skia.linux-x64-musl.node | |
- host: macos-14 | |
downloadTarget: 'aarch64-apple-darwin' | |
target: 'aarch64-apple-darwin' | |
build: | | |
sudo rm -Rf /Library/Developer/CommandLineTools/SDKs/*; | |
export CC=$(xcrun -f clang); | |
export CXX=$(xcrun -f clang++); | |
SYSROOT=$(xcrun --sdk macosx --show-sdk-path); | |
export CFLAGS="-isysroot $SYSROOT -isystem $SYSROOT"; | |
yarn build --target aarch64-apple-darwin | |
strip -x skia.darwin-arm64.node | |
- 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 toolchain install $(cat ./rust-toolchain) && | |
rustup target add aarch64-unknown-linux-gnu && | |
yarn build --target aarch64-unknown-linux-gnu && | |
llvm-strip-16 skia.linux-arm64-gnu.node | |
- host: ubuntu-latest | |
target: 'aarch64-unknown-linux-musl' | |
downloadTarget: 'aarch64-unknown-linux-musl' | |
docker: ghcr.io/brooooooklyn/canvas/musl-builder:lts | |
build: >- | |
set -e && | |
rustup toolchain install $(cat ./rust-toolchain) && | |
rustup target add aarch64-unknown-linux-musl && | |
unset RUSTFLAGS && | |
export LIB_AOM_PKG_CONFIG_PATH=/usr/aarch64-alpine-linux-musl/aom/lib/pkgconfig/aom.pc && | |
export LIB_AOM_INCLUDE_PATH=/usr/aarch64-alpine-linux-musl/aom/include && | |
export LIB_AOM_STATIC_LIB_PATH=/usr/aarch64-alpine-linux-musl/aom/lib && | |
yarn build --target aarch64-unknown-linux-musl && | |
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip skia.linux-arm64-musl.node | |
- host: ubuntu-latest | |
target: 'armv7-unknown-linux-gnueabihf' | |
downloadTarget: 'armv7-unknown-linux-gnueabihf' | |
setup: | | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y | |
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
docker buildx build --load --platform linux/arm/v7 -t ubuntu:jammy-armv7 . -f jammy-armv7.Dockerfile | |
docker run --rm -dt --name ubuntu-jammy-armv7 ubuntu:jammy-armv7 | |
sudo mkdir -p /usr/arm-linux-gnueabihf/lib/llvm-14 | |
sudo docker cp ubuntu-jammy-armv7:/usr/lib/llvm-14/lib /usr/arm-linux-gnueabihf/lib/llvm-14/lib | |
sudo docker cp ubuntu-jammy-armv7:/usr/lib/llvm-14/include /usr/arm-linux-gnueabihf/lib/llvm-14/include | |
docker stop ubuntu-jammy-armv7 | |
build: | | |
yarn build --target armv7-unknown-linux-gnueabihf --zig --zig-link-only --zig-abi-suffix=2.18 | |
arm-linux-gnueabihf-strip skia.linux-arm-gnueabihf.node | |
- 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" | |
yarn build --target aarch64-linux-android | |
${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip skia.android-arm64.node | |
name: stable - ${{ matrix.settings.target }} - node@18 | |
runs-on: ${{ matrix.settings.host }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 18 | |
cache: 'yarn' | |
- name: Set up QEMU | |
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: linux/arm/v7 | |
- name: Set up Docker Buildx | |
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
uses: docker/setup-buildx-action@v3 | |
with: | |
platforms: linux/arm/v7 | |
- uses: goto-bus-stop/setup-zig@v2 | |
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
with: | |
version: 0.11.0 | |
- 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: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.settings.target }} | |
toolchain: nightly-2023-08-09 | |
- name: Cache cargo registry | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
.cargo-cache | |
target/ | |
key: ${{ matrix.settings.target }}-cargo-registry | |
- 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.js --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@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
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-14 | |
target: 'x86_64-apple-darwin' | |
- host: windows-latest | |
target: 'x86_64-pc-windows-msvc' | |
node: ['18', '20'] | |
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 | |
with: | |
node-version: ${{ matrix.node }} | |
- name: Cache yarn | |
uses: actions/cache@v4 | |
with: | |
path: .yarn/cache | |
key: ${{ matrix.settings.target }}-yarn-cache-node-${{ matrix.node }} | |
- name: Install dependencies | |
run: yarn install --immutable --mode=skip-build | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
name: bindings-${{ matrix.settings.target }} | |
path: . | |
- name: Download icudtl.dat | |
if: matrix.settings.host == 'windows-latest' | |
run: node ./scripts/release-skia-binary.js --download-icu | |
- name: Test bindings | |
run: yarn test:ci | |
- name: Test failed | |
if: ${{ failure() }} | |
uses: actions/upload-artifact@v3 | |
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'] | |
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@v3 | |
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@v3 | |
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'] | |
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@v3 | |
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@v3 | |
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: ['18', '20'] | |
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@v3 | |
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@v3 | |
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@v3 | |
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@v3 | |
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 | |
strategy: | |
fail-fast: false | |
matrix: | |
node: ['18', '20'] | |
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@v3 | |
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 }}-bullseye-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@v3 | |
with: | |
name: failure-images-armv7-unknown-linux-gnueabihf-${{ matrix.node }} | |
path: __test__/failure/** | |
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: 18 | |
cache: 'yarn' | |
- name: Install dependencies | |
run: yarn install --immutable --mode=skip-build | |
- name: Download all artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- name: Move artifacts | |
run: yarn artifacts | |
- name: Download ICU for Windows | |
run: node ./scripts/release-skia-binary.js --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 }} |