Skip to main content

canic_host/deployment_truth/model/execution/
mod.rs

1use super::inventory::ObservationStatusV1;
2use super::safety::SafetyFindingV1;
3use serde::{Deserialize, Serialize};
4
5///
6/// DeploymentReceiptV1
7///
8#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
9pub struct DeploymentReceiptV1 {
10    pub schema_version: u32,
11    pub operation_id: String,
12    pub plan_id: String,
13    pub execution_context: Option<DeploymentExecutionContextV1>,
14    pub operation_status: DeploymentExecutionStatusV1,
15    pub started_at: String,
16    pub finished_at: Option<String>,
17    pub operator_principal: Option<String>,
18    pub root_principal: Option<String>,
19    pub previous_observed_deployment_epoch: Option<u64>,
20    pub phase_receipts: Vec<PhaseReceiptV1>,
21    pub role_phase_receipts: Vec<RolePhaseReceiptV1>,
22    pub final_inventory_id: Option<String>,
23    pub command_result: DeploymentCommandResultV1,
24}
25
26///
27/// DeploymentExecutionContextV1
28///
29#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
30pub struct DeploymentExecutionContextV1 {
31    pub workspace_root: Option<String>,
32    pub icp_root: Option<String>,
33    pub artifact_roots: Vec<String>,
34    pub backend: DeploymentExecutorBackendV1,
35    pub backend_capabilities: Vec<DeploymentExecutorCapabilityV1>,
36}
37
38///
39/// DeploymentExecutionPreflightV1
40///
41#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
42pub struct DeploymentExecutionPreflightV1 {
43    pub schema_version: u32,
44    pub plan_id: String,
45    pub safety_report_id: String,
46    pub authority_plan_id: String,
47    pub backend: DeploymentExecutorBackendV1,
48    pub status: DeploymentExecutionPreflightStatusV1,
49    pub planned_phases: Vec<String>,
50    pub required_capabilities: Vec<DeploymentExecutorCapabilityV1>,
51    pub missing_capabilities: Vec<DeploymentExecutorCapabilityV1>,
52    pub blockers: Vec<SafetyFindingV1>,
53}
54
55///
56/// DeploymentExecutionPreflightStatusV1
57///
58#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
59pub enum DeploymentExecutionPreflightStatusV1 {
60    Ready,
61    Blocked,
62}
63
64///
65/// DeploymentExecutorBackendV1
66///
67#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
68pub enum DeploymentExecutorBackendV1 {
69    CurrentCli,
70    PocketIc,
71    DirectAgent,
72    Other { name: String },
73}
74
75///
76/// DeploymentExecutorCapabilityV1
77///
78#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
79pub enum DeploymentExecutorCapabilityV1 {
80    CreateCanister,
81    CanisterStatus,
82    UpdateSettings,
83    InstallCode,
84    Call,
85    Query,
86    StageArtifact,
87}
88
89///
90/// PhaseReceiptV1
91///
92#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
93pub struct PhaseReceiptV1 {
94    pub phase: String,
95    pub started_at: String,
96    pub finished_at: Option<String>,
97    pub attempted_action: String,
98    pub verified_postcondition: VerifiedPostconditionV1,
99}
100
101///
102/// VerifiedPostconditionV1
103///
104#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
105pub struct VerifiedPostconditionV1 {
106    pub status: ObservationStatusV1,
107    pub evidence: Vec<String>,
108}
109
110///
111/// DeploymentExecutionStatusV1
112///
113#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
114pub enum DeploymentExecutionStatusV1 {
115    NotStarted,
116    InProgress,
117    FailedBeforeMutation,
118    PartiallyApplied,
119    FailedAfterMutation,
120    Complete,
121}
122
123///
124/// DeploymentCommandResultV1
125///
126#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
127pub enum DeploymentCommandResultV1 {
128    NotFinished,
129    Succeeded,
130    Failed { code: String, message: String },
131}
132
133///
134/// RolePhaseReceiptV1
135///
136#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
137pub struct RolePhaseReceiptV1 {
138    pub role: String,
139    pub phase: String,
140    pub result: RolePhaseResultV1,
141    pub previous_module_hash: Option<String>,
142    pub target_module_hash: Option<String>,
143    pub observed_module_hash_after: Option<String>,
144    pub artifact_digest: Option<String>,
145    pub canonical_embedded_config_sha256: Option<String>,
146    pub error: Option<String>,
147}
148
149///
150/// RolePhaseResultV1
151///
152#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
153pub enum RolePhaseResultV1 {
154    Applied,
155    Failed,
156    Skipped,
157    NotAttempted,
158    VerifiedAlreadyApplied,
159}