[package]
name = "kuiper-forge"
version = "0.5.0"
edition = "2024"
rust-version.workspace = true
license.workspace = true
repository.workspace = true
description = "KuiperForge - CI runner coordinator for ephemeral VMs"

[features]
default = ["sqlite"]
sqlite = ["sqlx/sqlite"]
postgres = ["sqlx/postgres"]

[dependencies]
# CLI
clap = { workspace = true }

# Error handling
anyhow = { workspace = true }
thiserror = { workspace = true }

# Serialization
serde = { workspace = true }
serde_json = { workspace = true }

# Configuration (supports TOML files + environment variables)
figment = { version = "0.10", features = ["toml", "env"] }

# Async runtime
tokio = { workspace = true }
tokio-stream = { workspace = true }
async-trait = { workspace = true }

# Database
sqlx = { version = "0.8", features = ["runtime-tokio", "chrono"] }

# gRPC
tonic = { workspace = true }
kuiper-agent-proto = { version = "0.2.0", path = "../kuiper-agent-proto" }

# TLS/Certificates
rcgen = { workspace = true }
rustls-pemfile = { workspace = true }
tokio-rustls = { version = "0.26", default-features = false, features = ["aws-lc-rs", "tls12"] }
x509-parser = "0.18"

# Time and IDs
chrono = { workspace = true }
uuid = { workspace = true }
time = "0.3"

# GitHub API
reqwest = { workspace = true }
jsonwebtoken = { version = "10", default-features = false, features = ["aws_lc_rs", "use_pem"] }
base64 = "0.22"

# Utilities
rand = { workspace = true }
hex = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }
tracing-appender = { workspace = true }
dirs = { workspace = true }

# HTTP server (for webhook)
axum = { workspace = true }
hmac = { workspace = true }
sha2 = { workspace = true }
hyper = { version = "1.0", features = ["server", "http1", "http2"] }
hyper-util = { version = "0.1", features = ["tokio", "server", "http2"] }
tower = { version = "0.5", features = ["util"] }
http-body-util = "0.1"
bytes = "1"

# PROXY protocol support (for load balancers)
ppp = "2"

# Admin UI
askama = { version = "0.12", features = ["with-axum"] }
askama_axum = "0.4"
argon2 = { version = "0.5", features = ["std"] }
axum-extra = { version = "0.10", features = ["cookie"] }
rpassword = "7"

[dev-dependencies]
tempfile = "3"
tokio-stream = { workspace = true }
rustls = { workspace = true }
rustls-pemfile = { workspace = true }
h2 = "0.4"
http = "1"
