use std::path::PathBuf;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::aur_source::AurSourceConfig;
use super::{StringOrBool, deserialize_string_or_bool_opt};
mod homebrew;
pub use homebrew::*;
mod chocolatey;
pub use chocolatey::*;
mod winget;
pub use winget::*;
mod aur;
pub use aur::*;
mod krew;
pub use krew::*;
mod nix;
pub use nix::*;
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct RepositoryConfig {
pub owner: Option<String>,
pub name: Option<String>,
pub token: Option<String>,
pub token_type: Option<String>,
pub branch: Option<String>,
pub git: Option<GitRepoConfig>,
pub pull_request: Option<PullRequestConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct GitRepoConfig {
pub url: Option<String>,
pub ssh_command: Option<String>,
pub private_key: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct PullRequestConfig {
pub enabled: Option<bool>,
pub draft: Option<bool>,
pub body: Option<String>,
pub base: Option<PullRequestBaseConfig>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct PullRequestBaseConfig {
pub owner: Option<String>,
pub name: Option<String>,
pub branch: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct CommitAuthorConfig {
pub name: Option<String>,
pub email: Option<String>,
pub signing: Option<CommitSigningConfig>,
#[serde(default)]
pub use_github_app_token: bool,
}
impl CommitAuthorConfig {
pub fn normalize_defaults(&mut self) {
if self.name.as_deref().is_none_or(str::is_empty) {
self.name = Some("anodizer".to_string());
}
if self.email.as_deref().is_none_or(str::is_empty) {
self.email = Some("bot@anodizer.dev".to_string());
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default)]
pub struct CommitSigningConfig {
pub enabled: Option<bool>,
pub key: Option<String>,
pub program: Option<String>,
pub format: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct PublishConfig {
pub cargo: Option<CargoPublishConfig>,
pub homebrew: Option<HomebrewConfig>,
pub homebrew_cask: Option<HomebrewCaskConfig>,
pub scoop: Option<ScoopConfig>,
pub chocolatey: Option<ChocolateyConfig>,
pub winget: Option<WingetConfig>,
pub aur: Option<AurConfig>,
pub aur_source: Option<AurSourceConfig>,
pub krew: Option<KrewConfig>,
pub nix: Option<NixConfig>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, JsonSchema)]
#[serde(default, deny_unknown_fields)]
pub struct CargoPublishConfig {
pub registry: Option<String>,
pub index: Option<String>,
pub index_timeout: Option<u64>,
pub no_verify: Option<bool>,
pub allow_dirty: Option<bool>,
pub features: Option<Vec<String>>,
pub all_features: Option<bool>,
pub no_default_features: Option<bool>,
pub target: Option<String>,
pub target_dir: Option<PathBuf>,
pub jobs: Option<u32>,
pub keep_going: Option<bool>,
pub manifest_path: Option<PathBuf>,
pub locked: Option<bool>,
pub offline: Option<bool>,
pub frozen: Option<bool>,
#[serde(default, deserialize_with = "deserialize_string_or_bool_opt")]
pub skip: Option<StringOrBool>,
}