anodizer_core/config/milestone.rs
1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use super::ScmRepoConfig;
5
6// ---------------------------------------------------------------------------
7// MilestoneConfig
8// ---------------------------------------------------------------------------
9
10#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
11#[serde(default, deny_unknown_fields)]
12pub struct MilestoneConfig {
13 /// Repository owner/name. Auto-detected from git remote if not set.
14 pub repo: Option<ScmRepoConfig>,
15 /// Close the milestone on release. Default: false.
16 pub close: Option<bool>,
17 /// Fail the pipeline if milestone close fails. Default: false.
18 pub fail_on_error: Option<bool>,
19 /// Milestone name template (default: "{{ Tag }}").
20 pub name_template: Option<String>,
21}
22
23impl MilestoneConfig {
24 /// Default milestone name template (`"{{Tag}}"`).
25 /// Anodize uses Tera-style `{{ Tag }}`; the rendered value is
26 /// identical for any tag the project produces.
27 pub const DEFAULT_NAME_TEMPLATE: &'static str = "{{ Tag }}";
28
29 /// Resolve the milestone name template, falling back to
30 /// [`Self::DEFAULT_NAME_TEMPLATE`].
31 pub fn resolved_name_template(&self) -> &str {
32 self.name_template
33 .as_deref()
34 .unwrap_or(Self::DEFAULT_NAME_TEMPLATE)
35 }
36
37 /// Resolve `close`, falling back to `false` (don't close milestones
38 /// on release by default).
39 pub fn resolved_close(&self) -> bool {
40 self.close.unwrap_or(false)
41 }
42
43 /// Resolve `fail_on_error`, falling back to `false` (milestone close
44 /// errors are warnings by default; opt in to fail-the-build).
45 pub fn resolved_fail_on_error(&self) -> bool {
46 self.fail_on_error.unwrap_or(false)
47 }
48}