yog 0.0.1

yog: a balls-oriented session manager for lernie loops (egui frontend)
Documentation
name: CI

on:
  push:
    branches: [main]
  # Gate pull requests too — notably release-plz's own release PR, which must go
  # green before it is merged (release-plz.yml's release job keys off a CI run
  # concluding `success`, and its `workflow_run` filter matches `name:` above
  # exactly, so this workflow's name must stay `CI`).
  pull_request:
  workflow_dispatch:

jobs:
  linux:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@v2
      - name: Cache cargo-tarpaulin 0.35.2
        id: tarpaulin-cache
        uses: actions/cache@v4
        with:
          path: ~/.cargo/bin/cargo-tarpaulin
          key: cargo-tarpaulin-0.35.2-${{ runner.os }}
      - name: Install cargo-tarpaulin 0.35.2
        if: steps.tarpaulin-cache.outputs.cache-hit != 'true'
        run: cargo install cargo-tarpaulin --version 0.35.2 --locked
      - name: Cache cargo-deny 0.20.2
        id: deny-cache
        uses: actions/cache@v4
        with:
          path: ~/.cargo/bin/cargo-deny
          key: cargo-deny-0.20.2-${{ runner.os }}
      - name: Install cargo-deny 0.20.2
        if: steps.deny-cache.outputs.cache-hit != 'true'
        run: cargo install cargo-deny --version 0.20.2 --locked
      # ast-grep 0.44.1 (pinned — sgconfig.yml). `make ci` -> `make lint` runs
      # `make rules-audit` (ast-grep scan src + the rules/fixtures negative
      # check), so ast-grep must be on PATH before `make ci`.
      - name: Cache ast-grep 0.44.1
        id: astgrep-cache
        uses: actions/cache@v4
        with:
          path: ~/.cargo/bin/ast-grep
          key: ast-grep-0.44.1-${{ runner.os }}
      - name: Install ast-grep 0.44.1
        if: steps.astgrep-cache.outputs.cache-hit != 'true'
        run: cargo install ast-grep --version 0.44.1 --locked
      # `make ci` == `make check`: fmt-check + lint (clippy + rules-audit +
      # cargo deny check) + coverage. The lint target folds in the supply-chain
      # and ast-grep audits, so there is no separate CI-only step to drift.
      - run: make ci
      - name: Doctests
        run: cargo test --doc --workspace

  macos:
    runs-on: macos-14
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo build --locked
      - run: make test