Skip to main content

canic_host/deployment_truth/model/promotion/policy/
mod.rs

1use super::super::SafetyFindingV1;
2use super::source::{PromotionArtifactLevelV1, PromotionReadinessStatusV1};
3use serde::{Deserialize, Serialize};
4
5///
6/// RolePromotionPolicyV1
7///
8#[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///
16/// PromotionPolicyRequirementV1
17///
18#[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///
28/// PromotionPolicyClaimV1
29///
30#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize)]
31pub enum PromotionPolicyClaimV1 {
32    ByteIdenticalWasm,
33    TargetConfigDigest,
34}
35
36///
37/// PromotionPolicyCheckV1
38///
39#[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///
50/// RolePromotionPolicyDecisionV1
51///
52#[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}