rchd 2.1.21

Remote Compilation Helper - Local daemon for worker orchestration
[package]
name = "rchd"
version.workspace = true
edition.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
readme.workspace = true
keywords.workspace = true
categories.workspace = true
description = "Remote Compilation Helper - Local daemon for worker orchestration"

[[bin]]
name = "rchd"
path = "src/main.rs"
required-features = ["unix-sockets"]

[dependencies]
rch-common = { workspace = true, features = ["rich-ui"] }
rch-telemetry = { path = "../rch-telemetry", version = "2.1.0" }
serde = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
rand = { workspace = true }
clap = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
thiserror = { workspace = true }
anyhow = { workspace = true }
toml = { workspace = true }
directories = { workspace = true }
shellexpand = "3.1.1"
notify = { workspace = true }
chrono = { workspace = true }
shell-escape = "0.1.5"

[target.'cfg(target_os = "linux")'.dependencies]
# Bind local cancellation signals to a stable process handle after checking
# boot/start identity, so PID reuse cannot redirect a signal between syscalls.
rustix = { version = "1.1.5", default-features = false, features = ["process", "std"] }

[target.'cfg(unix)'.dependencies]
# Direct kill(pid, 0) syscall (safe wrapper) for lease liveness checks —
# forking /bin/kill per stale lease wedged the whole runtime at scale
# (bd-daspu). nix because this crate forbids unsafe_code.
nix = { version = "0.31", default-features = false, features = ["signal", "user"] }
openssh = { workspace = true }
humantime = { workspace = true }
tokio-cron-scheduler = { workspace = true }
cron = { workspace = true }
uuid = { workspace = true }

# Metrics and Observability
prometheus = { workspace = true }
lazy_static = { workspace = true }

# OpenTelemetry
opentelemetry = { workspace = true }
opentelemetry_sdk = { workspace = true }
opentelemetry-otlp = { workspace = true }
tracing-opentelemetry = { workspace = true }

# HTTP server for metrics endpoint
axum = { workspace = true }
tower = { workspace = true }
hyper = { workspace = true }

# HTTP client for webhook dispatch
ureq = { workspace = true }

# HMAC signing for webhooks
hmac = "0.13.0"
sha2 = "0.11.0"

# Rich terminal output (optional)
rich_rust = { workspace = true, optional = true }

[features]
default = ["rich-ui", "unix-sockets"]
rich-ui = ["rich_rust"]
unix-sockets = []

[dev-dependencies]
tempfile = "3.25.0"
rusqlite = { version = "0.40.2", features = ["bundled"] }
whoami = "2.1.3"
rch-common = { workspace = true, features = ["rich-ui"] }
proptest = "1.11.0"
serial_test = "4.0.1"

[lints.rust]
unsafe_code = "forbid"