# Tooling ## Build system Cargo is the sole build tool. No custom build scripts or Makefiles are used. - `cargo build` — debug build - `cargo build --release` — optimized release build - `cargo check` — fast type-checking ## Linting and formatting - `cargo fmt --check` — enforces rustfmt formatting - `cargo clippy --all-targets -- -D warnings` — runs clippy on all targets with warnings as errors ## CI/CD GitHub Actions runs the full matrix on every push and PR: | Job | Platforms | Purpose | | --- | --------- | ------- | | `fmt` | Ubuntu | Format check | | `clippy` | Linux, macOS, Windows | Lint check | | `test` | Linux, macOS, Windows | Unit and inline tests | | `build` | Linux, macOS, Windows | Debug build | | `release-build` | Linux, macOS, Windows | Release build + artifact upload | | `smoke` | Linux, macOS, Windows | CLI smoke tests (--help, version, invalid command/port) | | `e2e-minimal` | Linux, macOS, Windows | Full end-to-end flow: generate, listen, connect, SOCKS5, curl | The E2E job uses `cargo run --release --` for OS-neutral binary invocation and includes cross-platform cleanup helpers (`kill_process`, `kill_by_port`) invoked via `trap cleanup EXIT`. ## Dependencies Dependencies are managed in `Cargo.toml`. Notable choices: - `tokio` with `full` features for async runtime - `rustls` with `ring` for TLS (no OpenSSL) - `rcgen` for certificate generation - `clap` with `derive` for CLI parsing - `tracing` and `tracing-subscriber` for structured logging