deki 0.4.0

A base for most of my rust projects (tailored to myself)!
Documentation
name: CI

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

env:
  CARGO_TERM_COLOR: always

jobs:
  # ── formatting & clippy ──────────────────────────────────────────
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy

      - name: Clippy (all features)
        run: cargo clippy --workspace --all-targets --all-features -- -D warnings

  # ── test matrix ──────────────────────────────────────────────────
  test:
    name: Test (${{ matrix.feature.name }} / ${{ matrix.rust }})
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust: [stable, nightly]
        feature:
          - { name: "default", args: "" }
          - { name: "no-default", args: "--no-default-features" }
          - { name: "random", args: "--features random" }
          - { name: "approx", args: "--features approx" }
          - { name: "lerp", args: "--features lerp" }
          - { name: "derive_more", args: "--features derive_more" }
          - { name: "all-features", args: "--all-features" }
      fail-fast: false

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust ${{ matrix.rust }}
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.rust }}

      - name: Build
        run: cargo build ${{ matrix.feature.args }} --workspace

      - name: Run tests
        run: cargo test ${{ matrix.feature.args }} --workspace

      - name: Run doc tests
        run: cargo test ${{ matrix.feature.args }} --workspace --doc

  # ── MSRV check ───────────────────────────────────────────────────
  msrv:
    name: MSRV
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust 1.85
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: "1.85"

      - name: Build with default features
        run: cargo build --workspace

      - name: Build with all features
        run: cargo build --workspace --all-features

      - name: Run tests
        run: cargo test --workspace

  # ── publish dry-run ──────────────────────────────────────────────
  publish-check:
    name: Publish Check
    runs-on: ubuntu-latest
    needs: [lint, test, msrv]
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust stable
        uses: dtolnay/rust-toolchain@stable

      - name: Check each crate individually
        run: |
          for crate in deki_core deki_macros deki_proc; do
            echo "=== $crate ==="
            cargo check -p "$crate" --all-features
          done

      - name: Publish dry-run
        run: cargo publish --workspace --dry-run