# Deployment rustunnel is deployed as a single static binary. There are no containers, orchestrators, or external services required. ## Release builds CI builds release artifacts on Linux, macOS, and Windows: ```sh cargo build --release ``` The resulting binary is uploaded as a GitHub Actions artifact with a 7-day retention. ## Cross-platform CI The `.github/workflows/ci.yml` runs on `ubuntu-latest`, `windows-latest`, and `macos-latest`: 1. `cargo fmt` — format check 2. `cargo clippy` — lint check 3. `cargo test` — unit and inline tests 4. `cargo build` — debug build 5. `cargo build --release` — release build with artifact upload 6. CLI smoke tests — `--help`, `version`, invalid command/port handling 7. Minimal E2E — generate, listen, connect, SOCKS5, curl ## E2E test flow The E2E job uses `cargo run --release --` for OS-neutral invocation and performs: 1. Generate credentials to a temp directory 2. Start a Python HTTP server as the target 3. Start `rustunnel listen` in the background 4. Start `rustunnel connect` in the background 5. Wait for services to start 6. curl through the SOCKS5 proxy and assert HTTP 200 + expected body content 7. Cleanup via `trap cleanup EXIT` with PID-based and port-based killing ## No production deployment guidance rustunnel is explicitly a lab and development tool. It does not include: - Container images or Dockerfiles - Kubernetes manifests - Systemd service files - Log rotation or monitoring infrastructure For production tunneling, consider established tools like WireGuard, OpenVPN, or SSH. ## Key source files | File | Purpose | | ---- | ------- | | `.github/workflows/ci.yml` | CI matrix: fmt, clippy, test, build, smoke, E2E |