# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

[workspace]
exclude = ["python"]
members = ["ballista-cli", "ballista/client", "ballista/core", "ballista/executor", "ballista/scheduler", "benchmarks", "examples"]
resolver = "2"

[workspace.package]
# edition to be changed to 2024 when we update 
# Minimum Supported Rust Version (MSRV) to 1.85.0
# which is datafusion 49s
# 
edition = "2021"
# we should try to follow datafusion version 
rust-version = "1.82.0"

[workspace.dependencies]
arrow = { version = "55", features = ["ipc_compression"] }
arrow-flight = { version = "55", features = ["flight-sql-experimental"] }
clap = { version = "4.5", features = ["derive", "cargo"] }
configure_me = { version = "0.4.0" }
configure_me_codegen = { version = "0.4.4" }
datafusion = "49.0.2"
datafusion-cli = "49.0.2"
datafusion-proto = "49.0.2"
datafusion-proto-common = "49.0.2"
object_store = "0.12"
prost = "0.13"
prost-types = "0.13"
tonic = { version = "0.12" }
tonic-build = { version = "0.12", default-features = false, features = [
    "transport",
    "prost"
] }
tracing = "0.1"
tracing-appender = "0.2.2"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
ctor = { version = "0.5" }
mimalloc = { version = "0.1" }

tokio = { version = "1" }
uuid = { version = "1.13", features = ["v4", "v7"] }
rand = { version = "0.9" }
env_logger = { version = "0.11" }
futures = { version = "0.3" }
log = { version = "0.4" }
parking_lot = { version = "0.12" }
tempfile = { version = "3.16" }
dashmap = { version = "6.1" }
async-trait = { version = "0.1" }
serde = { version = "1.0" }
tokio-stream = { version = "0.1" }
url = { version = "2.5" }

# cargo build --profile release-lto
[profile.release-lto]
codegen-units = 1
inherits = "release"
lto = true

# the release profile takes a long time to build so we can use this profile during development to save time
# cargo build --profile release-nonlto
[profile.release-nonlto]
codegen-units = 16
debug = false
debug-assertions = false
incremental = false
inherits = "release"
lto = false
opt-level = 3
overflow-checks = false
panic = 'unwind'
rpath = false

[profile.ci]
inherits = "dev"
incremental = false

# ci turns off debug info, etc. for dependencies to allow for smaller binaries making caching more effective
[profile.ci.package."*"]
debug = false
debug-assertions = false
strip = "debuginfo"
incremental = false