name: lo_ Build, Lint & Test
on:
push:
branches: [ main, develop ]
pull_request:
workflow_dispatch:
schedule:
- cron: "40 1 * * *"
jobs:
build-test-linux:
name: Build and Test (Linux)
runs-on: ubuntu-latest
strategy:
matrix:
toolchain: [stable, beta, nightly]
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Set up Rust (${{ matrix.toolchain }})
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ matrix.toolchain }}
override: true
- name: Build workspace
run: cargo build --workspace
- name: Run tests
run: cargo test --workspace
build-test-windows:
name: Build and Test (Windows)
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Set up Rust (stable)
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Build workspace
run: cargo build --workspace
- name: Run tests (skip optional UI tests if needed)
run: cargo test --workspace
clippy:
name: Lint with Clippy
runs-on: ubuntu-latest
if: github.event_name != 'pull_request'
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: Set up Rust (stable)
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run Clippy
run: cargo clippy --workspace -- -D warnings
docs:
name: Documentation
runs-on: ubuntu-latest
timeout-minutes: 20
env:
RUSTDOCFLAGS: -D warnings
steps:
- uses: actions/checkout@v4
- name: Set up Rust (stable)
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Build docs
run: cargo doc --workspace --no-deps
minimal-lockfile:
name: Validate Minimal Versions
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- name: Set up Rust (stable)
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Generate minimal Cargo.lock
run: cargo +nightly generate-lockfile -Z minimal-versions
- name: Validate workspace
run: cargo check --locked --workspace