dynamic-config-git 0.6.1

Read dynamic-config configuration from a git repository — GitHub, GitLab, Azure DevOps or any git host.
Documentation
[package]
name = "dynamic-config-git"
description = "Read dynamic-config configuration from a git repository — GitHub, GitLab, Azure DevOps or any git host."
readme = "README.md"
version.workspace = true
edition.workspace = true
# `gix` declares 1.85 and means it (edition 2024). The workspace floor stays at
# 1.71: the core crate owes nobody a git client, and a companion pays for what
# it pulls in. Measured with `cargo +1.85 check -p dynamic-config-git`.
rust-version = "1.85"
license.workspace = true
repository.workspace = true
homepage.workspace = true
documentation = "https://docs.rs/dynamic-config-git"
authors.workspace = true
categories = ["config", "development-tools"]
keywords = ["config", "git", "gitops", "hot-reload", "watch"]
exclude.workspace = true

[dependencies]
dynamic-config = { workspace = true }
dynamic-config-store-core = { workspace = true }
# Pure Rust, no libgit2, no C toolchain, no OpenSSL question — this workspace
# has no C dependency and adding one to read a YAML file would be a poor trade.
# `default-features = false` on purpose: the defaults carry a worktree, a
# status implementation, blame and a diff engine, none of which a store that
# reads one blob at one commit has any use for.
#
# Note what is *not* here: `max-performance-safe`. It turns on
# `gix-pack/pack-cache-lru-static`, whose LRU is `uluru`, which is MPL-2.0 —
# and this workspace's `deny.toml` allows permissive licences only, on the
# stated grounds that a copyleft dependency would leak into every user of a
# crate meant to be uncontroversial to add. `pack-cache-lru-dynamic` is the
# same idea over `clru` (MIT), and `parallel` is the rest of what
# `max-performance-safe` was wanted for.
gix = { version = "0.86.0", default-features = false, features = [
    "blocking-network-client",
    "blocking-http-transport-reqwest-rust-tls",
    "parallel",
    "pack-cache-lru-dynamic",
    "sha1",
] }
# Already in the graph — it *is* `blocking-http-transport-reqwest-rust-tls`'s
# client — and named here because `src/tls.rs` builds one directly. `gix`'s own
# transport builds its client from a `ClientBuilder` with no root store, no
# identity and no hook to reach either, and ignores the `ssl_ca_info` and
# `ssl_verify` fields its options type carries (only the `curl` backend reads
# them, measured against gix-transport 0.58.1). So a private CA and a client
# certificate need a client this crate built, which is the only reason this is
# a direct dependency.
#
# The same features `gix-transport` asks for, so nothing new is compiled and
# nothing new is licensed: `rustls` is `reqwest`'s pure-Rust stack, and its
# MSRV is 1.85 — this crate's floor exactly.
reqwest = { version = "0.13.4", default-features = false, features = [
    "blocking",
    "rustls",
] }

[dev-dependencies]
dynamic-config = { workspace = true, features = ["json", "yaml", "toml"] }
dynamic-config-store-core = { workspace = true }
serde = { version = "1.0.221", features = ["derive"] }
# The scripted git host in `tests/over_https.rs`, which is the same host as the
# one in `over_http.rs` behind a TLS listener. A private CA and a server
# certificate are generated by the test that needs them and never checked in: a
# repository with a private key in it has a private key in it. Both crates are
# already in this workspace's graph — `dynamic-config-server` generates
# certificates the same way — so neither adds a licence or an advisory.
#
# `ring` for `rcgen`, matching the server crate; `aws-lc-rs` for `rustls`,
# matching what `reqwest` selects, so the one `rustls` build in this graph has
# exactly one provider to be the default.
rcgen = { version = "0.14", default-features = false, features = [
    "crypto",
    "pem",
    "ring",
] }
# `0.23.31`, shared across the workspace, and not a preference. Three
# requirements meet here: `aws-lc-rs` as a feature name does not exist before
# 0.23.2, `aws-smithy-http-client` requires `^0.23.31`, and
# `dynamic-config-python-remote` puts every store and the server in one graph.
# `-Z direct-minimal-versions` pins each direct declaration to its *own*
# floor, so any floor below the union's maximum is a contradiction rather
# than a lower bound.
rustls = { version = "0.23.31", default-features = false, features = [
    "aws-lc-rs",
    "std",
    "tls12",
] }
# The scripted git host in `tests/over_http.rs` is a loopback socket, and a
# loopback socket is `http://`. `gix` refuses to put a credential on a plain
# HTTP connection unless this is on — which is exactly the behaviour the
# published crate should have, so it is enabled *here* and nowhere else: it
# reaches the test build and never a user's.
gix-transport = { version = "0.58.1", default-features = false, features = [
    "http-client-insecure-credentials",
] }

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]