Files
harmony/harmony/Cargo.toml
Jean-Gabriel Gill-Couture 277c5edb52
All checks were successful
Run Check Script / check (pull_request) Successful in 2m0s
ci: fix Windows cross-compile by gating unix-only harmony code
The harmony_composer CI job builds for x86_64-pc-windows-gnu. It was
failing because workspace members that explicitly request the `kvm`
feature (kvm examples) caused Cargo to unify that feature into the
harmony build for all targets, including Windows — even though
harmony_composer itself doesn't need kvm.

Three-part fix:
- Move `virt` (libvirt bindings) to `[target.'cfg(unix)'.dependencies]`
  so Cargo never tries to compile it for non-Unix targets, regardless
  of which workspace member requests `kvm`
- Remove `kvm` from harmony's default features; callers that need it
  already opt in explicitly
- Gate kvm and podman-topology code with `#[cfg(unix)]` / `#[cfg(all(feature = "kvm", unix))]`
  so harmony compiles cleanly on Windows. Podman score types
  (PodmanService, PodmanV0Score, ReconcileScore) remain available on
  all platforms since the fleet operator CRD definitions need them.
2026-05-23 11:26:09 -04:00

115 lines
3.3 KiB
TOML

[package]
name = "harmony"
edition = "2024"
version.workspace = true
readme.workspace = true
license.workspace = true
[features]
# `podman` lights up the podman module AND the fleet operator's
# CRD types (which embed `ReconcileScore` from the podman module).
# Without it the operator CRD fails to compile, so it's part of
# the default build.
default = ["podman"]
kvm = ["dep:virt"]
podman = ["dep:podman-api"]
testing = []
[dependencies]
hex = "0.4"
webbrowser = "1.0"
reqwest = { version = "0.11", features = [
"blocking",
"cookies",
"json",
"rustls-tls",
"stream",
], default-features = false }
russh = { workspace = true }
russh-keys = { workspace = true }
rust-ipmi = "0.1.1"
semver = "1.0.23"
serde.workspace = true
serde_json.workspace = true
tokio.workspace = true
tokio-retry.workspace = true
tokio-util.workspace = true
derive-new.workspace = true
log.workspace = true
env_logger.workspace = true
async-trait.workspace = true
cidr.workspace = true
opnsense-api = { path = "../opnsense-api" }
opnsense-config = { path = "../opnsense-config" }
opnsense-config-xml = { path = "../opnsense-config-xml" }
harmony_macros = { path = "../harmony_macros" }
harmony_types = { path = "../harmony_types" }
harmony_execution = { path = "../harmony_execution" }
harmony-k8s = { path = "../harmony-k8s" }
harmony-reconciler-contracts = { path = "../harmony-reconciler-contracts" }
anyhow.workspace = true
uuid.workspace = true
url.workspace = true
kube = { workspace = true, features = ["derive"] }
k8s-openapi.workspace = true
serde_yaml.workspace = true
http.workspace = true
serde-value.workspace = true
helm-wrapper-rs = "0.4.0"
non-blank-string-rs = "1.0.4"
k3d-rs = { path = "../k3d" }
directories.workspace = true
lazy_static.workspace = true
dockerfile_builder = "0.1.5"
temp-file = "0.1.9"
convert_case.workspace = true
email_address = "0.2.9"
chrono.workspace = true
fqdn = { version = "0.5.2", features = [
"domain-label-cannot-start-or-end-with-hyphen",
"domain-label-length-limited-to-63",
"domain-name-without-special-chars",
"domain-name-length-limited-to-255",
"punycode",
"serde",
] }
temp-dir = "0.1.14"
dyn-clone = "1.0.19"
similar.workspace = true
futures-util = "0.3.31"
strum = { version = "0.27.1", features = ["derive"] }
tempfile.workspace = true
serde_with = "3.14.0"
schemars = "0.8.22"
kube-derive = "1.1.0"
bollard.workspace = true
tar.workspace = true
base64.workspace = true
thiserror.workspace = true
once_cell = "1.21.3"
walkdir = "2.5.0"
harmony_inventory_agent = { path = "../harmony_inventory_agent" }
harmony_secret_derive = { path = "../harmony_secret_derive" }
harmony_secret = { path = "../harmony_secret" }
askama.workspace = true
sha2 = "0.10"
sqlx.workspace = true
inquire.workspace = true
brocade = { path = "../brocade" }
option-ext = "0.2.0"
rand.workspace = true
podman-api = { version = "0.9", optional = true }
sysinfo = "0.30"
# virt (libvirt bindings) uses std::os::unix and only compiles on Unix targets.
# Declaring it here (not in [dependencies]) prevents Cargo from trying to
# compile it when cross-compiling to Windows, even if a workspace member
# requests the `kvm` feature.
[target.'cfg(unix)'.dependencies]
virt = { version = "0.4.3", optional = true }
[dev-dependencies]
pretty_assertions.workspace = true
assertor.workspace = true
httptest = "0.16"