keleusma 0.2.2

Total Functional Stream Processor with definitive WCET and WCMU verification, targeting no_std + alloc embedded scripting
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - run: cargo check --workspace --all-targets

  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      # nextest runs the workspace's two dozen test binaries in parallel; the
      # `ci` profile (.config/nextest.toml) retries to absorb the known
      # temp-file-race flake. Doc-tests run separately (nextest skips them).
      - uses: taiki-e/install-action@v2
        with:
          tool: nextest
      - run: cargo nextest run --profile ci --workspace
      - run: cargo test --workspace --doc

  test-no-default-features:
    name: Test (no default features)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/install-action@v2
        with:
          tool: nextest
      - run: cargo nextest run --profile ci -p keleusma --no-default-features
      - run: cargo test -p keleusma --no-default-features --doc

  test-signatures:
    name: Test (signatures feature)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/install-action@v2
        with:
          tool: nextest
      - run: cargo nextest run --profile ci -p keleusma --features signatures
      - run: cargo test -p keleusma --features signatures --doc

  test-broad-features:
    name: Test (broad features)
    runs-on: ubuntu-latest
    # `--all-features` is unsuitable for this workspace: it would
    # cascade the mutually-exclusive `narrow-word-*` /
    # `narrow-address-*` selectors into the narrowest configuration
    # and pull in the heavy `sdl3-example` feature, which builds
    # SDL3 from source. The broad set covered here is the docs.rs
    # feature set: defaults (compile + verify + floats) plus the
    # two non-default surfaces (signatures + shell).
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/install-action@v2
        with:
          tool: nextest
      - run: cargo nextest run --profile ci -p keleusma --features signatures,shell
      - run: cargo test -p keleusma --features signatures,shell --doc

  test-bench:
    name: Test (keleusma-bench)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/install-action@v2
        with:
          tool: nextest
      - name: Default features
        run: |
          cargo nextest run --profile ci -p keleusma-bench
          cargo test -p keleusma-bench --doc
      - name: No default features
        run: cargo build -p keleusma-bench --no-default-features

  examples-sdl3:
    name: Examples (SDL3 feature)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      # The `sdl3` crate builds SDL3 from source via cmake under the
      # `build-from-source-static` feature. The cmake configure step
      # requires X11, Wayland, and audio development headers. The
      # dependency list mirrors the SDL3 README for Linux. The
      # earlier `libsdl2-dev` install was wrong: SDL2 development
      # headers are unrelated to the SDL3 source build.
      - name: Install SDL3 build dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y --no-install-recommends \
            cmake ninja-build pkg-config \
            libasound2-dev libpulse-dev libjack-dev libsndio-dev \
            libx11-dev libxext-dev libxrandr-dev libxcursor-dev libxfixes-dev \
            libxi-dev libxss-dev libxtst-dev libxkbcommon-dev \
            libdrm-dev libgbm-dev libgl1-mesa-dev libegl1-mesa-dev libgles2-mesa-dev \
            libdbus-1-dev libudev-dev \
            libwayland-dev libpipewire-0.3-dev libdecor-0-dev
      - name: Build SDL3-gated examples
        run: cargo build --workspace --examples --features sdl3-example

  doc:
    name: Doc
    runs-on: ubuntu-latest
    env:
      RUSTDOCFLAGS: -D warnings -A rustdoc::redundant-explicit-links
    # `--all-features` is unsuitable here for the same reason as
    # the test-broad-features job: the narrow-* selectors and the
    # `sdl3-example` feature would activate together. Build the
    # docs per-crate against the same feature set that docs.rs
    # uses so the CI signal matches the published docs.
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      - name: keleusma (docs.rs feature set)
        run: cargo doc -p keleusma --no-deps --features signatures,encryption,shell
      - name: keleusma-arena (all features)
        run: cargo doc -p keleusma-arena --no-deps --all-features
      - name: keleusma-macros
        run: cargo doc -p keleusma-macros --no-deps
      - name: keleusma-bench
        run: cargo doc -p keleusma-bench --no-deps
      - name: keleusma-cli
        run: cargo doc -p keleusma-cli --no-deps

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - run: cargo clippy --workspace --all-targets -- -D warnings

  fmt:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --check

  msrv-arena:
    name: MSRV keleusma-arena (1.85)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.85
      - run: cargo check -p keleusma-arena
      - run: cargo check -p keleusma-arena --no-default-features

  msrv-keleusma:
    name: MSRV keleusma (1.88)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@1.88
      - run: cargo check -p keleusma
      - run: cargo check -p keleusma --no-default-features
      - run: cargo check -p keleusma --features signatures
      - run: cargo check -p keleusma --tests

  no-std:
    name: no_std build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: thumbv7em-none-eabihf
      - name: Build keleusma against thumbv7em-none-eabihf
        run: cargo build -p keleusma --target thumbv7em-none-eabihf

  rtos-n6-build:
    name: RTOS demonstrator build (N6 / thumbv8m.main-none-eabihf)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: thumbv8m.main-none-eabihf
      - name: three-task-n6
        run: |
          cd examples/rtos
          cargo build --release --bin three-task-n6 \
            --target thumbv8m.main-none-eabihf \
            --no-default-features \
            --features stm32n6570dk-platform
      - name: three-task-n6 with verify (boot-time WCET report)
        run: |
          cd examples/rtos
          cargo build --release --bin three-task-n6 \
            --target thumbv8m.main-none-eabihf \
            --no-default-features \
            --features stm32n6570dk-platform,keleusma-verify
      - name: bench-n6
        run: |
          cd examples/rtos
          cargo build --release --bin bench_n6 \
            --target thumbv8m.main-none-eabihf \
            --no-default-features \
            --features stm32n6570dk-platform

  miri:
    name: Miri
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri
      - name: Stacked borrows
        run: cargo miri test -p keleusma-arena
      - name: Tree borrows
        env:
          MIRIFLAGS: -Zmiri-tree-borrows
        run: cargo miri test -p keleusma-arena

  docs-links:
    name: Doc links
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      - uses: dtolnay/rust-toolchain@stable
      # The link-checker is itself a Keleusma script run through the
      # CLI; it orchestrates POSIX tools and exits non-zero when any
      # relative Markdown link fails to resolve.
      - name: Check relative Markdown links
        run: cargo run -q -p keleusma-cli -- run scripts/check-md-links.kel