5731be7e68
Bumps [axum](https://github.com/tokio-rs/axum) from 0.7.9 to 0.8.9. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/tokio-rs/axum/releases">axum's releases</a>.</em></p> <blockquote> <h2>axum-v0.8.9</h2> <ul> <li><strong>added:</strong> <code>WebSocketUpgrade::{requested_protocols, set_selected_protocol}</code> for more flexible subprotocol selection (<a href="https://redirect.github.com/tokio-rs/axum/issues/3597">#3597</a>)</li> <li><strong>changed:</strong> Update minimum rust version to 1.80 (<a href="https://redirect.github.com/tokio-rs/axum/issues/3620">#3620</a>)</li> <li><strong>fixed:</strong> Set connect endpoint on correct field in MethodRouter (<a href="https://redirect.github.com/tokio-rs/axum/issues/3656">#3656</a>)</li> <li><strong>fixed:</strong> Return specific error message when multipart body limit is exceeded (<a href="https://redirect.github.com/tokio-rs/axum/issues/3611">#3611</a>)</li> </ul> <p><a href="https://redirect.github.com/tokio-rs/axum/issues/3597">#3597</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3597">tokio-rs/axum#3597</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3620">#3620</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3620">tokio-rs/axum#3620</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3656">#3656</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3656">tokio-rs/axum#3656</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3611">#3611</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3611">tokio-rs/axum#3611</a></p> <h2>axum v0.8.8</h2> <ul> <li>Clarify documentation for <code>Router::route_layer</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3567">#3567</a>)</li> </ul> <p><a href="https://redirect.github.com/tokio-rs/axum/issues/3567">#3567</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3567">tokio-rs/axum#3567</a></p> <h2>axum v0.8.7</h2> <ul> <li>Relax implicit <code>Send</code> / <code>Sync</code> bounds on <code>RouterAsService</code>, <code>RouterIntoService</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3555">#3555</a>)</li> <li>Make it easier to visually scan for default features (<a href="https://redirect.github.com/tokio-rs/axum/issues/3550">#3550</a>)</li> <li>Fix some documentation typos</li> </ul> <p><a href="https://redirect.github.com/tokio-rs/axum/issues/3550">#3550</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3550">tokio-rs/axum#3550</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3555">#3555</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3555">tokio-rs/axum#3555</a></p> <h2>axum v0.8.5</h2> <ul> <li><strong>fixed:</strong> Reject JSON request bodies with trailing characters after the JSON document (<a href="https://redirect.github.com/tokio-rs/axum/issues/3453">#3453</a>)</li> <li><strong>added:</strong> Implement <code>OptionalFromRequest</code> for <code>Multipart</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3220">#3220</a>)</li> <li><strong>added:</strong> Getter methods <code>Location::{status_code, location}</code></li> <li><strong>added:</strong> Support for writing arbitrary binary data into server-sent events (<a href="https://redirect.github.com/tokio-rs/axum/issues/3425">#3425</a>)]</li> <li><strong>added:</strong> <code>middleware::ResponseAxumBodyLayer</code> for mapping response body to <code>axum::body::Body</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3469">#3469</a>)</li> <li><strong>added:</strong> <code>impl FusedStream for WebSocket</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3443">#3443</a>)</li> <li><strong>changed:</strong> The <code>sse</code> module and <code>Sse</code> type no longer depend on the <code>tokio</code> feature (<a href="https://redirect.github.com/tokio-rs/axum/issues/3154">#3154</a>)</li> <li><strong>changed:</strong> If the location given to one of <code>Redirect</code>s constructors is not a valid header value, instead of panicking on construction, the <code>IntoResponse</code> impl now returns an HTTP 500, just like <code>Json</code> does when serialization fails (<a href="https://redirect.github.com/tokio-rs/axum/issues/3377">#3377</a>)</li> <li><strong>changed:</strong> Update minimum rust version to 1.78 (<a href="https://redirect.github.com/tokio-rs/axum/issues/3412">#3412</a>)</li> </ul> <p><a href="https://redirect.github.com/tokio-rs/axum/issues/3154">#3154</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3154">tokio-rs/axum#3154</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3220">#3220</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3220">tokio-rs/axum#3220</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3377">#3377</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3377">tokio-rs/axum#3377</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3412">#3412</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3412">tokio-rs/axum#3412</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3425">#3425</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3425">tokio-rs/axum#3425</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3443">#3443</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3443">tokio-rs/axum#3443</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3453">#3453</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3453">tokio-rs/axum#3453</a> <a href="https://redirect.github.com/tokio-rs/axum/issues/3469">#3469</a>: <a href="https://redirect.github.com/tokio-rs/axum/pull/3469">tokio-rs/axum#3469</a></p> <h2>axum v0.8.4</h2> <ul> <li><strong>added:</strong> <code>Router::reset_fallback</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3320">#3320</a>)</li> <li><strong>added:</strong> <code>WebSocketUpgrade::selected_protocol</code> (<a href="https://redirect.github.com/tokio-rs/axum/issues/3248">#3248</a>)</li> <li><strong>fixed:</strong> Panic location for overlapping method routes (<a href="https://redirect.github.com/tokio-rs/axum/issues/3319">#3319</a>)</li> <li><strong>fixed:</strong> Don't leak a tokio task when using <code>serve</code> without graceful shutdown (<a href="https://redirect.github.com/tokio-rs/axum/issues/3129">#3129</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/tokio-rs/axum/commit/c59208c86fded335cd85e388030ad59347b0e5ae"><code>c59208c</code></a> revert axum-core changelog changes</li> <li><a href="https://github.com/tokio-rs/axum/commit/99068f5a4b309d0966777eb6e5a8ce924f204e6d"><code>99068f5</code></a> Revert "Fix <code>IntoResponse</code> for tuples overriding error response codes (<a href="https://redirect.github.com/tokio-rs/axum/issues/3603">#3603</a>)"</li> <li><a href="https://github.com/tokio-rs/axum/commit/23d7098691871ccec71ca17ea31d1d40b036c0d0"><code>23d7098</code></a> Revert "axum-core 0.5.6"</li> <li><a href="https://github.com/tokio-rs/axum/commit/e8a39ad416d1ee4f61249904309691909db2db09"><code>e8a39ad</code></a> axum-macros 0.5.1</li> <li><a href="https://github.com/tokio-rs/axum/commit/6e9a249a4fa45507b1157e570f9b6ec58d71cb86"><code>6e9a249</code></a> axum-extra 0.12.6</li> <li><a href="https://github.com/tokio-rs/axum/commit/0ec9041a1b903778a91a23558e064a83b43674c1"><code>0ec9041</code></a> axum 0.8.9</li> <li><a href="https://github.com/tokio-rs/axum/commit/c3fcebb38f356ccf96da158199d4e920aa8cfda3"><code>c3fcebb</code></a> axum-core 0.5.6</li> <li><a href="https://github.com/tokio-rs/axum/commit/a8790fc29b0db5708cdbcae70597d37c5afe1143"><code>a8790fc</code></a> update release notes</li> <li><a href="https://github.com/tokio-rs/axum/commit/26ba7bb6f21cf8996493481a5275c01152f0aaf9"><code>26ba7bb</code></a> docs: consolidate state management docs in crate root (<a href="https://redirect.github.com/tokio-rs/axum/issues/3683">#3683</a>)</li> <li><a href="https://github.com/tokio-rs/axum/commit/9fc59efc1fa9a11f4157cff1f2d22355f01d7bc0"><code>9fc59ef</code></a> Update to tokio-tungstenite 0.29 (<a href="https://redirect.github.com/tokio-rs/axum/issues/3689">#3689</a>)</li> <li>Additional commits viewable in <a href="https://github.com/tokio-rs/axum/compare/axum-v0.7.9...axum-v0.8.9">compare view</a></li> </ul> </details> <br /> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JerrettDavis <mxjerrett@gmail.com>
131 lines
6.2 KiB
TOML
131 lines
6.2 KiB
TOML
[workspace]
|
||
resolver = "2"
|
||
members = [
|
||
"crates/headroom-core",
|
||
"crates/headroom-proxy",
|
||
"crates/headroom-simulators",
|
||
"crates/headroom-py",
|
||
"crates/headroom-parity",
|
||
]
|
||
# headroom-py is a Python extension module — it must be built via maturin, not
|
||
# plain cargo (the "extension-module" feature tells pyo3 not to link libpython,
|
||
# which is required for `import` to work). `cargo build --workspace` without
|
||
# explicit members skips it; `cargo test --workspace` still runs its tests
|
||
# because pyo3 can dynamically link here for the cdylib used by tests.
|
||
default-members = [
|
||
"crates/headroom-core",
|
||
"crates/headroom-proxy",
|
||
"crates/headroom-simulators",
|
||
"crates/headroom-parity",
|
||
]
|
||
|
||
[workspace.package]
|
||
edition = "2021"
|
||
rust-version = "1.80"
|
||
license = "Apache-2.0"
|
||
repository = "https://github.com/chopratejas/headroom"
|
||
authors = ["Headroom Maintainers"]
|
||
|
||
[workspace.dependencies]
|
||
serde = { version = "1", features = ["derive"] }
|
||
# `preserve_order` makes `serde_json::Value::Object` use IndexMap so JSON
|
||
# parse order is preserved through Value→string→Value round-trips. The
|
||
# smart_crusher port relies on this to match Python's `str(dict)` output,
|
||
# which preserves insertion order; otherwise BTreeMap's sorted-key default
|
||
# would diverge from Python on every multi-key object.
|
||
#
|
||
# `arbitrary_precision` keeps the literal numeric token from the source
|
||
# JSON intact: `Value::Number` becomes a wrapper around the original
|
||
# digit string, so `1.0` does NOT collapse to `1`, and `12345678901234567`
|
||
# does NOT lose precision through f64. Required by Realignment invariant
|
||
# I1 (byte-faithful passthrough on unmutated bytes; see REALIGNMENT/02-
|
||
# architecture.md §2.2) and PR-A4 (see REALIGNMENT/03-phase-A-lockdown.md).
|
||
#
|
||
# `raw_value` exposes `serde_json::value::RawValue`, the unparsed JSON
|
||
# fragment type. Phase B PR-B2 uses this to forward unmodified
|
||
# `messages[*]` entries as exact byte copies — the parser captures the
|
||
# original byte slice, so byte-for-byte round-trips work even with
|
||
# whitespace, key order, or escape preferences the producer chose.
|
||
# Enabled here in Phase A so PR-B2 can land as a pure consumer change.
|
||
serde_json = { version = "1", features = ["preserve_order", "arbitrary_precision", "raw_value"] }
|
||
bytes = "1"
|
||
thiserror = "2"
|
||
# `log` compat: when no tracing subscriber is active (the case inside the
|
||
# headroom-py cdylib), events are re-emitted as `log` records so pyo3-log
|
||
# can forward them to Python's logging. No effect on binaries that install
|
||
# a real subscriber.
|
||
tracing = { version = "0.1", features = ["log"] }
|
||
anyhow = "1"
|
||
clap = { version = "4", features = ["derive"] }
|
||
tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] }
|
||
axum = "0.8"
|
||
tower = "0.5"
|
||
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
|
||
pyo3 = { version = "0.29", features = ["abi3-py310"] }
|
||
# Forwards Rust `log` records (incl. tracing events via the `log` compat
|
||
# feature above) into Python's `logging` inside the _core extension module.
|
||
pyo3-log = "0.13"
|
||
# Phase D PR-D1: AWS SigV4 signing for native Bedrock InvokeModel route.
|
||
# `aws-sigv4` provides the canonical-request + signing-key implementation;
|
||
# `aws-config` resolves credentials from the standard provider chain
|
||
# (env vars, profiles, IMDS, ECS task role, etc); `aws-credential-types`
|
||
# exposes `Credentials` so the signer accepts whatever the chain returned.
|
||
aws-sigv4 = { version = "1", default-features = false, features = ["sign-http", "http1"] }
|
||
aws-config = { version = "1", default-features = false, features = ["behavior-version-latest", "rustls", "rt-tokio", "sso"] }
|
||
aws-credential-types = { version = "1", default-features = false }
|
||
# `Identity` lives in aws-smithy-runtime-api; the SigV4 builder
|
||
# accepts `&Identity`. Pinning the version explicitly avoids a
|
||
# silent semver bump from the transitive dep tree.
|
||
aws-smithy-runtime-api = { version = "1", default-features = false, features = ["client"] }
|
||
# PR-D4: Vertex publisher path uses GCP Application Default Credentials
|
||
# (ADC) → bearer token for the `Authorization: Bearer <token>` header.
|
||
# `gcp_auth` resolves the chain (gcloud user creds, GCE/GKE metadata
|
||
# server, service-account JSON, workload-identity federation) without
|
||
# us baking provider-specific knowledge in. The token source is wrapped
|
||
# in a `TokenSource` trait so tests inject a static-token mock.
|
||
gcp_auth = "0.12"
|
||
|
||
|
||
# ── Release profile — wheel size optimization ───────────────────────
|
||
#
|
||
# PyPI imposes a 10 GB cumulative storage limit per project. We hit it
|
||
# at version 0.21.36 (191 versions × ~213 MB/release = 10.00 GB
|
||
# exactly). Recent wheels were ~16-18 MB each, of which ~6.4 MB was
|
||
# pure debug metadata (`.strtab` + `.symtab` ELF sections; uncovered
|
||
# by post-mortem inspection of an actual production wheel).
|
||
#
|
||
# This profile shrinks each Linux wheel from ~18 MB → ~10-11 MB by:
|
||
# * Stripping symbol/string tables (~6.4 MB direct savings)
|
||
# * Link-time optimization across crate boundaries (~5-10% .text
|
||
# savings via dead-code elim across the workspace)
|
||
# * Single codegen unit (better inlining + dead-code elim, at the
|
||
# cost of slightly slower release builds)
|
||
#
|
||
# We deliberately do NOT set ``panic = "abort"``. The proxy is a
|
||
# long-lived async process — a single misbehaving request triggering
|
||
# panic-abort would terminate the whole proxy and disconnect every
|
||
# concurrent client. Accept the smaller savings; keep unwind behaviour.
|
||
#
|
||
# Estimated impact: 213 MB/release → ~130 MB/release. Buys ~30+ more
|
||
# release slots within the 10 GB ceiling at the current release
|
||
# cadence. Per-PyPI-version savings AND faster downloads for end
|
||
# users. Tradeoff: release builds take ~30-50% longer due to
|
||
# `codegen-units = 1` + LTO; acceptable for the size win.
|
||
[profile.release]
|
||
strip = "symbols"
|
||
lto = "thin"
|
||
codegen-units = 1
|
||
|
||
# Fast-to-compile profile for CI test wheels. The shipped wheel uses
|
||
# `release` (lto + codegen-units=1) for runtime/size; CI only needs a working
|
||
# extension, so trade runtime perf for ~parallel, lto-free compilation. Used
|
||
# via `maturin build --profile ci`. Does NOT affect `--release` builds.
|
||
[profile.ci]
|
||
inherits = "release"
|
||
lto = false
|
||
codegen-units = 256
|
||
opt-level = 1
|
||
strip = "none"
|
||
debug = false
|
||
incremental = false
|