ci_info/
types.rs

1//! # types
2//!
3//! Defines the various types and aliases.
4//!
5
6#[cfg(test)]
7#[path = "./types_test.rs"]
8mod types_test;
9
10#[cfg_attr(feature = "serde-1", derive(Serialize, Deserialize))]
11#[derive(Debug, Clone, PartialEq, Copy)]
12#[non_exhaustive]
13/// Supported vendors enum
14pub enum Vendor {
15    /// CI vendor
16    Agola,
17    /// CI vendor
18    AppCenter,
19    /// CI vendor
20    AppCircle,
21    /// CI vendor
22    AppVeyor,
23    /// CI vendor
24    AWSCodeBuild,
25    /// CI vendor
26    AzurePipelines,
27    /// CI vendor
28    Bamboo,
29    /// CI vendor
30    BitbucketPipelines,
31    /// CI vendor
32    Bitrise,
33    /// CI vendor
34    Buddy,
35    /// CI vendor
36    Buildkite,
37    /// CI vendor
38    CircleCI,
39    /// CI vendor
40    CirrusCI,
41    /// CI vendor
42    Codefresh,
43    /// CI vendor
44    Codemagic,
45    /// CI vendor
46    Codeship,
47    /// CI vendor
48    Drone,
49    /// CI vendor
50    DSARI,
51    /// CI vendor
52    EARTHLY,
53    /// CI vendor
54    FlowCI,
55    /// CI vendor
56    GiteaActions,
57    /// CI vendor
58    GitLabCI,
59    /// CI vendor
60    GitHubActions,
61    /// CI vendor
62    Gerrit,
63    /// CI vendor
64    GoCD,
65    /// CI vendor
66    GoogleCloudBuild,
67    /// CI vendor
68    HarnessCI,
69    /// CI vendor
70    Heroku,
71    /// CI vendor
72    Hudson,
73    /// CI vendor
74    Jenkins,
75    /// CI vendor
76    JenkinsX,
77    /// CI vendor
78    LayerCI,
79    /// CI vendor
80    MagnumCI,
81    /// CI vendor
82    NetlifyCI,
83    /// CI vendor
84    Nevercode,
85    /// CI vendor
86    Prow,
87    /// CI vendor
88    Render,
89    /// CI vendor
90    SailCI,
91    /// CI vendor
92    Screwdriver,
93    /// CI vendor
94    Semaphore,
95    /// CI vendor
96    SourceHut,
97    /// CI vendor
98    StriderCD,
99    /// CI vendor
100    TaskCluster,
101    /// CI vendor
102    TeamCity,
103    /// CI vendor
104    TravisCI,
105    /// CI vendor
106    Vela,
107    /// CI vendor
108    Vercel,
109    /// CI vendor
110    WoodpeckerCI,
111    /// CI vendor
112    XcodeCloud,
113    /// CI vendor
114    XcodeServer,
115    /// CI vendor
116    Unknown,
117}
118
119#[derive(Debug, Clone)]
120pub(crate) enum EnvValue {
121    /// Env name
122    Exists(String),
123    /// Env names
124    AllExists(Vec<String>),
125    /// Env names
126    AnyExists(Vec<String>),
127    /// Env name and value
128    Value(String, String),
129    /// Env name and value which should not be defined
130    NotEqual(String, String),
131    /// Env name contains the provided value (case insensitive)
132    Contains(String, String),
133    /// Env value exists and not empty
134    NotEmpty(String),
135}
136
137/// Vendor detection info
138#[derive(Debug, Clone)]
139pub(crate) struct VendorConfig {
140    /// vendor name
141    pub(crate) name: String,
142    /// The CI vendor
143    pub(crate) vendor: Vendor,
144    /// CI env var name
145    pub(crate) ci_env: EnvValue,
146    /// PR env var name
147    pub(crate) pr_env: Option<EnvValue>,
148    /// Branch name env var name
149    pub(crate) branch_name_env: Option<String>,
150}
151
152#[cfg_attr(feature = "serde-1", derive(Serialize, Deserialize))]
153#[derive(Debug, Clone, PartialEq, Default)]
154/// CI info
155pub struct CiInfo {
156    /// The CI vendor
157    pub vendor: Option<Vendor>,
158    /// vendor name
159    pub name: Option<String>,
160    /// True if CI environment
161    pub ci: bool,
162    /// True if currently running a PR build, None if unknown
163    pub pr: Option<bool>,
164    /// The branch name for the given build
165    pub branch_name: Option<String>,
166}
167
168impl CiInfo {
169    /// Returns new instance
170    pub fn new() -> CiInfo {
171        Default::default()
172    }
173}