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