Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quarto-dev
GitHub Repository: quarto-dev/quarto-cli
Path: blob/main/src/core/ci-info.ts
3557 views
1
/*
2
* ci-info.ts
3
*
4
* Copyright (C) 2020-2022 Posit Software, PBC
5
* Copyright (c) 2016-2021 Thomas Watson Steen
6
*
7
* Adapted from: https://github.com/watson/ci-info
8
*/
9
10
export function runningInCI() {
11
// check generic env vars
12
if (
13
[
14
"CI", // Travis CI, CircleCI, Cirrus CI, Gitlab CI, // Appveyor, CodeShip, dsari
15
"CONTINUOUS_INTEGRATION", // Travis CI, Cirrus CI
16
"BUILD_NUMBER", // Jenkins, TeamCity
17
"RUN_ID", // TaskCluster, dsari
18
]
19
.some(checkEnv)
20
) {
21
return true;
22
}
23
24
// check database of vendor-specific env vars
25
return vendors.some((vendor) => {
26
const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env];
27
return envs.some(checkEnv);
28
});
29
}
30
31
function checkEnv(obj: string | Record<string, string>) {
32
if (typeof obj === "string") {
33
return !!Deno.env.get(obj);
34
} else {
35
return Object.keys(obj).every(function (k) {
36
return Deno.env.get(k) === obj[k];
37
});
38
}
39
}
40
41
// from https://github.com/watson/ci-info/blob/master/vendors.json
42
43
interface CIVendor {
44
name: string;
45
constant: string;
46
env: string | string[] | Record<string, string>;
47
pr?: string | Record<string, string | string[]>;
48
}
49
50
const vendors: CIVendor[] = [
51
{
52
"name": "AppVeyor",
53
"constant": "APPVEYOR",
54
"env": "APPVEYOR",
55
"pr": "APPVEYOR_PULL_REQUEST_NUMBER",
56
},
57
{
58
"name": "Azure Pipelines",
59
"constant": "AZURE_PIPELINES",
60
"env": "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",
61
"pr": "SYSTEM_PULLREQUEST_PULLREQUESTID",
62
},
63
{
64
"name": "Appcircle",
65
"constant": "APPCIRCLE",
66
"env": "AC_APPCIRCLE",
67
},
68
{
69
"name": "Bamboo",
70
"constant": "BAMBOO",
71
"env": "bamboo_planKey",
72
},
73
{
74
"name": "Bitbucket Pipelines",
75
"constant": "BITBUCKET",
76
"env": "BITBUCKET_COMMIT",
77
"pr": "BITBUCKET_PR_ID",
78
},
79
{
80
"name": "Bitrise",
81
"constant": "BITRISE",
82
"env": "BITRISE_IO",
83
"pr": "BITRISE_PULL_REQUEST",
84
},
85
{
86
"name": "Buddy",
87
"constant": "BUDDY",
88
"env": "BUDDY_WORKSPACE_ID",
89
"pr": "BUDDY_EXECUTION_PULL_REQUEST_ID",
90
},
91
{
92
"name": "Buildkite",
93
"constant": "BUILDKITE",
94
"env": "BUILDKITE",
95
"pr": { "env": "BUILDKITE_PULL_REQUEST", "ne": "false" },
96
},
97
{
98
"name": "CircleCI",
99
"constant": "CIRCLE",
100
"env": "CIRCLECI",
101
"pr": "CIRCLE_PULL_REQUEST",
102
},
103
{
104
"name": "Cirrus CI",
105
"constant": "CIRRUS",
106
"env": "CIRRUS_CI",
107
"pr": "CIRRUS_PR",
108
},
109
{
110
"name": "AWS CodeBuild",
111
"constant": "CODEBUILD",
112
"env": "CODEBUILD_BUILD_ARN",
113
},
114
{
115
"name": "Codefresh",
116
"constant": "CODEFRESH",
117
"env": "CF_BUILD_ID",
118
"pr": { "any": ["CF_PULL_REQUEST_NUMBER", "CF_PULL_REQUEST_ID"] },
119
},
120
{
121
"name": "Codeship",
122
"constant": "CODESHIP",
123
"env": { "CI_NAME": "codeship" },
124
},
125
{
126
"name": "Drone",
127
"constant": "DRONE",
128
"env": "DRONE",
129
"pr": { "DRONE_BUILD_EVENT": "pull_request" },
130
},
131
{
132
"name": "dsari",
133
"constant": "DSARI",
134
"env": "DSARI",
135
},
136
{
137
"name": "GitHub Actions",
138
"constant": "GITHUB_ACTIONS",
139
"env": "GITHUB_ACTIONS",
140
"pr": { "GITHUB_EVENT_NAME": "pull_request" },
141
},
142
{
143
"name": "GitLab CI",
144
"constant": "GITLAB",
145
"env": "GITLAB_CI",
146
"pr": "CI_MERGE_REQUEST_ID",
147
},
148
{
149
"name": "GoCD",
150
"constant": "GOCD",
151
"env": "GO_PIPELINE_LABEL",
152
},
153
{
154
"name": "LayerCI",
155
"constant": "LAYERCI",
156
"env": "LAYERCI",
157
"pr": "LAYERCI_PULL_REQUEST",
158
},
159
{
160
"name": "Hudson",
161
"constant": "HUDSON",
162
"env": "HUDSON_URL",
163
},
164
{
165
"name": "Jenkins",
166
"constant": "JENKINS",
167
"env": ["JENKINS_URL", "BUILD_ID"],
168
"pr": { "any": ["ghprbPullId", "CHANGE_ID"] },
169
},
170
{
171
"name": "Magnum CI",
172
"constant": "MAGNUM",
173
"env": "MAGNUM",
174
},
175
{
176
"name": "Netlify CI",
177
"constant": "NETLIFY",
178
"env": "NETLIFY",
179
"pr": { "env": "PULL_REQUEST", "ne": "false" },
180
},
181
{
182
"name": "Nevercode",
183
"constant": "NEVERCODE",
184
"env": "NEVERCODE",
185
"pr": { "env": "NEVERCODE_PULL_REQUEST", "ne": "false" },
186
},
187
{
188
"name": "Render",
189
"constant": "RENDER",
190
"env": "RENDER",
191
"pr": { "IS_PULL_REQUEST": "true" },
192
},
193
{
194
"name": "Sail CI",
195
"constant": "SAIL",
196
"env": "SAILCI",
197
"pr": "SAIL_PULL_REQUEST_NUMBER",
198
},
199
{
200
"name": "Semaphore",
201
"constant": "SEMAPHORE",
202
"env": "SEMAPHORE",
203
"pr": "PULL_REQUEST_NUMBER",
204
},
205
{
206
"name": "Screwdriver",
207
"constant": "SCREWDRIVER",
208
"env": "SCREWDRIVER",
209
"pr": { "env": "SD_PULL_REQUEST", "ne": "false" },
210
},
211
{
212
"name": "Shippable",
213
"constant": "SHIPPABLE",
214
"env": "SHIPPABLE",
215
"pr": { "IS_PULL_REQUEST": "true" },
216
},
217
{
218
"name": "Solano CI",
219
"constant": "SOLANO",
220
"env": "TDDIUM",
221
"pr": "TDDIUM_PR_ID",
222
},
223
{
224
"name": "Strider CD",
225
"constant": "STRIDER",
226
"env": "STRIDER",
227
},
228
{
229
"name": "TaskCluster",
230
"constant": "TASKCLUSTER",
231
"env": ["TASK_ID", "RUN_ID"],
232
},
233
{
234
"name": "TeamCity",
235
"constant": "TEAMCITY",
236
"env": "TEAMCITY_VERSION",
237
},
238
{
239
"name": "Travis CI",
240
"constant": "TRAVIS",
241
"env": "TRAVIS",
242
"pr": { "env": "TRAVIS_PULL_REQUEST", "ne": "false" },
243
},
244
{
245
"name": "Vercel",
246
"constant": "VERCEL",
247
"env": "NOW_BUILDER",
248
},
249
{
250
"name": "Visual Studio App Center",
251
"constant": "APPCENTER",
252
"env": "APPCENTER_BUILD_ID",
253
},
254
];
255
256