canic_host/deployment_truth/model/promotion/policy/
mod.rs1use super::super::SafetyFindingV1;
2use super::source::{PromotionArtifactLevelV1, PromotionReadinessStatusV1};
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
9pub struct RolePromotionPolicyV1 {
10 pub role: String,
11 pub allowed_promotion_levels: Vec<PromotionArtifactLevelV1>,
12 pub requirements: Vec<PromotionPolicyRequirementV1>,
13}
14
15#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
19pub enum PromotionPolicyRequirementV1 {
20 SameSourceRevision,
21 SameCargoFeatures,
22 TargetConfigDigest,
23 ByteIdenticalWasm,
24 SealedBytes,
25}
26
27#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
31pub enum PromotionPolicyClaimV1 {
32 ByteIdenticalWasm,
33 TargetConfigDigest,
34}
35
36#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
40pub struct PromotionPolicyCheckV1 {
41 pub schema_version: u32,
42 pub check_id: String,
43 pub promotion_policy_check_digest: String,
44 pub status: PromotionReadinessStatusV1,
45 pub roles: Vec<RolePromotionPolicyDecisionV1>,
46 pub blockers: Vec<SafetyFindingV1>,
47}
48
49#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
53pub struct RolePromotionPolicyDecisionV1 {
54 pub role: String,
55 pub requested_promotion_level: PromotionArtifactLevelV1,
56 pub allowed_promotion_levels: Vec<PromotionArtifactLevelV1>,
57 pub requirements: Vec<PromotionPolicyRequirementV1>,
58 pub claims: Vec<PromotionPolicyClaimV1>,
59 pub level_allowed: bool,
60 pub policy_satisfied: bool,
61}