gh_workflow/
defaults.rs

1//!
2//! Default settings types for GitHub workflows.
3
4use derive_setters::Setters;
5use serde::{Deserialize, Serialize};
6
7use crate::concurrency::Concurrency;
8
9/// Represents default settings for jobs.
10#[derive(Debug, Setters, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
11#[serde(rename_all = "kebab-case")]
12#[setters(strip_option, into)]
13pub struct Defaults {
14    /// Default settings for running jobs.
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub run: Option<RunDefaults>,
17
18    /// Default retry settings for jobs.
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub retry: Option<RetryDefaults>,
21
22    /// Default concurrency settings for jobs.
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub concurrency: Option<Concurrency>,
25}
26
27/// Represents default settings for running commands.
28#[derive(Debug, Setters, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
29#[serde(rename_all = "kebab-case")]
30#[setters(strip_option, into)]
31pub struct RunDefaults {
32    /// The shell to use for running commands.
33    #[serde(skip_serializing_if = "Option::is_none")]
34    pub shell: Option<String>,
35
36    /// The working directory for running commands.
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub working_directory: Option<String>,
39}
40
41/// Represents default settings for retries.
42#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
43#[serde(rename_all = "kebab-case")]
44pub struct RetryDefaults {
45    /// The maximum number of retry attempts.
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub max_attempts: Option<u32>,
48}
49
50/// Represents a strategy for retrying jobs.
51#[derive(Debug, Serialize, Deserialize, Clone, Default, PartialEq, Eq)]
52#[serde(rename_all = "kebab-case")]
53pub struct RetryStrategy {
54    /// The maximum number of retry attempts.
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub max_attempts: Option<u32>,
57}