[package]
name = "tvix-store"
version = "0.1.0"
edition = "2021"

[dependencies]
anyhow = { workspace = true }
async-compression = { workspace = true, features = ["tokio", "bzip2", "gzip", "xz", "zstd"] }
async-stream = { workspace = true }
blake3 = { workspace = true, features = ["rayon", "std"] }
bstr = { workspace = true }
bytes = { workspace = true }
clap = { workspace = true, features = ["derive", "env"] }
count-write = { workspace = true }
data-encoding = { workspace = true }
ed25519 = { workspace = true }
ed25519-dalek = { workspace = true }
futures = { workspace = true }
nix-compat = { path = "../nix-compat", features = ["async"] }
pin-project-lite = { workspace = true }
prost = { workspace = true }
serde = { workspace = true, features = ["derive"] }
serde_json = { workspace = true }
serde_with = { workspace = true }
serde_qs = { workspace = true }
sha2 = { workspace = true }
thiserror = { workspace = true }
tokio = { workspace = true, features = ["fs", "macros", "net", "rt", "rt-multi-thread", "signal"] }
tokio-listener = { workspace = true, features = ["clap", "multi-listener", "sd_listen", "tonic012"] }
tokio-stream = { workspace = true, features = ["fs"] }
tokio-util = { workspace = true, features = ["io", "io-util", "compat"] }
tonic = { workspace = true, features = ["tls", "tls-roots"] }
tower = { workspace = true }
tower-http = { workspace = true, features = ["trace"] }
tvix-castore = { path = "../castore" }
url = { workspace = true }
walkdir = { workspace = true }
reqwest = { workspace = true, features = ["rustls-tls-native-roots", "stream"] }
reqwest-middleware = { workspace = true }
lru = { workspace = true }
parking_lot = { workspace = true }
tvix-tracing = { path = "../tracing", features = ["tonic", "reqwest"] }
tracing = { workspace = true }
tracing-indicatif = { workspace = true }
hyper-util = { workspace = true }
toml = { version = "0.8.19", optional = true }
tonic-health = { workspace = true }
redb = { workspace = true, features = ["logging"] }
mimalloc = { workspace = true }
tonic-reflection = { workspace = true, optional = true }
bigtable_rs = { workspace = true, optional = true }
auto_impl = "1.2.0"

[build-dependencies]
prost-build = { workspace = true }
tonic-build = { workspace = true }

[dev-dependencies]
async-process = { workspace = true }
rstest = { workspace = true }
rstest_reuse = { workspace = true }
tempfile = { workspace = true }
tokio-retry = { workspace = true }

[features]
default = ["cloud", "fuse", "otlp", "tonic-reflection"]
cloud = [
  "dep:bigtable_rs",
  "tvix-castore/cloud"
]
fuse = ["tvix-castore/fuse"]
otlp = ["tvix-tracing/otlp"]
tonic-reflection = ["dep:tonic-reflection", "tvix-castore/tonic-reflection"]
tracy = ["tvix-tracing/tracy"]
virtiofs = ["tvix-castore/virtiofs"]
xp-composition-cli = ["toml", "tvix-castore/xp-composition-url-refs"]
# Whether to run the integration tests.
# Requires the following packages in $PATH:
# cbtemulator, google-cloud-bigtable-tool
integration = []

[lints]
workspace = true