[package]
name = "ebman"
version = "0.18.0"
edition = "2021"
rust-version = "1.91"
authors = ["Tom Baldwin <tom@polymorphism.co.uk>"]
description = "k9s-style TUI for AWS Elastic Beanstalk"
license = "MIT OR Apache-2.0"
readme = "README.md"
repository = "https://github.com/tombaldwin/ebman"
homepage = "https://github.com/tombaldwin/ebman"
keywords = ["aws", "elasticbeanstalk", "tui", "ratatui"]
categories = ["command-line-utilities"]

# Workspace: the ebman package sits at the root alongside the
# `tb-tui-common` crate (in the `tui-common/` directory; renamed for
# crates.io land-grab avoidance in 0.8.0 but kept under the same
# directory name for git-history continuity). Five modules ship there:
# `font_probe`, `overlay`, `theme`, `splash`, and `util`. The sibling
# pgman repo depends on `tb-tui-common` from crates.io so fixes flow
# both ways instead of being copy-pasted between repos.
[workspace]
members = ["tui-common"]
# Default to building / testing both crates so `cargo test` from the
# repo root sweeps everything without needing `--workspace`.
default-members = [".", "tui-common"]

[dependencies]
# Local `path` for dev so changes flow without a republish; `version`
# resolves the dep at publish time (cargo strips the `path` and uses
# the crates.io copy of `tb-tui-common`). `package = "tb-tui-common"`
# lets every existing `use tui_common::*` line keep working — the
# manifest key (`tui-common`) is what Rust imports as `tui_common`.
tui-common = { path = "tui-common", version = "0.1.1", package = "tb-tui-common" }
ratatui = "0.29"
crossterm = { version = "0.28", features = ["event-stream"] }
tokio = { version = "1", features = ["rt-multi-thread", "macros", "sync", "time", "signal"] }
tokio-stream = "0.1"
futures = "0.3"
aws-config = { version = "1", features = ["behavior-version-latest"] }
aws-sdk-elasticbeanstalk = "1"
aws-sdk-sts = "1"
aws-sdk-sqs = "1"
aws-sdk-cloudwatch = "1"
aws-sdk-cloudwatchlogs = "1"
aws-sdk-s3 = "1"
aws-sdk-ec2 = "1"
aws-sdk-acm = "1"
aws-types = "1"
chrono = "0.4"
color-eyre = "0.6"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2"
arboard = "3"
regex = "1"
portable-pty = "0.9"
vt100 = "0.15"
aws-credential-types = { version = "1.2.13", features = ["hardcoded-credentials"] }
aws-sdk-organizations = "1.110.0"
aws-sdk-costexplorer = "1"
aws-sdk-iam = "1"
aws-sdk-secretsmanager = "1"
aws-sdk-ssm = "1"
serde = { version = "1", features = ["derive"] }
toml = "0.8"
# YAML parsing for the EB CLI saved-configs format (`.elasticbeanstalk/
# saved_configs/*.cfg.yml`) so `:config-diff-local` can compare a local
# saved config against the deployed env. serde_yml is the actively-
# maintained successor to the archived serde_yaml; pre-1.0 versioning
# but the read-shape we depend on (OptionSettings nested map) is stable.
serde_yml = "0.0"
# Used by `ebman explain` to talk to the LLM provider (Anthropic API
# or a local Ollama). `rustls-tls` reuses the rustls already pulled
# in by aws-sdk; default-features = false skips the openssl path.
# `json` feature deliberately OFF — request bodies are short and
# fixed, and pulling in serde_json just for them would conflict with
# the project's hand-rolled JSON output convention. We use serde_yml
# for response parsing (JSON is a YAML subset).
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls"] }
sha2 = "0.10"

[dev-dependencies]
# Mocked AWS clients for unit-testing aws.rs without a live AWS account.
# Used to assert on observed request shapes and exercise response variants
# (e.g. EB autocreated worker queues, paginated SQS ReceiveMessage).
aws-smithy-mocks = "0.2"
aws-smithy-types = "1"
# The `test-util` feature enables `with_test_defaults` on the SDK config
# builders, which `aws-smithy-mocks::mock_client!` relies on. Only needed
# for the test build — production paths use the regular config.
aws-sdk-elasticbeanstalk = { version = "1", features = ["test-util"] }
aws-sdk-sqs = { version = "1", features = ["test-util"] }
aws-sdk-cloudwatch = { version = "1", features = ["test-util"] }
aws-sdk-cloudwatchlogs = { version = "1", features = ["test-util"] }
aws-sdk-s3 = { version = "1", features = ["test-util"] }
aws-sdk-ec2 = { version = "1", features = ["test-util"] }
aws-sdk-acm = { version = "1", features = ["test-util"] }
aws-sdk-organizations = { version = "1.110.0", features = ["test-util"] }
aws-sdk-costexplorer = { version = "1", features = ["test-util"] }
aws-sdk-secretsmanager = { version = "1", features = ["test-util"] }
aws-sdk-ssm = { version = "1", features = ["test-util"] }
# `test-util` enables `#[tokio::test(start_paused = true)]` + the
# `tokio::time::pause/advance/sleep` mocked-clock surface that
# `run_shell_command`'s polling-loop tests rely on.
tokio = { version = "1", features = ["test-util"] }

[profile.release]
lto = "thin"
codegen-units = 1
strip = true
