Skip to main content

xbp_deploy/
lib.rs

1//! Declarative, service-centric deploy engine for XBP.
2//!
3//! **Purity rule:** the engine depends only on:
4//! - project config (view types)
5//! - OCI resolver/promoter traits
6//! - Kubernetes adapter traits
7//! - optional Cloudflare deploy adapter trait (CLI-injected)
8//!
9//! No CLI I/O, no Athena product islands, no implicit runtime state.
10//!
11//! Kubernetes apply/rollout behaviour is unchanged for
12//! `kubernetes` / `kubernetes-operator` services. Cloudflare providers are
13//! additive and never populate `k8s_plan.services`.
14
15mod bootstrap;
16mod expose;
17mod cloudflare;
18mod compose;
19mod context;
20mod error;
21mod failure;
22mod graph;
23mod history;
24mod lock;
25mod oci_build;
26mod plan_filter;
27mod planner;
28mod promotion;
29mod providers;
30mod runner;
31mod target_resolver;
32mod types;
33mod validator;
34mod verifier;
35
36pub use bootstrap::{
37    bootstrap_manifest_yaml, bootstrap_manifest_yaml_with_pull_policy, workload_name,
38};
39pub use expose::{
40    effective_expose, ensure_hosts_entries, expose_service, expose_service_with_auto, should_expose,
41    ExposeResult,
42};
43pub use compose::{
44    compose_service_runtime, compose_service_runtime_with_opts, env_key_looks_secret,
45    parse_dotenv_file, parse_dotenv_str,
46    ComposedRuntime,
47};
48pub use cloudflare::{CloudflareDeployAdapter, CloudflareServiceDeployRequest};
49pub use context::{DeployContext, DeployFlags, DeployMode};
50pub use oci_build::{OciBuildAdapter, OciBuildRequest, OciBuildResult};
51pub use error::{DeployError, Result};
52pub use graph::{order_services, ServiceGraph, ServiceNode};
53pub use failure::{
54    classify_deploy_error, ClassifiedDeployOutcome, DeployFailureClass, DeployPhase,
55};
56pub use history::{
57    deploy_secret_placeholder, parse_deploy_secret_placeholder, parse_index_raw, record_from_plan,
58    record_from_plan_with_classification, record_from_plan_with_version,
59    redact_plan_runtime_env, revitalize_record_runtime_env, runtime_env_value_should_redact,
60    secret_value_hash, DeployHistoryIndex, DeployHistoryRecord, DeployHistorySecret,
61    DeployHistoryStats, DeployHistoryStore, HistoryEntry, SanitizedHistoryRecord,
62    DEPLOY_SECRET_PLACEHOLDER_PREFIX,
63};
64pub use lock::{
65    compute_plan_hash, load_lock, lock_from_plan, write_lock, DeployLockFile, DeployLockImage,
66};
67pub use plan_filter::{
68    filter_deploy_plan, logical_service_name, retain_services_in_plan, service_plan_labels,
69    unique_service_names,
70};
71pub use planner::{DefaultDeployPlanner, DeployPlanner};
72pub use promotion::DefaultPromoter;
73pub use providers::{
74    destination_to_provider, is_all_destinations, is_cloudflare_provider, is_kubernetes_provider,
75    is_local_provider, is_oci_provider, is_railway_provider, known_destinations,
76    normalize_destination, parse_destinations, provider_priority, provider_to_destination,
77    DESTINATION_ALL,
78};
79pub use runner::{DefaultDeployRunner, DeployRunner, DeployResult};
80pub use target_resolver::{resolve_target, TargetResolution};
81pub use types::*;
82pub use validator::{validate_project_config, validate_project_config_for_target};
83pub use verifier::{
84    k8s_verify_line_is_failure, DefaultDeployVerifier, DeployVerifier, VerifyResult,
85};