1use indexmap::IndexMap;
5use serde::{Deserialize, Serialize};
6
7pub const SCHEMA_VERSION: u32 = 1;
8
9#[derive(Clone, Debug, Serialize, Deserialize, gen_macros::SpecShape)]
10#[spec(
11 args = "PackageArgs",
12 quirk = "crate::quirks::HelmQuirk",
13 args_field = "args",
14 root_field = "root_package",
15 members_field = "workspace_members",
16 crates_field = "packages"
17)]
18pub struct BuildSpec {
19 pub version: u32,
20 pub packages: IndexMap<String, PackageSpec>,
21 pub root_package: String,
22 pub workspace_members: Vec<String>,
23}
24
25#[derive(Clone, Debug, Serialize, Deserialize)]
26pub struct PackageSpec {
27 pub name: String,
28 pub version: String,
29 pub args: PackageArgs,
30 #[serde(default, skip_serializing_if = "Vec::is_empty")]
31 pub quirks: Vec<crate::quirks::HelmQuirk>,
32}
33
34#[derive(Clone, Debug, Default, Serialize, Deserialize)]
38pub struct PackageArgs {
39 pub name: Option<String>,
41 pub version: Option<String>,
43 #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
46 pub app_version: Option<String>,
47 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
49 pub chart_type: Option<String>,
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub description: Option<String>,
53 #[serde(rename = "kubeVersion", skip_serializing_if = "Option::is_none")]
55 pub kube_version: Option<String>,
56 #[serde(skip_serializing_if = "Vec::is_empty")]
58 pub dependencies: Vec<ChartDependency>,
59 #[serde(skip_serializing_if = "Vec::is_empty")]
61 pub maintainers: Vec<ChartMaintainer>,
62 #[serde(skip_serializing_if = "Vec::is_empty")]
64 pub keywords: Vec<String>,
65 #[serde(skip_serializing_if = "Vec::is_empty")]
67 pub sources: Vec<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub icon: Option<String>,
71 #[serde(skip_serializing_if = "Option::is_none")]
73 pub home: Option<String>,
74 #[serde(skip_serializing_if = "Option::is_none")]
77 pub deprecated: Option<bool>,
78}
79
80#[derive(Clone, Debug, Default, Serialize, Deserialize)]
81pub struct ChartDependency {
82 pub name: String,
83 pub version: String,
84 #[serde(skip_serializing_if = "Option::is_none")]
87 pub repository: Option<String>,
88 #[serde(skip_serializing_if = "Option::is_none")]
91 pub alias: Option<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
95 pub condition: Option<String>,
96 #[serde(skip_serializing_if = "Vec::is_empty")]
98 pub tags: Vec<String>,
99}
100
101#[derive(Clone, Debug, Default, Serialize, Deserialize)]
102pub struct ChartMaintainer {
103 pub name: String,
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub email: Option<String>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub url: Option<String>,
108}