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}