Codebase list node-ci-info / 97b715e
Update upstream source from tag 'upstream/3.6.1+_cs1.1.0' Update to upstream version '3.6.1+~cs1.1.0' with Debian dir 095ccde629795b5b7af3b56b3c873aba147b7a42 Yadd 1 year, 5 months ago
7 changed file(s) with 280 addition(s) and 192 deletion(s). Raw diff Collapse all Expand all
00 # Changelog
1
2 ## v3.6.1
3
4 - fix error in typings [357b454](https://github.com/watson/ci-info/commit/357b454)
5
6 ## v3.6.0
7
8 This release attempts to bring parity with [@npmcli/ci-detect](https://github.com/npm/ci-detect). See [#95](https://github.com/watson/ci-info/pull/95) for more details.
9
10 - support gerrit ([#95](https://github.com/watson/ci-info/pull/95))
11 - support google cloud build ([#95](https://github.com/watson/ci-info/pull/95))
12 - support heroku ([#95](https://github.com/watson/ci-info/pull/95))
13 - support anonymous CI's that exposes BUILD_ID and CI_NAME env vars ([#95](https://github.com/watson/ci-info/pull/95))
14 - support more vercel environments ([#95](https://github.com/watson/ci-info/pull/95))
115
216 ## v3.5.0
317
3131
3232 Officially supported CI servers:
3333
34 | Name | Constant | isPR |
35 | ------------------------------------------------------------------------------- | -------------------- | ---- |
36 | [AWS CodeBuild](https://aws.amazon.com/codebuild/) | `ci.CODEBUILD` | 🚫 |
37 | [AppVeyor](http://www.appveyor.com) | `ci.APPVEYOR` | ✅ |
38 | [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | `ci.AZURE_PIPELINES` | ✅ |
39 | [Appcircle](https://appcircle.io/) | `ci.APPCIRCLE` | 🚫 |
40 | [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian | `ci.BAMBOO` | 🚫 |
41 | [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines) | `ci.BITBUCKET` | ✅ |
42 | [Bitrise](https://www.bitrise.io/) | `ci.BITRISE` | ✅ |
43 | [Buddy](https://buddy.works/) | `ci.BUDDY` | ✅ |
44 | [Buildkite](https://buildkite.com) | `ci.BUILDKITE` | ✅ |
45 | [CircleCI](http://circleci.com) | `ci.CIRCLE` | ✅ |
46 | [Cirrus CI](https://cirrus-ci.org) | `ci.CIRRUS` | ✅ |
47 | [Codefresh](https://codefresh.io/) | `ci.CODEFRESH` | ✅ |
48 | [Codeship](https://codeship.com) | `ci.CODESHIP` | 🚫 |
49 | [Drone](https://drone.io) | `ci.DRONE` | ✅ |
50 | [dsari](https://github.com/rfinnie/dsari) | `ci.DSARI` | 🚫 |
51 | [Expo Application Services](https://expo.dev/eas) | `ci.EAS` | 🚫 |
52 | [GitHub Actions](https://github.com/features/actions/) | `ci.GITHUB_ACTIONS` | ✅ |
53 | [GitLab CI](https://about.gitlab.com/gitlab-ci/) | `ci.GITLAB` | ✅ |
54 | [GoCD](https://www.go.cd/) | `ci.GOCD` | 🚫 |
55 | [Hudson](http://hudson-ci.org) | `ci.HUDSON` | 🚫 |
56 | [Jenkins CI](https://jenkins-ci.org) | `ci.JENKINS` | ✅ |
57 | [LayerCI](https://layerci.com/) | `ci.LAYERCI` | ✅ |
58 | [Magnum CI](https://magnum-ci.com) | `ci.MAGNUM` | 🚫 |
59 | [Netlify CI](https://www.netlify.com/) | `ci.NETLIFY` | ✅ |
60 | [Nevercode](http://nevercode.io/) | `ci.NEVERCODE` | ✅ |
61 | [Render](https://render.com/) | `ci.RENDER` | ✅ |
62 | [Sail CI](https://sail.ci/) | `ci.SAIL` | ✅ |
63 | [Screwdriver](https://screwdriver.cd/) | `ci.SCREWDRIVER` | ✅ |
64 | [Semaphore](https://semaphoreci.com) | `ci.SEMAPHORE` | ✅ |
65 | [Shippable](https://www.shippable.com/) | `ci.SHIPPABLE` | ✅ |
66 | [Solano CI](https://www.solanolabs.com/) | `ci.SOLANO` | ✅ |
67 | [Strider CD](https://strider-cd.github.io/) | `ci.STRIDER` | 🚫 |
68 | [TaskCluster](http://docs.taskcluster.net) | `ci.TASKCLUSTER` | 🚫 |
69 | [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains | `ci.TEAMCITY` | 🚫 |
70 | [Travis CI](http://travis-ci.org) | `ci.TRAVIS` | ✅ |
71 | [Vercel](https://vercel.com/) | `ci.VERCEL` | 🚫 |
72 | [Visual Studio App Center](https://appcenter.ms/) | `ci.APPCENTER` | 🚫 |
73 | [Woodpecker](https://woodpecker-ci.org/) | `ci.WOODPECKER` | ✅ |
34 | Name | Constant | isPR |
35 | ------------------------------------------------------------------------------- | -------------------- | ---- |
36 | [AWS CodeBuild](https://aws.amazon.com/codebuild/) | `ci.CODEBUILD` | 🚫 |
37 | [AppVeyor](http://www.appveyor.com) | `ci.APPVEYOR` | ✅ |
38 | [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | `ci.AZURE_PIPELINES` | ✅ |
39 | [Appcircle](https://appcircle.io/) | `ci.APPCIRCLE` | 🚫 |
40 | [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian | `ci.BAMBOO` | 🚫 |
41 | [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines) | `ci.BITBUCKET` | ✅ |
42 | [Bitrise](https://www.bitrise.io/) | `ci.BITRISE` | ✅ |
43 | [Buddy](https://buddy.works/) | `ci.BUDDY` | ✅ |
44 | [Buildkite](https://buildkite.com) | `ci.BUILDKITE` | ✅ |
45 | [CircleCI](http://circleci.com) | `ci.CIRCLE` | ✅ |
46 | [Cirrus CI](https://cirrus-ci.org) | `ci.CIRRUS` | ✅ |
47 | [Codefresh](https://codefresh.io/) | `ci.CODEFRESH` | ✅ |
48 | [Codeship](https://codeship.com) | `ci.CODESHIP` | 🚫 |
49 | [Drone](https://drone.io) | `ci.DRONE` | ✅ |
50 | [dsari](https://github.com/rfinnie/dsari) | `ci.DSARI` | 🚫 |
51 | [Expo Application Services](https://expo.dev/eas) | `ci.EAS` | 🚫 |
52 | [Gerrit CI](https://www.gerritcodereview.com) | `ci.GERRIT` | 🚫 |
53 | [GitHub Actions](https://github.com/features/actions/) | `ci.GITHUB_ACTIONS` | ✅ |
54 | [GitLab CI](https://about.gitlab.com/gitlab-ci/) | `ci.GITLAB` | ✅ |
55 | [GoCD](https://www.go.cd/) | `ci.GOCD` | 🚫 |
56 | [Google Cloud Build](https://cloud.google.com/build) | `ci.GOOGLE_CLOUD_BUILD` | 🚫 |
57 | [Heroku](https://www.heroku.com) | `ci.HEROKU` | 🚫 |
58 | [Hudson](http://hudson-ci.org) | `ci.HUDSON` | 🚫 |
59 | [Jenkins CI](https://jenkins-ci.org) | `ci.JENKINS` | ✅ |
60 | [LayerCI](https://layerci.com/) | `ci.LAYERCI` | ✅ |
61 | [Magnum CI](https://magnum-ci.com) | `ci.MAGNUM` | 🚫 |
62 | [Netlify CI](https://www.netlify.com/) | `ci.NETLIFY` | ✅ |
63 | [Nevercode](http://nevercode.io/) | `ci.NEVERCODE` | ✅ |
64 | [Render](https://render.com/) | `ci.RENDER` | ✅ |
65 | [Sail CI](https://sail.ci/) | `ci.SAIL` | ✅ |
66 | [Screwdriver](https://screwdriver.cd/) | `ci.SCREWDRIVER` | ✅ |
67 | [Semaphore](https://semaphoreci.com) | `ci.SEMAPHORE` | ✅ |
68 | [Shippable](https://www.shippable.com/) | `ci.SHIPPABLE` | ✅ |
69 | [Solano CI](https://www.solanolabs.com/) | `ci.SOLANO` | ✅ |
70 | [Strider CD](https://strider-cd.github.io/) | `ci.STRIDER` | 🚫 |
71 | [TaskCluster](http://docs.taskcluster.net) | `ci.TASKCLUSTER` | 🚫 |
72 | [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains | `ci.TEAMCITY` | 🚫 |
73 | [Travis CI](http://travis-ci.org) | `ci.TRAVIS` | ✅ |
74 | [Vercel](https://vercel.com/) | `ci.VERCEL` | 🚫 |
75 | [Visual Studio App Center](https://appcenter.ms/) | `ci.APPCENTER` | 🚫 |
76 | [Woodpecker](https://woodpecker-ci.org/) | `ci.WOODPECKER` | ✅ |
7477
7578 ## API
7679
121124 |----------|------------|
122125 | Go | https://github.com/hofstadter-io/cinful |
123126 | Rust | https://github.com/sagiegurari/ci_info |
127 | Kotlin | https://github.com/cloudflightio/ci-info |
124128
125129 ## License
126130
4040 export const DRONE: boolean;
4141 export const DSARI: boolean;
4242 export const EAS: boolean;
43 export const GERRIT: boolean;
4344 export const GITHUB_ACTIONS: boolean;
4445 export const GITLAB: boolean;
4546 export const GOCD: boolean;
47 export const GOOGLE_CLOUD_BUILD: boolean;
48 export const HEROKU: boolean;
4649 export const HUDSON: boolean;
4750 export const JENKINS: boolean;
4851 export const LAYERCI: boolean;
5353 })
5454
5555 exports.isCI = !!(
56 env.BUILD_ID || // Jenkins, Cloudbees
57 env.BUILD_NUMBER || // Jenkins, TeamCity
5658 env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari
57 env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI
58 env.BUILD_NUMBER || // Jenkins, TeamCity
5959 env.CI_APP_ID || // Appflow
6060 env.CI_BUILD_ID || // Appflow
6161 env.CI_BUILD_NUMBER || // Appflow
62 env.CI_NAME || // Codeship and others
63 env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI
6264 env.RUN_ID || // TaskCluster, dsari
6365 exports.name ||
6466 false
6567 )
6668
6769 function checkEnv (obj) {
70 // "env": "CIRRUS"
6871 if (typeof obj === 'string') return !!env[obj]
72
73 // "env": { "env": "NODE", "includes": "/app/.heroku/node/bin/node" }
74 if ('env' in obj) {
75 // Currently there are no other types, uncomment when there are
76 // if ('includes' in obj) {
77 return env[obj.env] && env[obj.env].includes(obj.includes)
78 // }
79 }
80 if ('any' in obj) {
81 return obj.any.some(function (k) {
82 return !!env[k]
83 })
84 }
6985 return Object.keys(obj).every(function (k) {
7086 return env[k] === obj[k]
7187 })
00 {
11 "name": "ci-info",
2 "version": "3.5.0",
2 "version": "3.6.1",
33 "description": "Get details about the current Continuous Integration environment",
44 "main": "index.js",
55 "typings": "index.d.ts",
2828 "devDependencies": {
2929 "clear-module": "^4.1.2",
3030 "standard": "^17.0.0",
31 "tape": "^5.6.0"
31 "tape": "^5.6.1"
32 },
33 "engines": {
34 "node": ">=8"
3235 }
3336 }
5757
5858 test('Anonymous CI', function (t) {
5959 const ANONYMOUS_ENV_VARS = [
60 'CI', 'CONTINUOUS_INTEGRATION', 'BUILD_NUMBER',
61 'CI_APP_ID', 'CI_BUILD_ID', 'CI_BUILD_NUMBER',
62 'RUN_ID'
60 'CI', 'CONTINUOUS_INTEGRATION', 'BUILD_ID',
61 'BUILD_NUMBER', 'CI_APP_ID', 'CI_BUILD_ID',
62 'CI_BUILD_NUMBER', 'RUN_ID', 'CI_NAME'
6363 ]
6464
6565 for (const envVar in ANONYMOUS_ENV_VARS) {
605605 t.end()
606606 })
607607
608 test('Vercel', function (t) {
608 test('Vercel - NOW_BUILDER', function (t) {
609609 process.env.NOW_BUILDER = '1'
610610
611611 clearModule('./')
622622 t.end()
623623 })
624624
625 test('Vercel - VERCEL_URL', function (t) {
626 process.env.VERCEL_URL = '1'
627
628 clearModule('./')
629 const ci = require('./')
630
631 t.equal(ci.isCI, true)
632 t.equal(ci.isPR, null)
633 t.equal(ci.name, 'Vercel')
634 t.equal(ci.VERCEL, true)
635 assertVendorConstants('VERCEL', ci, t)
636
637 delete process.env.VERCEL_URL
638
639 t.end()
640 })
641
625642 test('Nevercode - PR', function (t) {
626643 process.env.NEVERCODE = 'true'
627644 process.env.NEVERCODE_PULL_REQUEST = 'true'
856873
857874 delete process.env.XCS
858875
876 t.end()
877 })
878
879 test('Heroku', function (t) {
880 const realNode = process.env.NODE
881 process.env.NODE = '/extra/content/app/.heroku/node/bin/node --extra --content'
882
883 clearModule('./')
884 const ci = require('./')
885
886 t.equal(ci.isCI, true)
887 t.equal(ci.name, 'Heroku')
888 t.equal(ci.HEROKU, true)
889 assertVendorConstants('HEROKU', ci, t)
890
891 process.env.NODE = realNode
859892 t.end()
860893 })
861894
00 [
1 {
2 "name": "Appcircle",
3 "constant": "APPCIRCLE",
4 "env": "AC_APPCIRCLE"
5 },
16 {
27 "name": "AppVeyor",
38 "constant": "APPVEYOR",
510 "pr": "APPVEYOR_PULL_REQUEST_NUMBER"
611 },
712 {
13 "name": "AWS CodeBuild",
14 "constant": "CODEBUILD",
15 "env": "CODEBUILD_BUILD_ARN"
16 },
17 {
818 "name": "Azure Pipelines",
919 "constant": "AZURE_PIPELINES",
1020 "env": "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",
1121 "pr": "SYSTEM_PULLREQUEST_PULLREQUESTID"
1222 },
1323 {
14 "name": "Appcircle",
15 "constant": "APPCIRCLE",
16 "env": "AC_APPCIRCLE"
17 },
18 {
1924 "name": "Bamboo",
2025 "constant": "BAMBOO",
2126 "env": "bamboo_planKey"
5762 "pr": "CIRRUS_PR"
5863 },
5964 {
65 "name": "Codefresh",
66 "constant": "CODEFRESH",
67 "env": "CF_BUILD_ID",
68 "pr": { "any": ["CF_PULL_REQUEST_NUMBER", "CF_PULL_REQUEST_ID"] }
69 },
70 {
6071 "name": "Codemagic",
6172 "constant": "CODEMAGIC",
6273 "env": "CM_BUILD_ID",
6374 "pr": "CM_PULL_REQUEST"
6475 },
6576 {
66 "name": "AWS CodeBuild",
67 "constant": "CODEBUILD",
68 "env": "CODEBUILD_BUILD_ARN"
69 },
70 {
71 "name": "Codefresh",
72 "constant": "CODEFRESH",
73 "env": "CF_BUILD_ID",
74 "pr": { "any": ["CF_PULL_REQUEST_NUMBER", "CF_PULL_REQUEST_ID"] }
75 },
76 {
7777 "name": "Codeship",
7878 "constant": "CODESHIP",
7979 "env": { "CI_NAME": "codeship" }
8585 "pr": { "DRONE_BUILD_EVENT": "pull_request" }
8686 },
8787 {
88 "name": "dsari",
89 "constant": "DSARI",
90 "env": "DSARI"
91 },
92 {
93 "name": "Expo Application Services",
94 "constant": "EAS",
95 "env": "EAS_BUILD"
96 },
97 {
98 "name": "GitHub Actions",
99 "constant": "GITHUB_ACTIONS",
100 "env": "GITHUB_ACTIONS",
101 "pr": { "GITHUB_EVENT_NAME": "pull_request" }
102 },
103 {
104 "name": "GitLab CI",
105 "constant": "GITLAB",
106 "env": "GITLAB_CI",
107 "pr": "CI_MERGE_REQUEST_ID"
108 },
109 {
110 "name": "GoCD",
111 "constant": "GOCD",
112 "env": "GO_PIPELINE_LABEL"
113 },
114 {
115 "name": "Google Cloud Build",
116 "constant": "GOOGLE_CLOUD_BUILD",
117 "env": "BUILDER_OUTPUT"
118 },
119 {
120 "name": "LayerCI",
121 "constant": "LAYERCI",
122 "env": "LAYERCI",
123 "pr": "LAYERCI_PULL_REQUEST"
124 },
125 {
126 "name": "Gerrit",
127 "constant": "GERRIT",
128 "env": "GERRIT_PROJECT"
129 },
130 {
131 "name": "Heroku",
132 "constant": "HEROKU",
133 "env": { "env": "NODE", "includes": "/app/.heroku/node/bin/node" }
134 },
135 {
136 "name": "Hudson",
137 "constant": "HUDSON",
138 "env": "HUDSON_URL"
139 },
140 {
141 "name": "Jenkins",
142 "constant": "JENKINS",
143 "env": ["JENKINS_URL", "BUILD_ID"],
144 "pr": { "any": ["ghprbPullId", "CHANGE_ID"] }
145 },
146 {
147 "name": "Magnum CI",
148 "constant": "MAGNUM",
149 "env": "MAGNUM"
150 },
151 {
152 "name": "Netlify CI",
153 "constant": "NETLIFY",
154 "env": "NETLIFY",
155 "pr": { "env": "PULL_REQUEST", "ne": "false" }
156 },
157 {
158 "name": "Nevercode",
159 "constant": "NEVERCODE",
160 "env": "NEVERCODE",
161 "pr": { "env": "NEVERCODE_PULL_REQUEST", "ne": "false" }
162 },
163 {
164 "name": "Render",
165 "constant": "RENDER",
166 "env": "RENDER",
167 "pr": { "IS_PULL_REQUEST": "true" }
168 },
169 {
170 "name": "Sail CI",
171 "constant": "SAIL",
172 "env": "SAILCI",
173 "pr": "SAIL_PULL_REQUEST_NUMBER"
174 },
175 {
176 "name": "Screwdriver",
177 "constant": "SCREWDRIVER",
178 "env": "SCREWDRIVER",
179 "pr": { "env": "SD_PULL_REQUEST", "ne": "false" }
180 },
181 {
182 "name": "Semaphore",
183 "constant": "SEMAPHORE",
184 "env": "SEMAPHORE",
185 "pr": "PULL_REQUEST_NUMBER"
186 },
187 {
188 "name": "Shippable",
189 "constant": "SHIPPABLE",
190 "env": "SHIPPABLE",
191 "pr": { "IS_PULL_REQUEST": "true" }
192 },
193 {
194 "name": "Solano CI",
195 "constant": "SOLANO",
196 "env": "TDDIUM",
197 "pr": "TDDIUM_PR_ID"
198 },
199 {
200 "name": "Strider CD",
201 "constant": "STRIDER",
202 "env": "STRIDER"
203 },
204 {
205 "name": "TaskCluster",
206 "constant": "TASKCLUSTER",
207 "env": ["TASK_ID", "RUN_ID"]
208 },
209 {
210 "name": "TeamCity",
211 "constant": "TEAMCITY",
212 "env": "TEAMCITY_VERSION"
213 },
214 {
215 "name": "Travis CI",
216 "constant": "TRAVIS",
217 "env": "TRAVIS",
218 "pr": { "env": "TRAVIS_PULL_REQUEST", "ne": "false" }
219 },
220 {
221 "name": "Vercel",
222 "constant": "VERCEL",
223 "env": { "any": ["NOW_BUILDER", "VERCEL_URL"] }
224 },
225 {
226 "name": "Visual Studio App Center",
227 "constant": "APPCENTER",
228 "env": "APPCENTER_BUILD_ID"
229 },
230 {
88231 "name": "Woodpecker",
89232 "constant": "WOODPECKER",
90233 "env": { "CI": "woodpecker" },
91234 "pr": { "CI_BUILD_EVENT": "pull_request" }
92 },
93 {
94 "name": "dsari",
95 "constant": "DSARI",
96 "env": "DSARI"
97 },
98 {
99 "name": "Expo Application Services",
100 "constant": "EAS",
101 "env": "EAS_BUILD"
102 },
103 {
104 "name": "GitHub Actions",
105 "constant": "GITHUB_ACTIONS",
106 "env": "GITHUB_ACTIONS",
107 "pr": { "GITHUB_EVENT_NAME": "pull_request" }
108 },
109 {
110 "name": "GitLab CI",
111 "constant": "GITLAB",
112 "env": "GITLAB_CI",
113 "pr": "CI_MERGE_REQUEST_ID"
114 },
115 {
116 "name": "GoCD",
117 "constant": "GOCD",
118 "env": "GO_PIPELINE_LABEL"
119 },
120 {
121 "name": "LayerCI",
122 "constant": "LAYERCI",
123 "env": "LAYERCI",
124 "pr": "LAYERCI_PULL_REQUEST"
125 },
126 {
127 "name": "Hudson",
128 "constant": "HUDSON",
129 "env": "HUDSON_URL"
130 },
131 {
132 "name": "Jenkins",
133 "constant": "JENKINS",
134 "env": ["JENKINS_URL", "BUILD_ID"],
135 "pr": { "any": ["ghprbPullId", "CHANGE_ID"] }
136 },
137 {
138 "name": "Magnum CI",
139 "constant": "MAGNUM",
140 "env": "MAGNUM"
141 },
142 {
143 "name": "Netlify CI",
144 "constant": "NETLIFY",
145 "env": "NETLIFY",
146 "pr": { "env": "PULL_REQUEST", "ne": "false" }
147 },
148 {
149 "name": "Nevercode",
150 "constant": "NEVERCODE",
151 "env": "NEVERCODE",
152 "pr": { "env": "NEVERCODE_PULL_REQUEST", "ne": "false" }
153 },
154 {
155 "name": "Render",
156 "constant": "RENDER",
157 "env": "RENDER",
158 "pr": { "IS_PULL_REQUEST": "true" }
159 },
160 {
161 "name": "Sail CI",
162 "constant": "SAIL",
163 "env": "SAILCI",
164 "pr": "SAIL_PULL_REQUEST_NUMBER"
165 },
166 {
167 "name": "Semaphore",
168 "constant": "SEMAPHORE",
169 "env": "SEMAPHORE",
170 "pr": "PULL_REQUEST_NUMBER"
171 },
172 {
173 "name": "Screwdriver",
174 "constant": "SCREWDRIVER",
175 "env": "SCREWDRIVER",
176 "pr": { "env": "SD_PULL_REQUEST", "ne": "false" }
177 },
178 {
179 "name": "Shippable",
180 "constant": "SHIPPABLE",
181 "env": "SHIPPABLE",
182 "pr": { "IS_PULL_REQUEST": "true" }
183 },
184 {
185 "name": "Solano CI",
186 "constant": "SOLANO",
187 "env": "TDDIUM",
188 "pr": "TDDIUM_PR_ID"
189 },
190 {
191 "name": "Strider CD",
192 "constant": "STRIDER",
193 "env": "STRIDER"
194 },
195 {
196 "name": "TaskCluster",
197 "constant": "TASKCLUSTER",
198 "env": ["TASK_ID", "RUN_ID"]
199 },
200 {
201 "name": "TeamCity",
202 "constant": "TEAMCITY",
203 "env": "TEAMCITY_VERSION"
204 },
205 {
206 "name": "Travis CI",
207 "constant": "TRAVIS",
208 "env": "TRAVIS",
209 "pr": { "env": "TRAVIS_PULL_REQUEST", "ne": "false" }
210 },
211 {
212 "name": "Vercel",
213 "constant": "VERCEL",
214 "env": "NOW_BUILDER"
215 },
216 {
217 "name": "Visual Studio App Center",
218 "constant": "APPCENTER",
219 "env": "APPCENTER_BUILD_ID"
220235 },
221236 {
222237 "name": "Xcode Cloud",