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.85", features: default, args: "" }
- { os: ubuntu-latest, rust: "1.85", features: all, args: "--all-features" }
runs-on: ${{ matrix.os }}
name: test (${{ matrix.os }}, rust ${{ matrix.rust }}, ${{ matrix.features }})
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with:
toolchain: ${{ matrix.rust }}
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 - run: cargo test --locked ${{ matrix.args }}
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with:
toolchain: stable
components: clippy
- uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 - run: cargo clippy --all-targets --all-features --locked -- -D warnings
fmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with:
toolchain: stable
components: rustfmt
- run: cargo fmt --check
- run: ./scripts/check-workflow-pins.sh
rustsec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 with:
token: ${{ secrets.GITHUB_TOKEN }}
homepage:
runs-on: ubuntu-latest
defaults:
run:
working-directory: homepage
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: homepage/package.json
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e 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: ["20", "22", "24"]
defaults:
run:
working-directory: node
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: node/package.json
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e with:
node-version: ${{ matrix.node }}
cache: pnpm
cache-dependency-path: node/pnpm-lock.yaml
- uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 with:
package_json_file: node/package.json
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e with:
node-version: "22"
cache: pnpm
cache-dependency-path: node/pnpm-lock.yaml
- uses: dtolnay/rust-toolchain@fa04a1451ff1842e2626ccb99004d0195b455a88 with:
toolchain: stable
targets: ${{ matrix.rust_target }}
- run: pnpm install --frozen-lockfile
- run: pnpm build:native
env:
FERROMARK_RUST_TARGET: ${{ matrix.rust_target }}