[workspace] resolver = "3" members = [ "crates/forge-core", "crates/forge-git", "crates/forge-ssh", "crates/forge-web", "crates/forge-ci", "crates/forge-runner", ] [workspace.package] version = "0.1.0" edition = "2024" license = "AGPL-3.0-or-later" [workspace.dependencies] tower = { version = "0.5.3", features = ["util"] } tower-http = { version = "0.7.1", features = ["compression-br", "compression-gzip"] } gix = { version = "0.89.0", default-features = false, features = ["revision", "blob-diff", "max-performance-safe", "sha1"] } comrak = "0.56.0" emojis = "0.9.0" ammonia = "4.2.3" syntect = { version = "5.3.0", default-features = false, features = ["default-fancy"] } hmac = "0.13.0" sha1 = "0.11.0" image = { version = "0.25.10", default-features = false, features = ["png", "jpeg", "webp", "gif"] } # internal crates forge-core = { path = "crates/forge-core" } forge-ci = { path = "crates/forge-ci" } forge-git = { path = "crates/forge-git" } forge-ssh = { path = "crates/forge-ssh" } forge-runner = { path = "crates/forge-runner" } # async runtime and HTTP plumbing tokio = { version = "1.53.3", features = ["full"] } futures-util = "0.3.34" bytes = "1.12.1" http = "1.5.0" http-body-util = "0.1.5" async-compression = { version = "0.4.50", features = ["tokio", "gzip"] } tokio-util = "0.7.20" http-body = "1.1.0" # errors, serialization, data thiserror = "2.0.21" globset = "0.4.20" ipnet = "2.12.2" serde = { version = "1.0.229", features = ["derive"] } serde_json = "1.0.154" toml = "1.1.8" ulid = "3.0.0" time = { version = "0.3.55", features = ["formatting", "parsing", "macros"] } unicode-normalization = "0.1.25" form_urlencoded = "1.2.2" jiff = { version = "0.2.38", default-features = false, features = ["std", "tzdb-bundle-always"] } # crypto argon2 = "0.6.0" rand = "0.10.3" sha2 = "0.11.1" hex = "0.4.3" subtle = "2.6.1" base64 = "0.23.1" getrandom = "0.4.3" rpassword = "7.5.4" chacha20poly1305 = "0.11.0" # storage turso = "0.8.3" object_store = { version = "0.14.2", default-features = false, features = ["fs"] } multer = "3.1.0" # outgoing mail (forge-web): SMTP over rustls, no native TLS lettre = { version = "0.11.23", default-features = false, features = ["smtp-transport", "builder", "tokio1-rustls", "ring", "webpki-roots", "pool"] } # web framework topcoat = { version = "0.10.0", default-features = false, features = ["router", "view", "runtime", "cookie", "asset", "serve", "sse", "discover", "multipart"] } # ssh server russh = "0.64.1" # observability tracing = "0.1.44" tracing-subscriber = "0.3.23" # OCI image pulls and layer unpacking (forge-runner) oci-client = "0.18.0" tar = "0.4.46" flate2 = "1.1.10" zstd = "0.14.2" # CLI and test servers (forge-runner) clap = { version = "4.6.7", features = ["derive"] } hyper = { version = "1.12.0", features = ["server", "http1"] } hyper-util = { version = "0.1.21", features = ["tokio"] } # sandbox (forge-runner): in-process containers, no systemd, no youki CLI, no C libraries. # The seccomp profile is built with the pure-Rust seccompiler (json feature resolves syscall names) # and installed by forge-runner's own executor, so libcontainer's libseccomp feature stays off. libcontainer = { version = "0.7.0", default-features = false, features = ["v2"] } seccompiler = { version = "0.5.0", features = ["json"] } oci-spec = "0.10.0" nix = { version = "0.31.3", features = ["signal", "process", "mount", "sched", "user", "resource", "fs"] } # build and test grass = "0.13.4" tempfile = "3.27.0" reqwest = { version = "0.13.5", default-features = false, features = ["rustls", "form", "stream"] } scraper = "0.27.0" similar = "3.2.0" # security advisories (forge-core): semver matching and OSV zip dumps semver = "1.0.28" zip = { version = "9.0.3", default-features = false, features = ["deflate"] } [profile.release] lto = true codegen-units = 1 [profile.dist] inherits = "release" lto = "thin" codegen-units = 16