name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
jobs:
fmt:
name: Rustfmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup component add rustfmt
- run: cargo fmt --all -- --check
clippy:
name: Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup component add clippy
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
restore-keys: ${{ runner.os }}-cargo-clippy-
- run: cargo clippy --all-targets --all-features -- -D warnings
test:
name: Test (${{ matrix.toolchain }}, ${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
toolchain: [stable, beta]
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-test-${{ matrix.toolchain }}-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
restore-keys: ${{ runner.os }}-cargo-test-${{ matrix.toolchain }}-
- run: cargo test --all-features
wasm:
name: WASM Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: rustup target add wasm32-unknown-unknown
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-wasm-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
restore-keys: ${{ runner.os }}-cargo-wasm-
- run: cargo build --target wasm32-unknown-unknown --features wasm
npm-test:
name: npm test
runs-on: ubuntu-latest
needs: wasm
steps:
- uses: actions/checkout@v4
- run: rustup target add wasm32-unknown-unknown
- uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-npm-${{ hashFiles('**/Cargo.lock', '**/Cargo.toml') }}
restore-keys: ${{ runner.os }}-cargo-npm-
- uses: actions/setup-node@v4
with:
node-version: 22
- name: Install wasm-pack
run: cargo install wasm-pack@0.14.0
- name: Install binaryen (wasm-opt)
run: |
curl -sL https://github.com/WebAssembly/binaryen/releases/download/version_128/binaryen-version_128-x86_64-linux.tar.gz | tar xz
sudo mv binaryen-version_128/bin/wasm-opt /usr/local/bin/
- name: Build WASM package
run: wasm-pack build --target bundler --out-dir npm/pkg -- --features wasm
- name: Optimize WASM binary
run: wasm-opt -Oz --all-features npm/pkg/htmlsanitizer_bg.wasm -o npm/pkg/htmlsanitizer_bg.wasm
- name: Remove pkg .gitignore
run: rm -f npm/pkg/.gitignore
- name: Install npm deps & test
working-directory: npm
run: |
npm install
npm test