Skip to main content

releasaurus_core/config/
resolved.rs

1use std::collections::HashMap;
2
3use derive_builder::Builder;
4use merge::Merge;
5use url::Url;
6
7use crate::config::{
8    changelog::{ChangelogConfig, RewordedCommit},
9    prerelease::{PrereleaseConfig, PrereleaseStrategy},
10};
11
12/// Runtime overrides for a specific named package.
13///
14/// Applied on top of global overrides and the package's TOML
15/// config. Only `Some` values take effect; `None` means "use the
16/// resolved default."
17#[derive(Debug, Clone, Merge)]
18pub struct PackageOverrides {
19    #[merge(strategy = merge::option::overwrite_none)]
20    pub tag_prefix: Option<String>,
21    #[merge(strategy = merge::option::overwrite_none)]
22    pub prerelease_suffix: Option<String>,
23    #[merge(strategy = merge::option::overwrite_none)]
24    pub prerelease_strategy: Option<PrereleaseStrategy>,
25}
26
27/// Runtime overrides that apply to all packages.
28///
29/// Typically sourced from CLI flags. Only `Some` values take
30/// effect.
31#[derive(Debug, Clone, Default, Merge)]
32pub struct GlobalOverrides {
33    #[merge(strategy = merge::option::overwrite_none)]
34    pub base_branch: Option<String>,
35    #[merge(strategy = merge::option::overwrite_none)]
36    pub tag_prefix: Option<String>,
37    #[merge(strategy = merge::option::overwrite_none)]
38    pub prerelease_suffix: Option<String>,
39    #[merge(strategy = merge::option::overwrite_none)]
40    pub prerelease_strategy: Option<PrereleaseStrategy>,
41}
42
43/// Package name used as the key in override and config maps.
44pub type PackageName = String;
45
46#[derive(Debug, Clone, Default)]
47pub struct CommitModifiers {
48    /// Commit sha (or prefix) to skip when calculating next version and
49    /// generating changelog. Matches any commit whose SHA starts with the
50    /// provided value
51    pub skip_shas: Vec<String>,
52    /// Rewords a commit message when generating changelog. The SHA can be a
53    /// prefix - matches any commit whose SHA starts with the provided value.
54    pub reword: Vec<RewordedCommit>,
55}
56
57/// Fully resolved runtime configuration for the release pipeline.
58///
59/// Produced by [`Resolver::resolve`][crate::resolver::Resolver::resolve]
60/// from the loaded TOML config, CLI overrides, and forge metadata.
61/// All optional values have been resolved to concrete defaults.
62#[derive(Debug, Builder)]
63#[builder(setter(into))]
64pub struct ResolvedConfig {
65    pub repo_name: String,
66    pub base_branch: String,
67    pub release_link_base_url: Url,
68    pub compare_link_base_url: Url,
69    pub package_overrides: HashMap<PackageName, PackageOverrides>,
70    pub global_overrides: GlobalOverrides,
71    pub commit_modifiers: CommitModifiers,
72    pub first_release_search_depth: usize,
73    pub tag_search_depth: usize,
74    pub separate_pull_requests: bool,
75    pub prerelease: PrereleaseConfig,
76    pub auto_start_next: Option<bool>,
77    pub breaking_always_increment_major: bool,
78    pub features_always_increment_minor: bool,
79    pub custom_major_increment_regex: Option<String>,
80    pub custom_minor_increment_regex: Option<String>,
81    pub changelog: ChangelogConfig,
82}