1use serde::{Deserialize, Serialize};
8use std::collections::BTreeMap;
9
10#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
12pub enum IncrementStrategy {
13 None,
14 Major,
15 Minor,
16 Patch,
17 Inherit,
18}
19
20#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
22pub enum DeploymentMode {
23 ManualDeployment,
24 ContinuousDelivery,
25 ContinuousDeployment,
26}
27
28#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
30pub enum CommitMessageIncrementMode {
31 Enabled,
32 Disabled,
33 MergeMessageOnly,
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
38pub enum VersionStrategy {
39 None,
40 Fallback,
41 ConfiguredNextVersion,
42 MergeMessage,
43 TaggedCommit,
44 TrackReleaseBranches,
45 VersionInBranchName,
46 Mainline,
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
51pub enum VersioningScheme {
52 MajorMinorPatchTag,
53 MajorMinorPatch,
54 MajorMinor,
55 Major,
56 None,
57}
58
59#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
61pub enum SemanticVersionFormat {
62 Strict,
63 Loose,
64}
65
66#[derive(Debug, Clone, Default, Serialize, Deserialize)]
68#[serde(rename_all = "kebab-case")]
69pub struct PreventIncrement {
70 #[serde(default)]
71 pub of_merged_branch: Option<bool>,
72 #[serde(default)]
73 pub when_branch_merged: Option<bool>,
74 #[serde(default)]
75 pub when_current_commit_tagged: Option<bool>,
76}
77
78#[derive(Debug, Clone, Default, Serialize, Deserialize)]
80#[serde(rename_all = "kebab-case")]
81pub struct IgnoreConfig {
82 #[serde(default)]
83 pub commits_before: Option<String>,
84 #[serde(default)]
85 pub sha: Vec<String>,
86 #[serde(default, skip_serializing_if = "Vec::is_empty")]
89 pub paths: Vec<String>,
90}
91
92#[derive(Debug, Clone, Default, Serialize, Deserialize)]
94#[serde(rename_all = "kebab-case")]
95pub struct BranchConfiguration {
96 #[serde(default, skip_serializing_if = "Option::is_none")]
97 pub regex: Option<String>,
98 #[serde(default, skip_serializing_if = "Option::is_none")]
99 pub label: Option<String>,
100 #[serde(default, skip_serializing_if = "Option::is_none")]
101 pub increment: Option<IncrementStrategy>,
102 #[serde(default, skip_serializing_if = "Option::is_none")]
103 pub mode: Option<DeploymentMode>,
104 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub commit_message_incrementing: Option<CommitMessageIncrementMode>,
106 #[serde(default, skip_serializing_if = "Option::is_none")]
107 pub prevent_increment: Option<PreventIncrement>,
108 #[serde(default, skip_serializing_if = "Option::is_none")]
109 pub track_merge_target: Option<bool>,
110 #[serde(default, skip_serializing_if = "Option::is_none")]
111 pub track_merge_message: Option<bool>,
112 #[serde(default, skip_serializing_if = "Option::is_none")]
113 pub tracks_release_branches: Option<bool>,
114 #[serde(default, skip_serializing_if = "Option::is_none")]
115 pub is_release_branch: Option<bool>,
116 #[serde(default, skip_serializing_if = "Option::is_none")]
117 pub is_main_branch: Option<bool>,
118 #[serde(default, skip_serializing_if = "Option::is_none")]
119 pub pre_release_weight: Option<i64>,
120 #[serde(default, skip_serializing_if = "Vec::is_empty")]
121 pub source_branches: Vec<String>,
122 #[serde(default, skip_serializing_if = "Vec::is_empty")]
123 pub is_source_branch_for: Vec<String>,
124 #[serde(default, skip_serializing_if = "Option::is_none")]
128 pub label_number_pattern: Option<String>,
129}
130
131#[derive(Debug, Clone, Default, Serialize, Deserialize)]
133#[serde(rename_all = "kebab-case")]
134pub struct GitVersionConfiguration {
135 #[serde(default, skip_serializing_if = "Option::is_none")]
136 pub workflow: Option<String>,
137 #[serde(default, skip_serializing_if = "Option::is_none")]
138 pub assembly_versioning_scheme: Option<VersioningScheme>,
139 #[serde(default, skip_serializing_if = "Option::is_none")]
140 pub assembly_file_versioning_scheme: Option<VersioningScheme>,
141 #[serde(default, skip_serializing_if = "Option::is_none")]
142 pub assembly_informational_format: Option<String>,
143 #[serde(default, skip_serializing_if = "Option::is_none")]
144 pub assembly_versioning_format: Option<String>,
145 #[serde(default, skip_serializing_if = "Option::is_none")]
146 pub assembly_file_versioning_format: Option<String>,
147 #[serde(default, skip_serializing_if = "Option::is_none")]
148 pub tag_prefix: Option<String>,
149 #[serde(default, skip_serializing_if = "Option::is_none")]
150 pub version_in_branch_pattern: Option<String>,
151 #[serde(default, skip_serializing_if = "Option::is_none")]
152 pub next_version: Option<String>,
153 #[serde(default, skip_serializing_if = "Option::is_none")]
154 pub major_version_bump_message: Option<String>,
155 #[serde(default, skip_serializing_if = "Option::is_none")]
156 pub minor_version_bump_message: Option<String>,
157 #[serde(default, skip_serializing_if = "Option::is_none")]
158 pub patch_version_bump_message: Option<String>,
159 #[serde(default, skip_serializing_if = "Option::is_none")]
160 pub no_bump_message: Option<String>,
161 #[serde(default, skip_serializing_if = "Option::is_none")]
162 pub tag_pre_release_weight: Option<i64>,
163 #[serde(default, skip_serializing_if = "Option::is_none")]
164 pub commit_date_format: Option<String>,
165 #[serde(default, skip_serializing_if = "Option::is_none")]
166 pub semantic_version_format: Option<SemanticVersionFormat>,
167 #[serde(default, skip_serializing_if = "Option::is_none")]
168 pub update_build_number: Option<bool>,
169 #[serde(default, skip_serializing_if = "Vec::is_empty")]
170 pub strategies: Vec<VersionStrategy>,
171
172 #[serde(default, skip_serializing_if = "Option::is_none")]
174 pub increment: Option<IncrementStrategy>,
175 #[serde(default, skip_serializing_if = "Option::is_none")]
176 pub mode: Option<DeploymentMode>,
177 #[serde(default, skip_serializing_if = "Option::is_none")]
178 pub label: Option<String>,
179 #[serde(default, skip_serializing_if = "Option::is_none")]
180 pub regex: Option<String>,
181 #[serde(default, skip_serializing_if = "Option::is_none")]
182 pub commit_message_incrementing: Option<CommitMessageIncrementMode>,
183 #[serde(default, skip_serializing_if = "Option::is_none")]
184 pub prevent_increment: Option<PreventIncrement>,
185 #[serde(default, skip_serializing_if = "Option::is_none")]
186 pub track_merge_target: Option<bool>,
187 #[serde(default, skip_serializing_if = "Option::is_none")]
188 pub track_merge_message: Option<bool>,
189 #[serde(default, skip_serializing_if = "Option::is_none")]
190 pub tracks_release_branches: Option<bool>,
191 #[serde(default, skip_serializing_if = "Option::is_none")]
192 pub is_release_branch: Option<bool>,
193 #[serde(default, skip_serializing_if = "Option::is_none")]
194 pub is_main_branch: Option<bool>,
195 #[serde(default, skip_serializing_if = "Option::is_none")]
196 pub pre_release_weight: Option<i64>,
197 #[serde(default, skip_serializing_if = "Vec::is_empty")]
198 pub source_branches: Vec<String>,
199 #[serde(default, skip_serializing_if = "Vec::is_empty")]
200 pub is_source_branch_for: Vec<String>,
201 #[serde(default, skip_serializing_if = "Option::is_none")]
203 pub label_number_pattern: Option<String>,
204
205 #[serde(default)]
206 pub ignore: IgnoreConfig,
207 #[serde(default)]
208 pub merge_message_formats: BTreeMap<String, String>,
209 #[serde(default)]
210 pub branches: BTreeMap<String, BranchConfiguration>,
211
212 #[serde(default, skip_serializing_if = "BTreeMap::is_empty")]
215 pub exec: BTreeMap<String, String>,
216}