ferromark 0.7.0

Ultra-high-performance Markdown to HTML compiler
Documentation
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 # v7
      - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master
        with:
          toolchain: ${{ matrix.rust }}
      - uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
      - run: cargo test --locked ${{ matrix.args }}

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
      - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master
        with:
          toolchain: stable
          components: clippy
      - uses: Swatinem/rust-cache@42dc69e1aa15d09112580998cf2ef0119e2e91ae # v2
      - run: cargo clippy --all-targets --all-features --locked -- -D warnings

  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
      - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master
        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 # v7
      - uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 # v2
        with:
          token: ${{ secrets.GITHUB_TOKEN }}

  homepage:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: homepage
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
      - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
        with:
          package_json_file: homepage/package.json
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
        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 # v7
      - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
        with:
          package_json_file: node/package.json
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
        with:
          node-version: ${{ matrix.node }}
          cache: pnpm
          cache-dependency-path: node/pnpm-lock.yaml
      - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master
        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 # v7
      - uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6
        with:
          package_json_file: node/package.json
      - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
        with:
          node-version: "22"
          cache: pnpm
          cache-dependency-path: node/pnpm-lock.yaml
      - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # master
        with:
          toolchain: stable
          targets: ${{ matrix.rust_target }}
      - run: pnpm install --frozen-lockfile
      - run: pnpm build:native
        env:
          FERROMARK_RUST_TARGET: ${{ matrix.rust_target }}