1'use strict' 2 3var vendors = require('./vendors.json') 4 5var env = process.env 6 7// Used for testing only 8Object.defineProperty(exports, '_vendors', { 9 value: vendors.map(function (v) { return v.constant }) 10}) 11 12exports.name = null 13exports.isPR = null 14 15vendors.forEach(function (vendor) { 16 var envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env] 17 var isCI = envs.every(function (obj) { 18 return checkEnv(obj) 19 }) 20 21 exports[vendor.constant] = isCI 22 23 if (isCI) { 24 exports.name = vendor.name 25 26 switch (typeof vendor.pr) { 27 case 'string': 28 // "pr": "CIRRUS_PR" 29 exports.isPR = !!env[vendor.pr] 30 break 31 case 'object': 32 if ('env' in vendor.pr) { 33 // "pr": { "env": "BUILDKITE_PULL_REQUEST", "ne": "false" } 34 exports.isPR = vendor.pr.env in env && env[vendor.pr.env] !== vendor.pr.ne 35 } else if ('any' in vendor.pr) { 36 // "pr": { "any": ["ghprbPullId", "CHANGE_ID"] } 37 exports.isPR = vendor.pr.any.some(function (key) { 38 return !!env[key] 39 }) 40 } else { 41 // "pr": { "DRONE_BUILD_EVENT": "pull_request" } 42 exports.isPR = checkEnv(vendor.pr) 43 } 44 break 45 default: 46 // PR detection not supported for this vendor 47 exports.isPR = null 48 } 49 } 50}) 51 52exports.isCI = !!( 53 env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari 54 env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI 55 env.BUILD_NUMBER || // Jenkins, TeamCity 56 env.RUN_ID || // TaskCluster, dsari 57 exports.name || 58 false 59) 60 61function checkEnv (obj) { 62 if (typeof obj === 'string') return !!env[obj] 63 return Object.keys(obj).every(function (k) { 64 return env[k] === obj[k] 65 }) 66} 67