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}