lo_ 0.3.1

A modern Rust utility library delivering modularity, performance & extras ported from JavaScript Lodash
Documentation
name: lo_ Build, Lint & Test

on:
  push:
    branches: [ main, develop ]
  pull_request:
  workflow_dispatch:
  schedule:
    - cron: "40 1 * * *"  # Daily at 01:40 UTC

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