agent/cli/Cargo.toml
[package]
name = "holger-agent-cli"
version.workspace = true
edition = "2021"
authors = ["Ignalina ApS", "Vetra Automation AB"]
description = "Holger's courier as a library: `holger-cli agent` transfers artifacts between registries, archives and directories. Offline by default."
license = "AGPL-3.0-only"
repository = "https://git.gunnar.rs/nordisk/holger"
# Development notes, agent instructions and machine-local tooling stay in the
# repository; they are not part of the published crate.
exclude = [
".nornir/",
]
[dependencies]
# `default-features = false`: the offline courier links no connector and no reqwest;
# `online` below turns them on.
agent-lib = { package = "holger-agent-lib", version = "3.0.0", path = "../lib", default-features = false }
clap = { version = "4", features = ["derive", "env"] }
anyhow = "1"
tokio = { version = "1", features = ["full"] }
[dev-dependencies]
# The connector tests (integration_pip, integration_tar_zstd, …) use agent-lib's online half.
agent-lib = { package = "holger-agent-lib", path = "../lib", features = ["online"] }
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.13", default-features = false, features = ["rustls-no-provider", "json", "blocking", "http2"] }
# reqwest 0.13 has no bundled roots and its `rustls` feature means aws-lc-rs (C) + the
# OS trust store; ring + the Mozilla bundle keep 0.12 `rustls-tls` behaviour (see the
# `tls_roots` helpers). 2026-10-02.
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }
webpki-root-certs = { version = "1" }
tempfile = "3"
serde_json = "1"
tar = "0.4"
zstd = "0.14"
mannequin = { package = "holger-mannequin", path = "../../mannequin" }
connector-nexus = { package = "holger-nexus-connector", path = "../connector/nexus" }
traits = { package = "holger-traits", path = "../../traits", features = ["test-support"] }
repository-znippy-rust = { package = "holger-rust-znippy-repository", path = "../../server/repository/znippy-rust" }
repository-znippy-maven = { package = "holger-znippy-maven-repository", path = "../../server/repository/znippy-maven" }
repository-znippy-python = { package = "holger-znippy-python-repository", path = "../../server/repository/znippy-python" }
axum = "0.8.9"
testcontainers = "0.27"
# Downscaled twins of the Nexus/Artifactory-comparison benchers call the SAME
# workload code the `xtask/examples/nornir-bench.rs` benchers do (the `nexus` +
# `artifactory` feature modules).
holger-bench-scenarios = { path = "../../bench-scenarios", features = ["nexus", "artifactory"] }
# nornir-testmatrix functional-status emitter — gated, optional, compiled OUT for
# release. `--features testmatrix` turns the integration-test emit calls into real
# rows that `nornir test` reads; OFF by default the dep is never pulled.
#
# ⚠ DATED RULE 2 EXEMPTION, 2026-09-20 (?33), same reason as `server/cli`:
# `agent/cli/src/main.rs:194` calls `nornir_testmatrix::functional_status` in
# BINARY code, not under `#[cfg(test)]`, so moving this to `[dev-dependencies]`
# breaks `cargo build -p holger-agent-cli --features testmatrix`. The leak RULE 2
# guards against is already caught by RULE 1: `testmatrix` is in no `default` set
# and no variant names it, so it cannot reach a shipped closure without going red.
# All three testmatrix edges (here, `server/cli`, `server/lib`) stay optional-
# normal for the same measured reason; `server/lib` was tried and reverted after
# `cargo check -p holger-server-lib --features testmatrix` failed with E0433 at
# `server/lib/src/grpc.rs:195`.
[dependencies.nornir-testmatrix]
version = "0.2.13"
optional = true
[features]
# The default is the zero-egress courier (archive and directory conversions only).
# `online` adds the Nexus, Artifactory, crates.io/PyPI and Holger routes (agent-lib's
# connectors and reqwest).
default = []
online = ["agent-lib/online"]
testmatrix = ["dep:nornir-testmatrix", "nornir-testmatrix/testmatrix"]