[workspace]
members = [
".",
]
resolver = "2"
[workspace.package]
version = "0.14.1"
authors = ["Daniel Thom", "Joseph McKinsey"]
license = "BSD-3-Clause"
edition = "2024"
repository = "https://github.com/NREL/torc"
description = "Workflow management system"
[workspace.dependencies]
torc = { version = "0.14.1", path = "." }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
config = { version = "0.14", features = ["toml"] }
dirs = "5"
toml = "0.8"
serde_repr = "0.1"
serde_with = { version = "3.8", default-features = false, features = ["base64", "std", "macros"] }
chrono = { version = "0.4", features = ["serde"] }
log = "0.4.28"
env_logger = "0.11"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "json"] }
tracing-appender = "0.2"
tracing-timing = "0.6"
hdrhistogram = "7.5"
signal-hook = "0.3"
libc = "0.2"
file-rotate = "0.7"
clap = { version = "4.5", features = ["derive", "env", "color"] }
clap_complete = "4.5"
tokio = { version = "1.47", features = ["rt-multi-thread", "macros", "net", "signal", "process", "io-util"] }
url = "2.5"
validator = { version = "0.16", features = ["derive"] }
mime = "0.3"
futures = "0.3"
bcrypt = "0.15"
rpassword = "7.3"
ratatui = "0.29"
crossterm = "0.28"
petgraph = "0.6"
plotly = { version = "0.10", default-features = false, features = ["kaleido"] }
rust-embed = "8.5"
async-trait = "0.1.24"
async-stream = "0.3"
axum = { version = "0.7", features = ["tokio", "http1", "http2"] }
tower = "0.4"
tower-http = { version = "0.5", features = ["cors", "fs"] }
mime_guess = "2.0"
swagger = { version = "6.1", features = ["serdejson", "server", "client", "tls", "tcp"] }
hyper = { version = "0.14", features = ["full"] }
serde_ignored = "0.1.1"
percent-encoding = "2.1.0"
regex = "1.3"
lazy_static = "1.4"
parking_lot = "0.12"
anyhow = "1"
sqlx = { version = "0.8.6", features = ["runtime-tokio", "sqlite"] }
dotenvy = "0.15.7"
iso8601 = "0.6"
jsonwebtoken = "9.3.0"
sha2 = "0.10"
reqwest = { version = "0.12", default-features = false, features = ["json", "blocking", "multipart", "native-tls", "stream"] }
sysinfo = "0.29"
hostname = "0.4.1"
json5 = "0.4"
serde_yaml = "0.9"
tabled = "0.17"
kdl = "6.5"
rusqlite = { version = "0.32", features = ["bundled"] }
nvml-wrapper = "0.10"
shlex = "1.3"
flate2 = "1.0"
tar = "0.4"
service-manager = "0.7"
native-tls = "0.2"
hyper-tls = "0.5"
hyper-openssl = "0.9"
openssl = "0.10"
rmcp = { version = "0.1", features = ["server", "macros", "transport-io"] }
schemars = "1.0"
uuid = { version = "1.11", features = ["v4"] }
tokio-openssl = "0.6"
[package]
name = "torc"
version.workspace = true
authors.workspace = true
license.workspace = true
edition.workspace = true
repository.workspace = true
description.workspace = true
[[bin]]
name = "torc"
path = "src/main.rs"
required-features = ["client", "tui", "plot_resources"]
[[bin]]
name = "torc-server"
path = "src/bin/torc-server.rs"
required-features = ["server-bin"]
[[bin]]
name = "torc-htpasswd"
path = "src/bin/torc-htpasswd.rs"
required-features = ["server-bin"]
[[bin]]
name = "torc-mcp-server"
path = "src/bin/torc-mcp-server.rs"
required-features = ["mcp-server"]
[[bin]]
name = "torc-dash"
path = "src/bin/torc-dash.rs"
required-features = ["dash"]
[[bin]]
name = "torc-slurm-job-runner"
path = "src/bin/torc-slurm-job-runner.rs"
required-features = ["slurm-runner"]
[features]
default = ["client", "tui", "plot_resources"]
config = [
"dep:config",
"dep:dirs",
"dep:toml",
]
server = [
"dep:async-trait",
"dep:async-stream",
"dep:swagger",
"dep:hyper",
"dep:serde_ignored",
"dep:percent-encoding",
"dep:regex",
"dep:lazy_static",
"dep:anyhow",
"dep:sqlx",
"dep:tokio",
"dep:dotenvy",
"dep:jsonwebtoken",
"dep:sha2",
"dep:tracing",
"dep:bcrypt",
"dep:rust-embed",
"dep:parking_lot",
]
client = [
"dep:reqwest",
"dep:sysinfo",
"dep:hostname",
"dep:json5",
"dep:serde_yaml",
"dep:kdl",
"dep:clap",
"dep:clap_complete",
"dep:env_logger",
"dep:serde_with",
"dep:serde_repr",
"dep:tabled",
"dep:anyhow",
"dep:regex",
"dep:rusqlite",
"dep:rpassword",
"dep:signal-hook",
"dep:libc",
"dep:nvml-wrapper",
"dep:percent-encoding",
"dep:sha2",
"dep:shlex",
"dep:flate2",
"dep:tar",
"config",
]
tui = [
"client",
"dep:ratatui",
"dep:crossterm",
"dep:petgraph",
]
plot_resources = [
"dep:plotly",
"dep:rusqlite",
"dep:anyhow",
]
server-bin = [
"server",
"config",
"dep:clap",
"dep:tracing-subscriber",
"dep:tracing-appender",
"dep:tracing-timing",
"dep:hdrhistogram",
"dep:service-manager",
"dep:file-rotate",
"dep:rpassword",
"dep:openssl",
"dep:tokio-openssl",
"dep:daemonize",
]
mcp-server = [
"client",
"dep:rmcp",
"dep:schemars",
"dep:tempfile",
"dep:tracing-subscriber",
"dep:tokio",
"dep:anyhow",
"dep:tracing",
]
dash = [
"client",
"config",
"dep:axum",
"dep:tower",
"dep:tower-http",
"dep:mime_guess",
"dep:uuid",
"dep:tracing-subscriber",
"dep:rust-embed",
"dep:async-stream",
"dep:tokio",
"dep:anyhow",
"dep:tracing",
]
slurm-runner = [
"client",
]
dist = ["client", "tui", "plot_resources", "server-bin", "mcp-server", "dash", "slurm-runner"]
cli-docs = ["dep:clap-markdown"]
conversion = ["frunk", "frunk_derives", "frunk_core", "frunk-enum-core", "frunk-enum-derive"]
[target.'cfg(any(target_os = "macos", target_os = "windows", target_os = "ios"))'.dependencies]
native-tls = { workspace = true, optional = true }
hyper-tls = { workspace = true, optional = true }
[target.'cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))'.dependencies]
hyper-openssl = { workspace = true, optional = true }
[dependencies]
serde.workspace = true
serde_json.workspace = true
chrono.workspace = true
log.workspace = true
mime.workspace = true
futures.workspace = true
validator.workspace = true
async-trait = { workspace = true, optional = true }
async-stream = { workspace = true, optional = true }
swagger = { workspace = true, optional = true }
hyper = { workspace = true, optional = true }
serde_ignored = { workspace = true, optional = true }
percent-encoding = { workspace = true, optional = true }
regex = { workspace = true, optional = true }
lazy_static = { workspace = true, optional = true }
anyhow = { workspace = true, optional = true }
sqlx = { workspace = true, optional = true }
tokio = { workspace = true, optional = true }
dotenvy = { workspace = true, optional = true }
iso8601 = { workspace = true }
jsonwebtoken = { workspace = true, optional = true }
sha2 = { workspace = true, optional = true }
tracing = { workspace = true, optional = true }
bcrypt = { workspace = true, optional = true }
rust-embed = { workspace = true, optional = true }
parking_lot = { workspace = true, optional = true }
reqwest = { workspace = true, optional = true }
sysinfo = { workspace = true, optional = true }
hostname = { workspace = true, optional = true }
json5 = { workspace = true, optional = true }
serde_yaml = { workspace = true, optional = true }
kdl = { workspace = true, optional = true }
serde_with = { workspace = true, optional = true }
serde_repr = { workspace = true, optional = true }
url = { workspace = true }
clap = { workspace = true, optional = true }
clap_complete = { workspace = true, optional = true }
env_logger = { workspace = true, optional = true }
tabled = { workspace = true, optional = true }
rusqlite = { workspace = true, optional = true }
rpassword = { workspace = true, optional = true }
signal-hook = { workspace = true, optional = true }
libc = { workspace = true, optional = true }
nvml-wrapper = { workspace = true, optional = true }
shlex = { workspace = true, optional = true }
flate2 = { workspace = true, optional = true }
tar = { workspace = true, optional = true }
ratatui = { workspace = true, optional = true }
crossterm = { workspace = true, optional = true }
petgraph = { workspace = true, optional = true }
plotly = { workspace = true, optional = true }
tracing-subscriber = { workspace = true, optional = true }
tracing-appender = { workspace = true, optional = true }
tracing-timing = { workspace = true, optional = true }
hdrhistogram = { workspace = true, optional = true }
service-manager = { workspace = true, optional = true }
file-rotate = { workspace = true, optional = true }
openssl = { workspace = true, optional = true }
tokio-openssl = { workspace = true, optional = true }
rmcp = { workspace = true, optional = true }
schemars = { workspace = true, optional = true }
tempfile = { version = "3", optional = true }
axum = { workspace = true, optional = true }
tower = { workspace = true, optional = true }
tower-http = { workspace = true, optional = true }
mime_guess = { workspace = true, optional = true }
uuid = { workspace = true, optional = true }
config = { workspace = true, optional = true }
dirs = { workspace = true, optional = true }
toml = { workspace = true, optional = true }
frunk = { version = "0.4.0", optional = true }
frunk_derives = { version = "0.4.0", optional = true }
frunk_core = { version = "0.4.0", optional = true }
frunk-enum-derive = { version = "0.3.0", optional = true }
frunk-enum-core = { version = "0.3.0", optional = true }
[target.'cfg(not(any(target_os = "macos", target_os = "windows", target_os = "ios")))'.dev-dependencies]
tokio-openssl = "0.6"
openssl = "0.10"
[target.'cfg(windows)'.dev-dependencies]
openssl-sys = { version = "0.9", features = ["vendored"] }
[target.'cfg(unix)'.dependencies]
daemonize = { version = "0.5", optional = true }
[target.'cfg(target_env = "musl")'.dependencies]
openssl = { version = "0.10", features = ["vendored"] }
[dev-dependencies]
rstest = "0.26.1"
tempfile = "3.22.0"
serial_test = "3.0"
reqwest = { workspace = true }
clap-markdown = "0.1"
libc = "0.2"
cargo-husky = { version = "1", default-features = false, features = ["precommit-hook", "user-hooks"] }
[dependencies.clap-markdown]
version = "0.1"
optional = true