Files
harmony/fleet/harmony-fleet-deploy/Cargo.toml
Jean-Gabriel Gill-Couture 81bf8a9257
All checks were successful
Run Check Script / check (pull_request) Successful in 2m41s
Release harmony-fleet-operator (image + chart) / release (push) Successful in 4m38s
refactor: app-scoped release binary harmony-fleet-release
Renames `harmony-fleet-operator-release` to `harmony-fleet-release`
and adds a `--component <operator|agent|nats-callout>` flag. The
binary's surface is now app-scoped (one binary per app, all fleet
components behind a flag) rather than component-scoped (one binary
per component), matching ADR-023's "deploy binary statically lists
its supported components" guidance.

Why: adding the agent and nats-callout release pipelines later
would otherwise mean three near-identical binaries with copy-pasted
docker/helm orchestration. Folding them under one binary keeps the
shared 90% in one place and reduces each new component to:

  - a new `Component` enum variant
  - a `Component::spec` arm naming the Dockerfile + image
  - a `hydrate_chart` arm pointing at the component's `build_chart`

`agent` and `nats-callout` variants exist today but bail with an
actionable error pointing at the roadmap; this keeps `--help`
honest about what's coming without lying about what works.

The per-component `release.sh` wrapper pattern stays: each
component's script (today `fleet/harmony-fleet-operator/release.sh`,
tomorrow agent's and callout's) is a 1-line wrapper that pre-fills
`--component`. This lets a tag like `harmony-fleet-operator-v0.1.0`
route to the right component via the existing CI workflow without
the operator having to remember a flag.

File renamed via `git mv` so blame history is preserved. Verified
on k3d with `--component operator --no-push`: produces the same
image + chart pair as before.
2026-05-26 16:21:50 -04:00

54 lines
2.0 KiB
TOML

[package]
name = "harmony-fleet-deploy"
edition = "2024"
version.workspace = true
readme.workspace = true
license.workspace = true
description = "Deploy-side Scores for the fleet stack: operator, agent, NATS, callout. Imports harmony for the Score-Topology-Interpret machinery; consumed by the production CLI, the e2e harness, and future control-plane tooling."
[lib]
path = "src/lib.rs"
# CLI entry point. `harmony-fleet-deploy <component>` picks a subcommand
# per fleet component plus an `all` composite. Built on harmony_cli the
# way the rest of the workspace's *-deploy crates are.
[[bin]]
name = "harmony-fleet-deploy"
path = "src/main.rs"
# Release tool: builds and pushes the image + hydrated helm chart for
# one fleet component (operator today; agent and nats-callout will
# join as their pipelines land). Driven by the per-component
# release.sh wrappers and the .gitea CI workflows. App-scoped (not
# component-scoped) so a single binary covers every fleet component
# behind a `--component` flag.
[[bin]]
name = "harmony-fleet-release"
path = "src/bin/fleet_release.rs"
[dependencies]
harmony = { path = "../../harmony", features = ["podman"] }
harmony_cli = { path = "../../harmony_cli" }
harmony_types = { path = "../../harmony_types" }
harmony_macros = { path = "../../harmony_macros" }
harmony-fleet-auth = { path = "../harmony-fleet-auth" }
harmony-reconciler-contracts = { path = "../../harmony-reconciler-contracts" }
anyhow = { workspace = true }
async-trait = { workspace = true }
clap = { workspace = true }
k8s-openapi = { workspace = true }
kube = { workspace = true, features = ["runtime", "derive"] }
log = { workspace = true }
env_logger = { workspace = true }
non-blank-string-rs = "1"
serde = { workspace = true }
serde_json = { workspace = true }
serde_yaml = { workspace = true }
tempfile = "3"
thiserror = { workspace = true }
tokio = { workspace = true, features = ["full"] }
toml = { workspace = true }
tracing = { workspace = true }
tracing-subscriber = { workspace = true }