sync-oneshot 0.1.0

A minimal oneshot channel for synchronous Rust.
Documentation
name: ci

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

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt-clippy:
    name: Format & Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy
      - name: Check Formatting
        run: cargo fmt --all -- --check
      - name: Clippy
        run: cargo clippy --all-targets --all-features -- -D warnings

  test:
    name: Test (${{ matrix.os }})
    needs: fmt-clippy
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    steps:
      - uses: actions/checkout@v6
      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
      - name: Run loom Tests
        if: matrix.os == 'ubuntu-latest'
        run: cargo test --tests --release
        env:
          RUSTFLAGS: "--cfg loom"
      - name: Run Tests
        run: cargo test --tests
      - name: Run Doc Tests
        run: cargo test --doc

  miri:
    name: Miri (UB Check)
    needs: fmt-clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install Nightly Rust
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: miri
      - name: Run Miri
        # -Zmiri-tree-borrows: Experimental but better for finding aliasing bugs
        # --tests: Miri is slow; we prioritize the core library logic
        run: |
          cargo miri setup
          cargo miri test --tests
        env:
          MIRIFLAGS: "-Zmiri-tree-borrows"