rlumod 0.1.2

Safe, no_std matrix updates and linear solves using the LUmod algorithm
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read

concurrency:
  group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  quality:
    name: Quality
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Check out repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install Rust stable
        run: rustup toolchain install stable --profile minimal --component rustfmt --component clippy
      - name: Install pre-commit
        run: python3 -m pip install -r requirements.txt
      - name: Run pre-commit
        run: pre-commit run --all-files
      - name: Lint
        run: cargo +stable clippy --all-targets --all-features -- -D warnings
      - name: Build documentation
        env:
          RUSTDOCFLAGS: -D warnings
        run: cargo +stable doc --all-features --no-deps
      - name: Verify package
        run: cargo +stable package

  native-tests:
    name: Test (${{ matrix.runner }})
    strategy:
      fail-fast: false
      matrix:
        include:
          - runner: ubuntu-22.04
            experimental: false
          - runner: ubuntu-24.04
            experimental: false
          - runner: ubuntu-22.04-arm
            experimental: false
          - runner: ubuntu-24.04-arm
            experimental: false
          - runner: windows-2022
            experimental: false
          - runner: windows-2025
            experimental: false
          - runner: windows-11-arm
            experimental: false
          - runner: macos-15-intel
            experimental: false
          - runner: macos-26-intel
            experimental: false
          - runner: macos-15
            experimental: false
          - runner: macos-26
            experimental: false
          - runner: ubuntu-26.04
            experimental: true
          - runner: ubuntu-26.04-arm
            experimental: true
          - runner: windows-11-vs2026-arm
            experimental: true
          - runner: xcode-27
            experimental: true
    runs-on: ${{ matrix.runner }}
    continue-on-error: ${{ matrix.experimental }}
    timeout-minutes: 15
    steps:
      - name: Check out repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install Rust stable
        run: rustup toolchain install stable --profile minimal
      - name: Run tests
        run: cargo +stable test --all-features

  msrv:
    name: Test MSRV (Rust 1.85)
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Check out repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install Rust 1.85
        run: rustup toolchain install 1.85.0 --profile minimal
      - name: Run all targets on the MSRV
        run: cargo +1.85.0 test --all-targets --all-features

  wasi-tests:
    name: Test WebAssembly (WASI)
    runs-on: ubuntu-latest
    timeout-minutes: 15
    steps:
      - name: Check out repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install Rust stable and WASI target
        run: rustup toolchain install stable --profile minimal --target wasm32-wasip1
      - name: Install Wasmtime
        uses: taiki-e/install-action@7f4eb899022d8fe70b20c4f3de697aa85c309026 # v2
        with:
          tool: wasmtime@47.0.3
          fallback: none
      - name: Run tests in Wasmtime
        env:
          CARGO_TARGET_WASM32_WASIP1_RUNNER: wasmtime
        run: cargo +stable test --target wasm32-wasip1 --all-features --lib --tests

  browser-tests:
    name: Test WebAssembly (Chrome)
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - name: Check out repository
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false
      - name: Install Rust stable and browser WebAssembly target
        run: rustup toolchain install stable --profile minimal --target wasm32-unknown-unknown
      - name: Install wasm-pack
        uses: taiki-e/install-action@7f4eb899022d8fe70b20c4f3de697aa85c309026 # v2
        with:
          tool: wasm-pack@0.15.0
          fallback: none
      - name: Run tests in headless Chrome
        run: wasm-pack test --headless --chrome -- --all-features