name: CI
on:
push:
branches: [main]
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
test:
strategy:
fail-fast: false
matrix:
include:
- { os: ubuntu-latest, rust: stable, features: default, args: "" }
- { os: macos-latest, rust: stable, features: default, args: "" }
- { os: windows-latest, rust: stable, features: default, args: "" }
- { os: ubuntu-latest, rust: stable, features: all, args: "--all-features" }
- { os: ubuntu-latest, rust: "1.88", features: default, args: "" }
- { os: ubuntu-latest, rust: "1.88", features: all, args: "--all-features" }
runs-on: ${{ matrix.os }}
name: test (${{ matrix.os }}, rust ${{ matrix.rust }}, ${{ matrix.features }})
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c with:
toolchain: ${{ matrix.rust }}
- uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae - run: cargo test --locked ${{ matrix.args }}
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c with:
toolchain: stable
components: clippy
- uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae - run: cargo clippy --all-targets --all-features --locked -- -D warnings
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c with:
toolchain: stable
components: rustfmt
- run: cargo fmt --check
- run: ./scripts/check-workflow-pins.sh
rustsec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 with:
token: ${{ secrets.GITHUB_TOKEN }}
homepage:
runs-on: ubuntu-latest
defaults:
run:
working-directory: homepage
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: homepage/package.json
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with:
node-version: "22"
cache: pnpm
cache-dependency-path: homepage/pnpm-lock.yaml
- run: pnpm install --frozen-lockfile
- run: pnpm run audit
- run: pnpm build
node:
runs-on: ubuntu-latest
name: node (Node.js ${{ matrix.node }})
strategy:
fail-fast: false
matrix:
node: ["22", "24"]
defaults:
run:
working-directory: node
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: node/package.json
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with:
node-version: ${{ matrix.node }}
cache: pnpm
cache-dependency-path: node/pnpm-lock.yaml
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c with:
toolchain: stable
- run: pnpm install --frozen-lockfile
- run: pnpm audit --audit-level high
- run: pnpm build
- run: pnpm test
- run: pnpm typecheck
- run: pnpm lint
- run: pnpm pack:check
- run: pnpm smoke:clean
native-windows:
strategy:
fail-fast: false
matrix:
include:
- { os: windows-latest, rust_target: x86_64-pc-windows-msvc }
- { os: windows-11-arm, rust_target: aarch64-pc-windows-msvc }
runs-on: ${{ matrix.os }}
name: native Windows (${{ matrix.rust_target }})
defaults:
run:
working-directory: node
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: node/package.json
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with:
node-version: "22"
cache: pnpm
cache-dependency-path: node/pnpm-lock.yaml
- uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c with:
toolchain: stable
targets: ${{ matrix.rust_target }}
- run: pnpm install --frozen-lockfile
- run: pnpm build:native
env:
FERROMARK_RUST_TARGET: ${{ matrix.rust_target }}