xcell-rust 0.1.0

Pure-Rust port of xCell (Aran et al. 2017) cell-type enrichment — ssGSEA, spillover-corrected — validated for numeric parity against the R xCell package. Built on gsva-rust.
Documentation
name: CI

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

# xcell-rust validates its port against the R xCell package offline: the
# committed synthetic-parity test compares against reference values dumped from R
# xCell at port time, so CI needs no R installation. (The real-data parity
# example additionally needs R + a public expression matrix; it is run locally,
# not in CI.) The crate has one path dependency (gsva-rust) and a single cargo
# feature, `parallel` (on by default), so two configurations are exercised: the
# default (parallel, pulls rayon) and `--no-default-features` (serial, whose only
# dependency is gsva-rust's zero-dependency core). The two only reorder
# independent per-sample work, so they are numerically identical. Runs on Windows
# to match the development platform.
jobs:
  check:
    name: fmt + clippy + test
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
        with:
          # gsva-rust is a sibling path dependency; check it out alongside.
          repository: sinmojito/gsva-rust
          path: gsva-rust
      - uses: actions/checkout@v4
        with:
          path: xcell-rust

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - name: Format
        working-directory: xcell-rust
        run: cargo fmt --all -- --check

      - name: Clippy (default = parallel)
        working-directory: xcell-rust
        run: cargo clippy --all-targets --all-features -- -D warnings

      - name: Clippy (serial)
        working-directory: xcell-rust
        run: cargo clippy --no-default-features --all-targets -- -D warnings

      - name: Test (default = parallel)
        working-directory: xcell-rust
        run: cargo test

      - name: Test (serial)
        working-directory: xcell-rust
        run: cargo test --no-default-features

  msrv:
    name: MSRV 1.85 (both feature configs)
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4
        with:
          repository: sinmojito/gsva-rust
          path: gsva-rust
      - uses: actions/checkout@v4
        with:
          path: xcell-rust

      # MSRV is inherited from gsva-rust, which declares rust-version 1.85 (its
      # default faer build needs edition2024, stabilized in 1.85). cargo enforces
      # a dependency's rust-version on every build that compiles it, so xcell-rust
      # cannot build below 1.85 even though its own code otherwise could.
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: "1.85.0"

      - name: Build on MSRV (default = parallel)
        working-directory: xcell-rust
        run: cargo build

      - name: Build on MSRV (serial)
        working-directory: xcell-rust
        run: cargo build --no-default-features