[workspace]
resolver = "2"

members = [
  "crates/turbo-trace",
  "crates/turborepo*",
  "crates/coverage",
  "packages/turbo-repository/rust",
]

[workspace.package]
edition = "2024"

[workspace.metadata.groups]
# Only the libraries, does not include the turborepo binary.
# That way we don't have to build the Go code
turborepo-libraries = ["path:crates/turborepo-*"]
turborepo = ["path:crates/turborepo*"]

[workspace.lints.rust]
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(debug_assert)'] }

[workspace.lints.clippy]
too_many_arguments = "allow"

# Set the options for dependencies (not crates in the workspace), this mostly impacts cold builds
[profile.dev.package."*"]
opt-level = 1

# Set the settings for build scripts and proc-macros.
[profile.dev.build-override]
opt-level = 3

[profile.release]
lto = "off"

[profile.release-turborepo-lsp]
inherits = "release"
strip = true
opt-level = "z"

[profile.release-turborepo]
inherits = "release"
strip = true

# Declare dependencies used across workspace packages requires single version bump.
# ref: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#inheriting-a-dependency-from-a-workspace
[workspace.dependencies]
async-recursion = "1.0.2"
miette = { version = "7.5.0", features = ["fancy"] }
markdown = "1.0.0-alpha.18"

turbo-trace = { path = "crates/turbo-trace" }
turbo-updater = { path = "crates/turborepo-updater" }
turbopath = { path = "crates/turborepo-paths" }
turborepo = { path = "crates/turborepo" }
turborepo-analytics = { path = "crates/turborepo-analytics" }
turborepo-api-client = { path = "crates/turborepo-api-client" }
turborepo-auth = { path = "crates/turborepo-auth" }
turborepo-cache = { path = "crates/turborepo-cache" }
turborepo-ci = { path = "crates/turborepo-ci" }
turborepo-env = { path = "crates/turborepo-env" }
turborepo-errors = { path = "crates/turborepo-errors" }
turborepo-fixed-map = { path = "crates/turborepo-fixed-map" }
turborepo-frameworks = { path = "crates/turborepo-frameworks" }
turborepo-fs = { path = "crates/turborepo-fs" }
turborepo-lib = { path = "crates/turborepo-lib", default-features = false }
turborepo-lockfiles = { path = "crates/turborepo-lockfiles" }
turborepo-microfrontends = { path = "crates/turborepo-microfrontends" }
turborepo-microfrontends-proxy = { path = "crates/turborepo-microfrontends-proxy" }
turborepo-process = { path = "crates/turborepo-process" }
turborepo-repository = { path = "crates/turborepo-repository" }
turborepo-task-id = { path = "crates/turborepo-task-id" }
turborepo-ui = { path = "crates/turborepo-ui" }
turborepo-unescape = { path = "crates/turborepo-unescape" }
turborepo-scm = { path = "crates/turborepo-scm" }
turborepo-signals = { path = "crates/turborepo-signals" }
wax = { path = "crates/turborepo-wax" }
turborepo-vercel-api = { path = "crates/turborepo-vercel-api" }
turborepo-vercel-api-mock = { path = "crates/turborepo-vercel-api-mock" }
turborepo-vt100 = { path = "crates/turborepo-vt100" }

reqwest = { version = "0.12.9", default-features = false }

anyhow = "1.0.69"
assert_cmd = "2.0.8"
async-compression = { version = "0.3.13", default-features = false, features = [
  "gzip",
  "tokio",
] }
async-graphql = "7.0.17"
async-graphql-axum = "7.0.16"
async-trait = "0.1.64"
atty = "0.2.14"
axum = "0.7.5"
axum-server = "0.7.1"
biome_console = { version = "0.5.7" }
biome_deserialize = { version = "0.6.0", features = ["serde"] }
biome_deserialize_macros = { version = "0.6.0" }
biome_diagnostics = { version = "0.5.7" }
biome_formatter = { version = "0.5.7" }
biome_json_parser = { version = "0.5.7" }
biome_json_formatter = { version = "0.5.7" }
biome_json_syntax = { version = "0.5.7" }
bytes = "1.1.0"
camino = { version = "1.1.4", features = ["serde1"] }
chrono = "0.4.23"
clap = "4.5.16"
clap_complete = "4.5.24"
concurrent-queue = "2.5.0"
console = "0.15.5"
console-subscriber = "0.1.8"
crossbeam-channel = "0.5.8"
dashmap = "5.4.0"
derive_setters = "0.1.6"
dialoguer = "0.11.0"
dunce = "1.0.3"
either = "1.9.0"
futures = "0.3.30"
futures-retry = "0.6.0"
git2 = { version = "0.20.0", default-features = false }
hex = "0.4.3"
httpmock = { version = "0.6.8", default-features = false }
indexmap = "1.9.2"
indicatif = "0.17.3"
indoc = "2.0.0"
insta = { version = "1.34.0", features = ["json"] }
itertools = "0.10.5"
lazy_static = "1.4.0"
merge = "0.1.0"
mime = "0.3.16"
notify = "6.1.1"
num_cpus = "1.15.0"
once_cell = "1.17.1"
owo-colors = "3.5.0"
oxc_resolver = "4.2.0"
parking_lot = "0.12.1"
path-clean = "1.0.1"
pathdiff = "0.2.1"
petgraph = "0.6.5"
pin-project-lite = "0.2.9"
port_scanner = "0.1.5"
predicates = "2.1.5"
pretty_assertions = "1.3.0"
proc-macro2 = "1.0.79"
quote = "1.0.23"
radix_trie = "0.2.1"
rand = "0.8.5"
ratatui = "0.26.1"
regex = "1.7.0"
rustc-hash = "1.1.0"
semver = "1.0.16"
serde = { version = "1.0.152", features = ["derive"] }
serde_json = "1.0.93"
serde_qs = "0.11.0"
serde_with = "2.3.2"
serde_yaml = "0.9.17"
sha2 = "0.10.6"
smallvec = { version = "1.13.1", features = [
  "serde",
  "const_generics",
  "union",
  "const_new",
] }
swc_common = "0.37.5"
swc_ecma_ast = "0.118.2"
swc_ecma_parser = "0.149.1"
swc_ecma_visit = "0.104.8"
syn = "1.0.107"
tempfile = "3.3.0"
test-case = "3.0.0"
thiserror = "1.0.48"
tiny-gradient = "0.1.0"
tokio = "1.25.0"
tokio-util = { version = "0.7.7", features = ["io"] }
tracing = "0.1.37"
tracing-appender = "0.2.2"
tracing-subscriber = "0.3.16"
tui-term = { version = "=0.1.9", default-features = false }
url = "2.2.2"
urlencoding = "2.1.2"
webbrowser = "0.8.7"
which = "4.4.0"
unicode-segmentation = "1.10.1"
