ci #2395
This file contains hidden or 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 | |
on: | |
pull_request: {} | |
push: | |
branches: | |
- master | |
schedule: [cron: "40 1 * * *"] | |
jobs: | |
commitsar: | |
name: Verify commit messages | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- uses: aevea/[email protected] | |
pre-commit: | |
name: Generic pre-commit checks | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
- run: pip install pre-commit | |
- run: SKIP=fmt,cargo-check,clippy pre-commit run --all-files | |
eslint: | |
name: ESLint | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: 20 | |
- name: Cache NPM dependencies | |
uses: actions/cache@v4 | |
with: | |
path: node_modules | |
key: npm-cache-lint-node@16-${{ hashFiles('yarn.lock') }} | |
- name: "Install dependencies" | |
run: yarn install --immutable --registry https://registry.npmjs.org --network-timeout 300000 | |
working-directory: ./bindings/javascript | |
- name: ESLint | |
run: yarn lint | |
working-directory: ./bindings/javascript | |
test-stable: | |
name: Test (stable) | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
cache: "pip" | |
cache-dependency-path: "**/requirements-*.txt" | |
- name: Start background server | |
run: | | |
python -m pip install -r ./css-inline/tests/requirements-test.txt | |
# Starts the server in background | |
python ./css-inline/tests/server.py & | |
shell: bash | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: css-inline | |
- run: cargo test --no-fail-fast | |
working-directory: ./css-inline | |
fmt: | |
name: Rustfmt | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
components: rustfmt | |
- run: cargo fmt --all -- --check | |
working-directory: ./css-inline | |
- run: cargo fmt --all -- --check | |
working-directory: ./profiler | |
- run: cargo fmt --all -- --check | |
working-directory: ./bindings/c | |
- run: cargo fmt --all -- --check | |
working-directory: ./bindings/javascript | |
- run: cargo fmt --all -- --check | |
working-directory: ./bindings/python | |
- run: cargo fmt --all -- --check | |
working-directory: ./bindings/ruby | |
clippy: | |
name: Clippy | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
components: clippy | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: | | |
css-inline | |
bindings/javascript | |
bindings/python | |
bindings/ruby | |
bindings/c | |
bindings/profiler | |
- name: Rust | |
run: cargo clippy -- -D warnings | |
working-directory: ./css-inline | |
- name: Profiler | |
run: cargo clippy -- -D warnings | |
working-directory: ./profiler | |
- name: Python | |
run: cargo clippy -- -D warnings | |
working-directory: ./bindings/python | |
- name: JavaScript | |
run: cargo clippy -- -D warnings | |
working-directory: ./bindings/javascript | |
- name: Ruby | |
run: cargo clippy -- -D warnings | |
working-directory: ./bindings/ruby | |
- name: C | |
run: cargo clippy -- -D warnings | |
working-directory: ./bindings/c | |
msrv: | |
name: MSRV | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: "1.71.1" | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: css-inline | |
# (dd): These packages bumped their MSRV with a patch release. | |
# As per my understanding cargo will be able to automatically | |
# resolve the proper version with the resolver v3 which is MSRV-aware. | |
# With the current MSRV it is not possible to force the resolver to find | |
# proper versions, hence they are pinned manually here. The end users | |
# will be able to do the same on their side (which is a bad UX though), | |
# but apparently there is nothing can be done on the `css-inline` side | |
# beside bumping MSRV to 1.85 and upgrading to the new resolver. | |
- run: cargo update -p idna_adapter --precise 1.2.0 | |
working-directory: ./css-inline | |
- run: cargo update -p litemap --precise 0.7.4 | |
working-directory: ./css-inline | |
- run: cargo update -p zerofrom --precise 0.1.5 | |
working-directory: ./css-inline | |
- run: cargo build | |
working-directory: ./css-inline | |
test-javascript: | |
strategy: | |
fail-fast: false | |
matrix: | |
settings: | |
- host: macos-13 | |
target: x86_64-apple-darwin | |
build: | | |
yarn build | |
strip -x *.node | |
- host: macos-13 | |
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 *.node | |
- host: windows-2022 | |
build: yarn build | |
target: x86_64-pc-windows-msvc | |
- host: windows-2022 | |
build: yarn build --target aarch64-pc-windows-msvc | |
target: aarch64-pc-windows-msvc | |
- host: ubuntu-22.04 | |
target: x86_64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian | |
build: |- | |
set -e && | |
yarn build --target x86_64-unknown-linux-gnu && | |
strip *.node | |
- host: ubuntu-22.04 | |
target: x86_64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: set -e && yarn build && strip *.node | |
- host: ubuntu-22.04 | |
target: aarch64-unknown-linux-gnu | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-debian-aarch64 | |
build: |- | |
set -e && | |
yarn build --target aarch64-unknown-linux-gnu && | |
aarch64-unknown-linux-gnu-strip *.node | |
- host: ubuntu-22.04 | |
target: armv7-unknown-linux-gnueabihf | |
setup: | | |
sudo apt-get update | |
sudo apt-get install gcc-arm-linux-gnueabihf -y | |
build: | | |
yarn build --target armv7-unknown-linux-gnueabihf | |
arm-linux-gnueabihf-strip *.node | |
- host: ubuntu-22.04 | |
target: aarch64-unknown-linux-musl | |
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine | |
build: |- | |
set -e && | |
rustup target add aarch64-unknown-linux-musl && | |
yarn build --target aarch64-unknown-linux-musl && | |
/aarch64-linux-musl-cross/bin/aarch64-linux-musl-strip *.node | |
- host: ubuntu-22.04 | |
target: aarch64-linux-android | |
build: | | |
yarn build --target aarch64-linux-android | |
${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip *.node | |
- host: ubuntu-22.04 | |
target: armv7-linux-androideabi | |
build: | | |
yarn build --target armv7-linux-androideabi | |
${ANDROID_NDK_LATEST_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip *.node | |
node: | |
- "18" | |
- "20" | |
name: NodeJS ${{ matrix.node }} on ${{ matrix.settings.target }} | |
runs-on: ${{ matrix.settings.host }} | |
env: | |
DEBUG: napi:* | |
APP_NAME: css-inline | |
MACOSX_DEPLOYMENT_TARGET: "10.13" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
if: ${{ !matrix.settings.docker }} | |
with: | |
node-version: ${{ matrix.node }} | |
cache: yarn | |
cache-dependency-path: bindings/javascript/yarn.lock | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
cache: "pip" | |
cache-dependency-path: "**/requirements-*.txt" | |
- name: Start background server | |
run: | | |
python -m pip install -r ./css-inline/tests/requirements-test.txt | |
# Starts the server in background | |
python ./css-inline/tests/server.py & | |
shell: bash | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
if: ${{ !matrix.settings.docker }} | |
with: | |
toolchain: stable | |
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 }} | |
- uses: goto-bus-stop/setup-zig@v2 | |
if: ${{ matrix.settings.target == 'armv7-unknown-linux-gnueabihf' }} | |
with: | |
version: 0.11.0 | |
- name: Setup toolchain | |
run: ${{ matrix.settings.setup }} | |
if: ${{ matrix.settings.setup }} | |
shell: bash | |
- name: Config yarn (x86_64-unknown-linux-musl) | |
if: matrix.settings.target == 'x86_64-unknown-linux-musl' | |
run: yarn config set supportedArchitectures.libc "musl" | |
working-directory: bindings/javascript | |
- name: Config yarn (aarch64-unknown-linux-gnu) | |
if: matrix.settings.target == 'aarch64-unknown-linux-gnu' | |
run: | | |
yarn config set supportedArchitectures.cpu "arm64" | |
yarn config set supportedArchitectures.libc "glibc" | |
working-directory: bindings/javascript | |
- name: Config yarn (aarch64-unknown-linux-musl) | |
if: matrix.settings.target == 'aarch64-unknown-linux-musl' | |
run: | | |
yarn config set supportedArchitectures.cpu "arm64" | |
yarn config set supportedArchitectures.libc "musl" | |
working-directory: bindings/javascript | |
- name: Config yarn (armv7-unknown-linux-gnueabihf) | |
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' | |
run: yarn config set supportedArchitectures.cpu "arm" | |
working-directory: bindings/javascript | |
- name: Config yarn (aarch64-linux-android) | |
if: matrix.settings.target == 'aarch64-linux-android' | |
run: yarn config set supportedArchitectures.cpu "arm64" | |
working-directory: bindings/javascript | |
- name: Config yarn (aarch64-pc-windows-msvc) | |
if: matrix.settings.target == 'aarch64-pc-windows-msvc' | |
run: yarn config set supportedArchitectures.cpu "arm64" | |
working-directory: bindings/javascript | |
- name: Config yarn (armv7-linux-androideabi) | |
if: matrix.settings.target == 'armv7-linux-androideabi' | |
run: yarn config set supportedArchitectures.cpu "arm" | |
working-directory: bindings/javascript | |
- name: Install dependencies | |
run: yarn install | |
working-directory: bindings/javascript | |
- 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/bindings/javascript" | |
run: ${{ matrix.settings.build }} | |
- name: Build | |
run: ${{ matrix.settings.build }} | |
if: ${{ !matrix.settings.docker }} | |
shell: bash | |
working-directory: bindings/javascript | |
- name: Set up QEMU (aarch64) | |
uses: docker/setup-qemu-action@v3 | |
if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl"]'), matrix.settings.target) }} | |
with: | |
platforms: arm64 | |
- name: Set up QEMU (armv7-unknown-linux-gnueabihf) | |
uses: docker/setup-qemu-action@v3 | |
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' | |
with: | |
platforms: arm | |
- run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
if: ${{ contains(fromJson('["aarch64-unknown-linux-gnu", "aarch64-unknown-linux-musl", "armv7-unknown-linux-gnueabihf"]'), matrix.settings.target) }} | |
- name: Test (x86_64-apple-darwin & x86_64-pc-windows-msvc) | |
if: ${{ contains(fromJson('["x86_64-apple-darwin", "x86_64-pc-windows-msvc"]'), matrix.settings.target) }} | |
run: yarn test | |
working-directory: bindings/javascript | |
- name: Test (x86_64-unknown-linux-gnu) | |
if: matrix.settings.target == 'x86_64-unknown-linux-gnu' | |
run: docker run --rm --network host -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-slim yarn test | |
- name: Test (x86_64-unknown-linux-musl) | |
if: matrix.settings.target == 'x86_64-unknown-linux-musl' | |
run: docker run --rm --network host -v $(pwd):/build -w /build/bindings/javascript node:${{ matrix.node }}-alpine yarn test | |
- name: Test (aarch64-unknown-linux-gnu) | |
if: matrix.settings.target == 'aarch64-unknown-linux-gnu' | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: node:${{ matrix.node }}-slim | |
options: "--platform linux/arm64 --network host -v ${{ github.workspace }}:/build -w /build/bindings/javascript" | |
run: | | |
set -e | |
yarn test | |
- name: Test in docker (aarch64-unknown-linux-musl) | |
if: matrix.settings.target == 'aarch64-unknown-linux-musl' | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: node:${{ matrix.node }}-alpine | |
options: "--platform linux/arm64 --network host -v ${{ github.workspace }}:/build -w /build/bindings/javascript" | |
run: | | |
set -e | |
yarn test | |
- name: Test in docker (armv7-unknown-linux-gnueabihf) | |
if: matrix.settings.target == 'armv7-unknown-linux-gnueabihf' | |
uses: addnab/docker-run-action@v3 | |
with: | |
image: node:${{ matrix.node }}-bullseye-slim | |
options: "--platform linux/arm/v7 --network host -v ${{ github.workspace }}:/build -w /build/bindings/javascript" | |
run: | | |
set -e | |
yarn test | |
test-python: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-22.04, macos-13, windows-2022] | |
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"] | |
name: Python ${{ matrix.python-version }} on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: x64 | |
cache: "pip" | |
cache-dependency-path: "**/requirements-*.txt" | |
- name: Start background server | |
run: | | |
python -m pip install -r ./css-inline/tests/requirements-test.txt | |
# Starts the server in background | |
python ./css-inline/tests/server.py & | |
shell: bash | |
- run: python -m pip install -r requirements/dev.txt | |
working-directory: ./bindings/python | |
- name: Run ${{ matrix.python }} tox job | |
run: tox -e py | |
working-directory: ./bindings/python | |
build-pyodide: | |
name: Build PyOdide wheel | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly | |
with: | |
# Nightly 1.86 as 1.87+ is incompatible with PyOdide as of now | |
toolchain: nightly-2025-02-01 | |
targets: wasm32-unknown-emscripten | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.12 | |
- run: | | |
pip install pyodide-build>=0.28.0 | |
echo EMSCRIPTEN_VERSION=$(pyodide config get emscripten_version) >> $GITHUB_ENV | |
- uses: mymindstorm/setup-emsdk@v14 | |
with: | |
version: ${{ env.EMSCRIPTEN_VERSION }} | |
- run: pyodide build | |
working-directory: ./bindings/python | |
test-ruby: | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-22.04, macos-13, windows-2022] | |
ruby-version: ["3.2", "3.3"] | |
name: Ruby ${{ matrix.ruby-version }} on ${{ matrix.os }} | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby & Rust | |
uses: oxidize-rb/actions/setup-ruby-and-rust@main | |
with: | |
ruby-version: ${{ matrix.ruby-version }} | |
bundler-cache: true | |
cargo-cache: true | |
cache-version: v1 | |
working-directory: ./bindings/ruby | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
cache: "pip" | |
cache-dependency-path: "**/requirements-*.txt" | |
- name: Start background server | |
run: | | |
python -m pip install -r ./css-inline/tests/requirements-test.txt | |
# Starts the server in background | |
python ./css-inline/tests/server.py & | |
shell: bash | |
- run: bundle exec rake test | |
working-directory: ./bindings/ruby | |
test-wasm: | |
name: WASM module tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup node | |
uses: actions/setup-node@v4 | |
with: | |
node-version: "20" | |
cache: yarn | |
cache-dependency-path: bindings/javascript/yarn.lock | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: bindings/javascript | |
cache-all-crates: "true" | |
- name: Install wasm-pack | |
run: cargo install wasm-pack | |
- name: Install dependencies | |
run: yarn install | |
working-directory: ./bindings/javascript | |
- name: Build Wasm | |
run: yarn build:wasm | |
working-directory: ./bindings/javascript | |
- name: Test Wasm | |
run: yarn test:wasm | |
working-directory: ./bindings/javascript | |
test-c: | |
name: C bindings tests | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Build | |
run: cargo build | |
working-directory: ./bindings/c | |
- name: Run tests | |
run: | | |
gcc -c -I. tests/main.c | |
gcc main.o target/debug/libcss_inline.so -o out | |
./out | |
working-directory: ./bindings/c | |
env: | |
LD_LIBRARY_PATH: target/debug | |
features: | |
name: Check features | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: css-inline | |
cache-all-crates: "true" | |
- uses: taiki-e/install-action@cargo-hack | |
- run: cargo hack check --feature-powerset --lib | |
working-directory: ./css-inline | |
coverage: | |
name: Code coverage | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: css-inline | |
cache-all-crates: "true" | |
- name: Install cargo-llvm-cov | |
uses: taiki-e/install-action@cargo-llvm-cov | |
- uses: taiki-e/install-action@cargo-hack | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: 3.11 | |
cache: "pip" | |
cache-dependency-path: "**/requirements-*.txt" | |
- name: Start background server | |
run: | | |
python -m pip install -r ./css-inline/tests/requirements-test.txt | |
# Starts the server in background | |
python ./css-inline/tests/server.py & | |
shell: bash | |
- name: Run tests | |
run: cargo hack llvm-cov --no-report --feature-powerset | |
working-directory: ./css-inline | |
- name: Generate coverage reports | |
run: cargo llvm-cov report --lcov --output-path lcov.info | |
working-directory: ./css-inline | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
name: coverage | |
files: lcov.info | |
fail_ci_if_error: true | |
fuzz: | |
name: Fuzz | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@nightly | |
- uses: Swatinem/rust-cache@v2 | |
with: | |
workspaces: css-inline | |
cache-all-crates: "true" | |
- run: cargo install cargo-fuzz | |
- run: cargo fuzz run inline -- -max_total_time=60 | |
working-directory: ./css-inline |