[package] name = "rdbms-playground" version = "0.1.0" edition = "2024" description = "A cross-platform TUI playground for learning relational databases." license = "MIT OR Apache-2.0" repository = "https://git.lazyeval.net/oli/rdbms-playground" homepage = "https://relplay.org" readme = "README.md" keywords = ["database", "sql", "tui", "learning", "playground"] categories = ["command-line-utilities", "database"] # Keep the published crate to the code that builds the binary — the website, # decision records, and CI plumbing are repo-only (ADR-0056). exclude = ["/website", "/docs", "/.gitea", "/.codegraph"] # `publish = false` removed (ADR-0056): the crate is intended for # crates.io. The actual `cargo publish` is a deliberate, irreversible # maintainer step (needs the crates.io token) — do it at a tagged release # whose assets the binstall metadata below points at. [dependencies] anyhow = "1.0.102" # Native system-clipboard for the `copy` command (ADR-0041). Text # only: `default-features = false` drops the heavy `image` crate. On # Linux this is X11-only — `wayland-data-control` is deliberately # omitted (it ~doubles the dep tree), as OSC 52 covers native-Wayland # sessions and XWayland covers the rest. arboard = { version = "3.6.1", default-features = false } base64 = "0.22.1" # `clock` brings local-timezone support (UTC → machine local) for # the undo-dialog snapshot timestamp (issue #13). No locale feature: # month names stay English; `unstable-locales` is deliberately avoided. chrono = { version = "0.4.44", default-features = false, features = ["clock"] } crossterm = { version = "0.29.0", features = ["event-stream"] } csv = "1.4.0" directories = "6.0.0" # Realistic fake-data generators for the `seed` command (ADR-0048): # names, emails, addresses, companies, lorem, etc. Default features # only — the basic fakers need no flags; date/datetime values are # generated in-house (rand + the existing `chrono`) for the bounded # windows ADR-0048 D8 requires, so `fake`'s `chrono` feature is # deliberately omitted. No commerce/product module exists, so the # `product` generator is hand-rolled (D9). fake = "5" futures-util = "0.3.32" gethostname = "1.1.0" rand = "0.10.1" ratatui = "0.30.0" rusqlite = { version = "0.39.0", features = ["backup", "bundled", "column_metadata"] } serde = { version = "1.0.228", features = ["derive"] } # Maintained fork of `serde_yaml` (the deprecated original). Replaces # `serde_yml`, which was archived as unsound + unmaintained # (RUSTSEC-2025-0068, and its `libyml` backend RUSTSEC-2025-0067). serde_norway = "0.9.42" sysinfo = { version = "0.39.0", default-features = false, features = ["system"] } tokio = { version = "1.52.2", features = ["full"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.23", features = ["env-filter"] } zip = { version = "5.1.1", default-features = false, features = ["deflate"] } [dev-dependencies] insta = { version = "1.47.2", features = ["yaml"] } pretty_assertions = "1.4.1" tempfile = "3.27.0" # Dev/test build hygiene (see CLAUDE.md "Build hygiene"). `cargo test` # links ~25 separate integration-test binaries, each statically # embedding the bundled engine + every dependency; the `test` profile # inherits these from `dev`. # - incremental = false: the incremental cache reached 16 GB here for # little benefit in a full-suite workflow; disabling it keeps target/ # bounded. # - debug = "line-tables-only": full debug info (the default `debug = 2`) # is ~85-90% of each test binary; line tables keep file:line in panics # and backtraces (we debug via `tracing` logs, not a step-debugger) at # a fraction of the size. [profile.dev] incremental = false debug = "line-tables-only" # Release builds back the distributed binaries (D2: single static binary). # strip = "symbols" drops the symbol table at link time so the shipped artifact # is lean (≈13 MB → 10 MB for the musl build) without a separate strip step. [profile.release] strip = "symbols" [lints.rust] unsafe_code = "forbid" unreachable_pub = "warn" [lints.clippy] all = { level = "warn", priority = -1 } nursery = { level = "warn", priority = -1 } # Allow common false-positives that don't materially improve our code. module_name_repetitions = "allow" missing_errors_doc = "allow" missing_panics_doc = "allow" # cargo-binstall (ADR-0056): let `cargo binstall rdbms-playground` fetch the # prebuilt release binary instead of compiling from source. Our release assets # are BARE binaries (no archive) named `rdbms-playground-v-` # (`.exe` on Windows) with `.sha256` sidecars (ADR-ci-003), so `pkg-fmt = "bin"`. # `{ version }` excludes the leading `v`, so the template spells `v{ version }`. # # Target mapping: macOS host triples match our asset triples directly. But we # ship the fully-static *-linux-MUSL build (glibc hosts are *-linux-gnu) and # *-windows-GNU/GNULLVM (most Windows hosts are *-msvc), so those common host # triples need explicit overrides pointing at the asset we actually publish. # # NOTE: unverified against a real `cargo binstall` run (binstall isn't a dep and # nothing is on crates.io yet) — validate at the first publish + matching release. [package.metadata.binstall] pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-{ target }{ archive-suffix }" pkg-fmt = "bin" bin-dir = "{ bin }{ binary-ext }" [package.metadata.binstall.overrides.x86_64-unknown-linux-gnu] pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-x86_64-unknown-linux-musl" [package.metadata.binstall.overrides.aarch64-unknown-linux-gnu] pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-aarch64-unknown-linux-musl" [package.metadata.binstall.overrides.x86_64-pc-windows-msvc] pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-x86_64-pc-windows-gnu.exe" [package.metadata.binstall.overrides.aarch64-pc-windows-msvc] pkg-url = "{ repo }/releases/download/v{ version }/{ name }-v{ version }-aarch64-pc-windows-gnullvm.exe"