pax_global_header 0000666 0000000 0000000 00000000064 14053456423 0014520 g ustar 00root root 0000000 0000000 52 comment=c4f1553f254c78babef5c200c48569ede313b718
ci-info-3.2.0/ 0000775 0000000 0000000 00000000000 14053456423 0013046 5 ustar 00root root 0000000 0000000 ci-info-3.2.0/.github/ 0000775 0000000 0000000 00000000000 14053456423 0014406 5 ustar 00root root 0000000 0000000 ci-info-3.2.0/.github/ISSUE_TEMPLATE/ 0000775 0000000 0000000 00000000000 14053456423 0016571 5 ustar 00root root 0000000 0000000 ci-info-3.2.0/.github/ISSUE_TEMPLATE/ci-server-not-detected.md 0000664 0000000 0000000 00000001622 14053456423 0023370 0 ustar 00root root 0000000 0000000 ---
name: CI server not detected
about: Report an issue with detecting a specific CI server
---
**Details:**
- Ci name: [e.g. Travis CI]
- Website: [e.g. https://travis-ci.com/]
- Default env variables: [e.g. https://docs.travis-ci.com/user/environment-variables/#default-environment-variables]
**Environment variables**
Environment variables example
```
// Add a list of actual environment variables available to the build here
// Please keep the blank line above and below the code block
// WARNING: Be careful not to include any private or otherwise sensitive information
```
**Additional context**
Add any other context about the problem here.
ci-info-3.2.0/.github/workflows/ 0000775 0000000 0000000 00000000000 14053456423 0016443 5 ustar 00root root 0000000 0000000 ci-info-3.2.0/.github/workflows/tests.yml 0000664 0000000 0000000 00000000622 14053456423 0020330 0 ustar 00root root 0000000 0000000 name: Tests
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [8.x, 10.x, 12.x, 14.x, 15.x, 16.x]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
- run: npm install
- run: npm test
ci-info-3.2.0/.gitignore 0000664 0000000 0000000 00000000051 14053456423 0015032 0 ustar 00root root 0000000 0000000 node_modules
package-lock.json
yarn.lock
ci-info-3.2.0/.npmignore 0000664 0000000 0000000 00000000051 14053456423 0015041 0 ustar 00root root 0000000 0000000 node_modules
.github
.travis.yml
test.js
ci-info-3.2.0/CHANGELOG.md 0000664 0000000 0000000 00000006061 14053456423 0014662 0 ustar 00root root 0000000 0000000 # Changelog
## v3.2.0
- support LayerCI ([#68](https://github.com/watson/ci-info/pull/68))
- support Appcircle ([#69](https://github.com/watson/ci-info/pull/69))
- support Codefresh CI ([#65](https://github.com/watson/ci-info/pull/65))
- Add support for nodejs v16
## v3.1.1
Bug Fixes:
- remove duplicate declaration in typings
## v3.1.0
Features:
- add typings
## v3.0.0
Features:
- Add support nodejs versions: 14, 15
- support Nevercode ([#30](https://github.com/watson/ci-info/pull/30))
- support Render CI ([#36](https://github.com/watson/ci-info/pull/36))
- support Now CI ([#37](https://github.com/watson/ci-info/pull/37))
- support GitLab PR ([#59](https://github.com/watson/ci-info/pull/59))
- support Screwdriver CD ([#60](https://github.com/watson/ci-info/pull/60))
- support Visual Studio App Center ([#61](https://github.com/watson/ci-info/pull/61))
Bug Fixes:
- update Netlify env constant ([#47](https://github.com/watson/ci-info/pull/47))
Breaking changes:
- Drop support for Node.js end-of-life versions: 6, 13
- replace `Zeit Now` with `Vercel` ([#55](https://github.com/watson/ci-info/pull/55))
## v2.0.0
Breaking changes:
- Drop support for Node.js end-of-life versions: 0.10, 0.12, 4, 5, 7,
and 9
- Team Foundation Server will now be detected as Azure Pipelines. The
constant `ci.TFS` no longer exists - use `ci.AZURE_PIPELINES` instead
- Remove deprecated `ci.TDDIUM` constant - use `ci.SOLANDO` instead
New features:
- feat: support Azure Pipelines ([#23](https://github.com/watson/ci-info/pull/23))
- feat: support Netlify CI ([#26](https://github.com/watson/ci-info/pull/26))
- feat: support Bitbucket pipelines PR detection ([#27](https://github.com/watson/ci-info/pull/27))
## v1.6.0
- feat: add Sail CI support
- feat: add Buddy support
- feat: add Bitrise support
- feat: detect Jenkins PRs
- feat: detect Drone PRs
## v1.5.1
- fix: use full path to vendors.json
## v1.5.0
- feat: add dsari detection ([#15](https://github.com/watson/ci-info/pull/15))
- feat: add ci.isPR ([#16](https://github.com/watson/ci-info/pull/16))
## v1.4.0
- feat: add Cirrus CI detection ([#13](https://github.com/watson/ci-info/pull/13))
- feat: add Shippable CI detection ([#14](https://github.com/watson/ci-info/pull/14))
## v1.3.1
- chore: reduce npm package size by not including `.github` folder content ([#11](https://github.com/watson/ci-info/pull/11))
## v1.3.0
- feat: add support for Strider CD
- chore: deprecate vendor constant `TDDIUM` in favor of `SOLANO`
- docs: add missing vendor constant to docs
## v1.2.0
- feat: detect solano-ci ([#9](https://github.com/watson/ci-info/pull/9))
## v1.1.3
- fix: fix spelling of Hunson in `ci.name`
## v1.1.2
- fix: no more false positive matches for Jenkins
## v1.1.1
- docs: sort lists of CI servers in README.md
- docs: add missing AWS CodeBuild to the docs
## v1.1.0
- feat: add AWS CodeBuild to CI detection ([#2](https://github.com/watson/ci-info/pull/2))
## v1.0.1
- chore: reduce npm package size by using an `.npmignore` file ([#3](https://github.com/watson/ci-info/pull/3))
## v1.0.0
- Initial release
ci-info-3.2.0/LICENSE 0000664 0000000 0000000 00000002103 14053456423 0014047 0 ustar 00root root 0000000 0000000 The MIT License (MIT)
Copyright (c) 2016-2021 Thomas Watson Steen
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
ci-info-3.2.0/README.md 0000664 0000000 0000000 00000015013 14053456423 0014325 0 ustar 00root root 0000000 0000000 # ci-info
Get details about the current Continuous Integration environment.
Please [open an
issue](https://github.com/watson/ci-info/issues/new?template=ci-server-not-detected.md)
if your CI server isn't properly detected :)
[](https://www.npmjs.com/package/ci-info)
[](https://github.com/watson/ci-info/actions)
[](https://github.com/feross/standard)
## Installation
```bash
npm install ci-info --save
```
## Usage
```js
var ci = require('ci-info')
if (ci.isCI) {
console.log('The name of the CI server is:', ci.name)
} else {
console.log('This program is not running on a CI server')
}
```
## Supported CI tools
Officially supported CI servers:
| Name | Constant | isPR |
| ------------------------------------------------------------------------------- | -------------------- | ---- |
| [AWS CodeBuild](https://aws.amazon.com/codebuild/) | `ci.CODEBUILD` | 🚫 |
| [AppVeyor](http://www.appveyor.com) | `ci.APPVEYOR` | ✅ |
| [Azure Pipelines](https://azure.microsoft.com/en-us/services/devops/pipelines/) | `ci.AZURE_PIPELINES` | ✅ |
| [Appcircle](https://appcircle.io/) | `ci.APPCIRCLE` | 🚫 |
| [Bamboo](https://www.atlassian.com/software/bamboo) by Atlassian | `ci.BAMBOO` | 🚫 |
| [Bitbucket Pipelines](https://bitbucket.org/product/features/pipelines) | `ci.BITBUCKET` | ✅ |
| [Bitrise](https://www.bitrise.io/) | `ci.BITRISE` | ✅ |
| [Buddy](https://buddy.works/) | `ci.BUDDY` | ✅ |
| [Buildkite](https://buildkite.com) | `ci.BUILDKITE` | ✅ |
| [CircleCI](http://circleci.com) | `ci.CIRCLE` | ✅ |
| [Cirrus CI](https://cirrus-ci.org) | `ci.CIRRUS` | ✅ |
| [Codefresh](https://codefresh.io/) | `ci.CODEFRESH` | ✅ |
| [Codeship](https://codeship.com) | `ci.CODESHIP` | 🚫 |
| [Drone](https://drone.io) | `ci.DRONE` | ✅ |
| [dsari](https://github.com/rfinnie/dsari) | `ci.DSARI` | 🚫 |
| [GitHub Actions](https://github.com/features/actions/) | `ci.GITHUB_ACTIONS` | ✅ |
| [GitLab CI](https://about.gitlab.com/gitlab-ci/) | `ci.GITLAB` | ✅ |
| [GoCD](https://www.go.cd/) | `ci.GOCD` | 🚫 |
| [Hudson](http://hudson-ci.org) | `ci.HUDSON` | 🚫 |
| [Jenkins CI](https://jenkins-ci.org) | `ci.JENKINS` | ✅ |
| [LayerCI](https://layerci.com/) | `ci.LAYERCI` | ✅ |
| [Magnum CI](https://magnum-ci.com) | `ci.MAGNUM` | 🚫 |
| [Netlify CI](https://www.netlify.com/) | `ci.NETLIFY` | ✅ |
| [Nevercode](http://nevercode.io/) | `ci.NEVERCODE` | ✅ |
| [Render](https://render.com/) | `ci.RENDER` | ✅ |
| [Sail CI](https://sail.ci/) | `ci.SAIL` | ✅ |
| [Screwdriver](https://screwdriver.cd/) | `ci.SCREWDRIVER` | ✅ |
| [Semaphore](https://semaphoreci.com) | `ci.SEMAPHORE` | ✅ |
| [Shippable](https://www.shippable.com/) | `ci.SHIPPABLE` | ✅ |
| [Solano CI](https://www.solanolabs.com/) | `ci.SOLANO` | ✅ |
| [Strider CD](https://strider-cd.github.io/) | `ci.STRIDER` | 🚫 |
| [TaskCluster](http://docs.taskcluster.net) | `ci.TASKCLUSTER` | 🚫 |
| [TeamCity](https://www.jetbrains.com/teamcity/) by JetBrains | `ci.TEAMCITY` | 🚫 |
| [Travis CI](http://travis-ci.org) | `ci.TRAVIS` | ✅ |
| [Vercel](https://vercel.com/) | `ci.VERCEL` | 🚫 |
| [Visual Studio App Center](https://appcenter.ms/) | `ci.APPCENTER` | 🚫 |
## API
### `ci.name`
Returns a string containing name of the CI server the code is running on.
If CI server is not detected, it returns `null`.
Don't depend on the value of this string not to change for a specific
vendor. If you find your self writing `ci.name === 'Travis CI'`, you
most likely want to use `ci.TRAVIS` instead.
### `ci.isCI`
Returns a boolean. Will be `true` if the code is running on a CI server,
otherwise `false`.
Some CI servers not listed here might still trigger the `ci.isCI`
boolean to be set to `true` if they use certain vendor neutral
environment variables. In those cases `ci.name` will be `null` and no
vendor specific boolean will be set to `true`.
### `ci.isPR`
Returns a boolean if PR detection is supported for the current CI server. Will
be `true` if a PR is being tested, otherwise `false`. If PR detection is
not supported for the current CI server, the value will be `null`.
### `ci.`
A vendor specific boolean constant is exposed for each support CI
vendor. A constant will be `true` if the code is determined to run on
the given CI server, otherwise `false`.
Examples of vendor constants are `ci.TRAVIS` or `ci.APPVEYOR`. For a
complete list, see the support table above.
Deprecated vendor constants that will be removed in the next major
release:
- `ci.TDDIUM` (Solano CI) This have been renamed `ci.SOLANO`
## License
[MIT](LICENSE)
ci-info-3.2.0/index.d.ts 0000664 0000000 0000000 00000004174 14053456423 0014755 0 ustar 00root root 0000000 0000000 /**
* Returns a boolean. Will be `true` if the code is running on a CI server,
* otherwise `false`.
*
* Some CI servers not listed here might still trigger the `ci.isCI`
* boolean to be set to `true` if they use certain vendor neutral environment
* variables. In those cases `ci.name` will be `null` and no vendor specific
* boolean will be set to `true`.
*/
export const isCI: boolean;
/**
* Returns a boolean if PR detection is supported for the current CI server.
* Will be `true` if a PR is being tested, otherwise `false`. If PR detection is
* not supported for the current CI server, the value will be `null`.
*/
export const isPR: boolean | null;
/**
* Returns a string containing name of the CI server the code is running on. If
* CI server is not detected, it returns `null`.
*
* Don't depend on the value of this string not to change for a specific vendor.
* If you find your self writing `ci.name === 'Travis CI'`, you most likely want
* to use `ci.TRAVIS` instead.
*/
export const name: string | null;
export const APPVEYOR: boolean;
export const AZURE_PIPELINES: boolean;
export const APPCIRCLE: boolean;
export const BAMBOO: boolean;
export const BITBUCKET: boolean;
export const BITRISE: boolean;
export const BUDDY: boolean;
export const BUILDKITE: boolean;
export const CIRCLE: boolean;
export const CIRRUS: boolean;
export const CODEBUILD: boolean;
export const CODEFRESH: boolean;
export const CODESHIP: boolean;
export const DRONE: boolean;
export const DSARI: boolean;
export const GITHUB_ACTIONS: boolean;
export const GITLAB: boolean;
export const GOCD: boolean;
export const HUDSON: boolean;
export const JENKINS: boolean;
export const LAYERCI: boolean;
export const MAGNUM: boolean;
export const NETLIFY: boolean;
export const NEVERCODE: boolean;
export const RENDER: boolean;
export const SAIL: boolean;
export const SEMAPHORE: boolean;
export const SCREWDRIVER: boolean;
export const SHIPPABLE: boolean;
export const SOLANO: boolean;
export const STRIDER: boolean;
export const TASKCLUSTER: boolean;
export const TEAMCITY: boolean;
export const TRAVIS: boolean;
export const VERCEL: boolean;
export const APPCENTER: boolean;
ci-info-3.2.0/index.js 0000664 0000000 0000000 00000003323 14053456423 0014514 0 ustar 00root root 0000000 0000000 'use strict'
const vendors = require('./vendors.json')
const env = process.env
// Used for testing only
Object.defineProperty(exports, '_vendors', {
value: vendors.map(function (v) { return v.constant })
})
exports.name = null
exports.isPR = null
vendors.forEach(function (vendor) {
const envs = Array.isArray(vendor.env) ? vendor.env : [vendor.env]
const isCI = envs.every(function (obj) {
return checkEnv(obj)
})
exports[vendor.constant] = isCI
if (isCI) {
exports.name = vendor.name
switch (typeof vendor.pr) {
case 'string':
// "pr": "CIRRUS_PR"
exports.isPR = !!env[vendor.pr]
break
case 'object':
if ('env' in vendor.pr) {
// "pr": { "env": "BUILDKITE_PULL_REQUEST", "ne": "false" }
exports.isPR = vendor.pr.env in env && env[vendor.pr.env] !== vendor.pr.ne
} else if ('any' in vendor.pr) {
// "pr": { "any": ["ghprbPullId", "CHANGE_ID"] }
exports.isPR = vendor.pr.any.some(function (key) {
return !!env[key]
})
} else {
// "pr": { "DRONE_BUILD_EVENT": "pull_request" }
exports.isPR = checkEnv(vendor.pr)
}
break
default:
// PR detection not supported for this vendor
exports.isPR = null
}
}
})
exports.isCI = !!(
env.CI || // Travis CI, CircleCI, Cirrus CI, Gitlab CI, Appveyor, CodeShip, dsari
env.CONTINUOUS_INTEGRATION || // Travis CI, Cirrus CI
env.BUILD_NUMBER || // Jenkins, TeamCity
env.RUN_ID || // TaskCluster, dsari
exports.name ||
false
)
function checkEnv (obj) {
if (typeof obj === 'string') return !!env[obj]
return Object.keys(obj).every(function (k) {
return env[k] === obj[k]
})
}
ci-info-3.2.0/package.json 0000664 0000000 0000000 00000001442 14053456423 0015335 0 ustar 00root root 0000000 0000000 {
"name": "ci-info",
"version": "3.2.0",
"description": "Get details about the current Continuous Integration environment",
"main": "index.js",
"typings": "index.d.ts",
"author": "Thomas Watson Steen (https://twitter.com/wa7son)",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/watson/ci-info.git"
},
"bugs": {
"url": "https://github.com/watson/ci-info/issues"
},
"homepage": "https://github.com/watson/ci-info",
"keywords": [
"ci",
"continuous",
"integration",
"test",
"detect"
],
"coordinates": [
55.778231,
12.593179
],
"scripts": {
"test": "standard && node test.js"
},
"devDependencies": {
"clear-module": "^4.1.1",
"standard": "^16.0.3",
"tape": "^5.2.2"
}
}
ci-info-3.2.0/test.js 0000664 0000000 0000000 00000036634 14053456423 0014377 0 ustar 00root root 0000000 0000000 'use strict'
const test = require('tape')
const clearModule = require('clear-module')
const isActualPR = !!(process.env.GITHUB_EVENT_NAME && process.env.GITHUB_EVENT_NAME === 'pull_request')
test('Known CI', function (t) {
process.env.GITHUB_ACTIONS = 'true'
const ci = require('./')
t.ok(Array.isArray(ci._vendors))
t.ok(ci._vendors.length > 0)
t.equal(ci.isCI, true)
t.equal(ci.isPR, isActualPR)
t.equal(ci.name, 'GitHub Actions')
t.equal(ci.GITHUB_ACTIONS, true)
assertVendorConstants('GITHUB_ACTIONS', ci, t)
t.end()
})
test('Not CI', function (t) {
delete process.env.CI
delete process.env.CONTINUOUS_INTEGRATION
delete process.env.BUILD_NUMBER
delete process.env.TRAVIS
delete process.env.GITHUB_ACTIONS
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, false)
t.equal(ci.isPR, null)
t.equal(ci.name, null)
t.equal(ci.TRAVIS, false)
assertVendorConstants(null, ci, t)
t.end()
})
test('Unknown CI', function (t) {
process.env.CI = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, null)
t.equal(ci.name, null)
t.equal(ci.TRAVIS, false)
assertVendorConstants(null, ci, t)
t.end()
})
test('AppVeyor - PR', function (t) {
process.env.APPVEYOR = 'true'
process.env.APPVEYOR_PULL_REQUEST_NUMBER = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'AppVeyor')
t.equal(ci.APPVEYOR, true)
assertVendorConstants('APPVEYOR', ci, t)
delete process.env.APPVEYOR
delete process.env.APPVEYOR_PULL_REQUEST_NUMBER
t.end()
})
test('AppVeyor - Not PR', function (t) {
process.env.APPVEYOR = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'AppVeyor')
t.equal(ci.APPVEYOR, true)
assertVendorConstants('APPVEYOR', ci, t)
delete process.env.APPVEYOR
t.end()
})
test('Azure Pipelines - PR', function (t) {
process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = 'https://dev.azure.com/Contoso'
process.env.SYSTEM_PULLREQUEST_PULLREQUESTID = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Azure Pipelines')
t.equal(ci.AZURE_PIPELINES, true)
assertVendorConstants('AZURE_PIPELINES', ci, t)
delete process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
delete process.env.SYSTEM_PULLREQUEST_PULLREQUESTID
t.end()
})
test('Azure Pipelines - Not PR', function (t) {
process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = 'https://dev.azure.com/Contoso'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Azure Pipelines')
t.equal(ci.AZURE_PIPELINES, true)
assertVendorConstants('AZURE_PIPELINES', ci, t)
delete process.env.SYSTEM_TEAMFOUNDATIONCOLLECTIONURI
t.end()
})
test('Bitbucket Pipelines - PR', function (t) {
process.env.BITBUCKET_COMMIT = 'true'
process.env.BITBUCKET_PR_ID = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Bitbucket Pipelines')
t.equal(ci.BITBUCKET, true)
assertVendorConstants('BITBUCKET', ci, t)
delete process.env.BITBUCKET_COMMIT
delete process.env.BITBUCKET_PR_ID
t.end()
})
test('Bitbucket Pipelines - Not PR', function (t) {
process.env.BITBUCKET_COMMIT = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Bitbucket Pipelines')
t.equal(ci.BITBUCKET, true)
assertVendorConstants('BITBUCKET', ci, t)
delete process.env.BITBUCKET_COMMIT
t.end()
})
test('Buildkite - PR', function (t) {
process.env.BUILDKITE = 'true'
process.env.BUILDKITE_PULL_REQUEST = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Buildkite')
t.equal(ci.BUILDKITE, true)
assertVendorConstants('BUILDKITE', ci, t)
delete process.env.BUILDKITE
delete process.env.BUILDKITE_PULL_REQUEST
t.end()
})
test('Buildkite - Not PR', function (t) {
process.env.BUILDKITE = 'true'
process.env.BUILDKITE_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Buildkite')
t.equal(ci.BUILDKITE, true)
assertVendorConstants('BUILDKITE', ci, t)
delete process.env.BUILDKITE
delete process.env.BUILDKITE_PULL_REQUEST
t.end()
})
test('CircleCI - PR', function (t) {
process.env.CIRCLECI = 'true'
process.env.CIRCLE_PULL_REQUEST = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'CircleCI')
t.equal(ci.CIRCLE, true)
assertVendorConstants('CIRCLE', ci, t)
delete process.env.CIRCLECI
delete process.env.CIRCLE_PULL_REQUEST
t.end()
})
test('CircleCI - Not PR', function (t) {
process.env.CIRCLECI = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'CircleCI')
t.equal(ci.CIRCLE, true)
assertVendorConstants('CIRCLE', ci, t)
delete process.env.CIRCLECI
t.end()
})
test('Cirrus CI - PR', function (t) {
process.env.CIRRUS_CI = 'true'
process.env.CIRRUS_PR = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Cirrus CI')
t.equal(ci.CIRRUS, true)
assertVendorConstants('CIRRUS', ci, t)
delete process.env.CIRRUS_CI
delete process.env.CIRRUS_PR
t.end()
})
test('Cirrus CI - Not PR', function (t) {
process.env.CIRRUS_CI = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Cirrus CI')
t.equal(ci.CIRRUS, true)
assertVendorConstants('CIRRUS', ci, t)
delete process.env.CIRRUS_CI
t.end()
})
test('Codefresh - PR', function (t) {
process.env.CF_BUILD_ID = 'true'
process.env.CF_PULL_REQUEST_ID = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Codefresh')
t.equal(ci.CODEFRESH, true)
assertVendorConstants('CODEFRESH', ci, t)
delete process.env.CF_BUILD_ID
delete process.env.CF_PULL_REQUEST_ID
t.end()
})
test('Codefresh - Not PR', function (t) {
process.env.CF_BUILD_ID = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Codefresh')
t.equal(ci.CODEFRESH, true)
assertVendorConstants('CODEFRESH', ci, t)
delete process.env.CF_BUILD_ID
t.end()
})
test('LayerCI - PR', function (t) {
process.env.LAYERCI = 'true'
process.env.LAYERCI_PULL_REQUEST = 'https://link-to-pr/5'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'LayerCI')
t.equal(ci.LAYERCI, true)
assertVendorConstants('LAYERCI', ci, t)
delete process.env.LAYERCI
delete process.env.LAYERCI_PULL_REQUEST
t.end()
})
test('LayerCI - Not PR', function (t) {
process.env.LAYERCI = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'LayerCI')
t.equal(ci.LAYERCI, true)
assertVendorConstants('LAYERCI', ci, t)
delete process.env.LAYERCI
t.end()
})
test('Appcircle', function (t) {
process.env.AC_APPCIRCLE = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.name, 'Appcircle')
t.equal(ci.APPCIRCLE, true)
assertVendorConstants('APPCIRCLE', ci, t)
delete process.env.AC_APPCIRCLE
t.end()
})
test('Render - PR', function (t) {
process.env.RENDER = 'true'
process.env.IS_PULL_REQUEST = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Render')
t.equal(ci.RENDER, true)
assertVendorConstants('RENDER', ci, t)
delete process.env.RENDER
delete process.env.IS_PULL_REQUEST
t.end()
})
test('Render - Not PR', function (t) {
process.env.RENDER = 'true'
process.env.IS_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Render')
t.equal(ci.RENDER, true)
assertVendorConstants('RENDER', ci, t)
delete process.env.RENDER
delete process.env.IS_PULL_REQUEST
t.end()
})
test('Semaphore - PR', function (t) {
process.env.SEMAPHORE = 'true'
process.env.PULL_REQUEST_NUMBER = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Semaphore')
t.equal(ci.SEMAPHORE, true)
assertVendorConstants('SEMAPHORE', ci, t)
delete process.env.SEMAPHORE
delete process.env.PULL_REQUEST_NUMBER
t.end()
})
test('Semaphore - Not PR', function (t) {
process.env.SEMAPHORE = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Semaphore')
t.equal(ci.SEMAPHORE, true)
assertVendorConstants('SEMAPHORE', ci, t)
delete process.env.SEMAPHORE
t.end()
})
test('Shippable - PR', function (t) {
process.env.SHIPPABLE = 'true'
process.env.IS_PULL_REQUEST = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Shippable')
t.equal(ci.SHIPPABLE, true)
assertVendorConstants('SHIPPABLE', ci, t)
delete process.env.SHIPPABLE
delete process.env.IS_PULL_REQUEST
t.end()
})
test('Semaphore - Not PR', function (t) {
process.env.SHIPPABLE = 'true'
process.env.IS_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Shippable')
t.equal(ci.SHIPPABLE, true)
assertVendorConstants('SHIPPABLE', ci, t)
delete process.env.SHIPPABLE
delete process.env.IS_PULL_REQUEST
t.end()
})
test('Solano CI - PR', function (t) {
process.env.TDDIUM = 'true'
process.env.TDDIUM_PR_ID = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Solano CI')
t.equal(ci.SOLANO, true)
assertVendorConstants('SOLANO', ci, t)
delete process.env.TDDIUM
delete process.env.TDDIUM_PR_ID
t.end()
})
test('Solano CI - Not PR', function (t) {
process.env.TDDIUM = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Solano CI')
t.equal(ci.SOLANO, true)
assertVendorConstants('SOLANO', ci, t)
delete process.env.TDDIUM
t.end()
})
test('Travis CI - PR', function (t) {
process.env.TRAVIS = 'true'
process.env.TRAVIS_PULL_REQUEST = '42'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Travis CI')
t.equal(ci.TRAVIS, true)
assertVendorConstants('TRAVIS', ci, t)
delete process.env.TRAVIS
delete process.env.TRAVIS_PULL_REQUEST
t.end()
})
test('Travis CI - Not PR', function (t) {
process.env.TRAVIS = 'true'
process.env.TRAVIS_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Travis CI')
t.equal(ci.TRAVIS, true)
assertVendorConstants('TRAVIS', ci, t)
delete process.env.TRAVIS
delete process.env.TRAVIS_PULL_REQUEST
t.end()
})
test('Netlify CI - PR', function (t) {
process.env.NETLIFY = 'true'
process.env.PULL_REQUEST = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Netlify CI')
t.equal(ci.NETLIFY, true)
assertVendorConstants('NETLIFY', ci, t)
delete process.env.NETLIFY
delete process.env.PULL_REQUEST
t.end()
})
test('Netlify CI - Not PR', function (t) {
process.env.NETLIFY = 'true'
process.env.PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Netlify CI')
t.equal(ci.NETLIFY, true)
assertVendorConstants('NETLIFY', ci, t)
delete process.env.NETLIFY
delete process.env.PULL_REQUEST
t.end()
})
test('Vercel', function (t) {
process.env.NOW_BUILDER = '1'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, null)
t.equal(ci.name, 'Vercel')
t.equal(ci.VERCEL, true)
assertVendorConstants('VERCEL', ci, t)
delete process.env.NOW_BUILDER
t.end()
})
test('Nevercode - PR', function (t) {
process.env.NEVERCODE = 'true'
process.env.NEVERCODE_PULL_REQUEST = 'true'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Nevercode')
t.equal(ci.NEVERCODE, true)
assertVendorConstants('NEVERCODE', ci, t)
delete process.env.NEVERCODE
delete process.env.NEVERCODE_PULL_REQUEST
t.end()
})
test('Nevercode - Not PR', function (t) {
process.env.NEVERCODE = 'true'
process.env.NEVERCODE_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Nevercode')
t.equal(ci.NEVERCODE, true)
assertVendorConstants('NEVERCODE', ci, t)
delete process.env.NEVERCODE
delete process.env.NEVERCODE_PULL_REQUEST
t.end()
})
test('GitHub Actions - PR', function (t) {
process.env.GITHUB_ACTIONS = 'true'
process.env.GITHUB_EVENT_NAME = 'pull_request'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'GitHub Actions')
t.equal(ci.GITHUB_ACTIONS, true)
assertVendorConstants('GITHUB_ACTIONS', ci, t)
delete process.env.GITHUB_ACTIONS
delete process.env.GITHUB_EVENT_NAME
t.end()
})
test('GitHub Actions - Not PR', function (t) {
process.env.GITHUB_ACTIONS = 'true'
process.env.GITHUB_EVENT_NAME = 'push'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'GitHub Actions')
t.equal(ci.GITHUB_ACTIONS, true)
assertVendorConstants('GITHUB_ACTIONS', ci, t)
delete process.env.GITHUB_ACTIONS
delete process.env.GITHUB_EVENT_NAME
t.end()
})
test('Screwdriver - PR', function (t) {
process.env.SCREWDRIVER = 'true'
process.env.SD_PULL_REQUEST = '1'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, true)
t.equal(ci.name, 'Screwdriver')
t.equal(ci.SCREWDRIVER, true)
assertVendorConstants('SCREWDRIVER', ci, t)
delete process.env.SCREWDRIVER
delete process.env.SD_PULL_REQUEST
t.end()
})
test('Screwdriver - Not PR', function (t) {
process.env.SCREWDRIVER = 'true'
process.env.SD_PULL_REQUEST = 'false'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
t.equal(ci.isPR, false)
t.equal(ci.name, 'Screwdriver')
t.equal(ci.SCREWDRIVER, true)
assertVendorConstants('SCREWDRIVER', ci, t)
delete process.env.SCREWDRIVER
delete process.env.SD_PULL_REQUEST
t.end()
})
test('Visual Studio App Center', function (t) {
process.env.APPCENTER_BUILD_ID = '1'
clearModule('./')
const ci = require('./')
t.equal(ci.isCI, true)
// t.equal(ci.isPR, false)
t.equal(ci.name, 'Visual Studio App Center')
t.equal(ci.APPCENTER, true)
assertVendorConstants('APPCENTER', ci, t)
delete process.env.APPCENTER
t.end()
})
function assertVendorConstants (expect, ci, t) {
ci._vendors.forEach(function (constant) {
let bool = constant === expect
bool = (expect === 'SOLANO' && constant === 'TDDIUM') || bool // support deprecated option
t.equal(ci[constant], bool, 'ci.' + constant)
})
}
ci-info-3.2.0/vendors.json 0000664 0000000 0000000 00000010113 14053456423 0015415 0 ustar 00root root 0000000 0000000 [
{
"name": "AppVeyor",
"constant": "APPVEYOR",
"env": "APPVEYOR",
"pr": "APPVEYOR_PULL_REQUEST_NUMBER"
},
{
"name": "Azure Pipelines",
"constant": "AZURE_PIPELINES",
"env": "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",
"pr": "SYSTEM_PULLREQUEST_PULLREQUESTID"
},
{
"name": "Appcircle",
"constant": "APPCIRCLE",
"env": "AC_APPCIRCLE"
},
{
"name": "Bamboo",
"constant": "BAMBOO",
"env": "bamboo_planKey"
},
{
"name": "Bitbucket Pipelines",
"constant": "BITBUCKET",
"env": "BITBUCKET_COMMIT",
"pr": "BITBUCKET_PR_ID"
},
{
"name": "Bitrise",
"constant": "BITRISE",
"env": "BITRISE_IO",
"pr": "BITRISE_PULL_REQUEST"
},
{
"name": "Buddy",
"constant": "BUDDY",
"env": "BUDDY_WORKSPACE_ID",
"pr": "BUDDY_EXECUTION_PULL_REQUEST_ID"
},
{
"name": "Buildkite",
"constant": "BUILDKITE",
"env": "BUILDKITE",
"pr": { "env": "BUILDKITE_PULL_REQUEST", "ne": "false" }
},
{
"name": "CircleCI",
"constant": "CIRCLE",
"env": "CIRCLECI",
"pr": "CIRCLE_PULL_REQUEST"
},
{
"name": "Cirrus CI",
"constant": "CIRRUS",
"env": "CIRRUS_CI",
"pr": "CIRRUS_PR"
},
{
"name": "AWS CodeBuild",
"constant": "CODEBUILD",
"env": "CODEBUILD_BUILD_ARN"
},
{
"name": "Codefresh",
"constant": "CODEFRESH",
"env": "CF_BUILD_ID",
"pr": { "any": ["CF_PULL_REQUEST_NUMBER", "CF_PULL_REQUEST_ID"] }
},
{
"name": "Codeship",
"constant": "CODESHIP",
"env": { "CI_NAME": "codeship" }
},
{
"name": "Drone",
"constant": "DRONE",
"env": "DRONE",
"pr": { "DRONE_BUILD_EVENT": "pull_request" }
},
{
"name": "dsari",
"constant": "DSARI",
"env": "DSARI"
},
{
"name": "GitHub Actions",
"constant": "GITHUB_ACTIONS",
"env": "GITHUB_ACTIONS",
"pr": { "GITHUB_EVENT_NAME": "pull_request" }
},
{
"name": "GitLab CI",
"constant": "GITLAB",
"env": "GITLAB_CI",
"pr": "CI_MERGE_REQUEST_ID"
},
{
"name": "GoCD",
"constant": "GOCD",
"env": "GO_PIPELINE_LABEL"
},
{
"name": "LayerCI",
"constant": "LAYERCI",
"env": "LAYERCI",
"pr": "LAYERCI_PULL_REQUEST"
},
{
"name": "Hudson",
"constant": "HUDSON",
"env": "HUDSON_URL"
},
{
"name": "Jenkins",
"constant": "JENKINS",
"env": ["JENKINS_URL", "BUILD_ID"],
"pr": { "any": ["ghprbPullId", "CHANGE_ID"] }
},
{
"name": "Magnum CI",
"constant": "MAGNUM",
"env": "MAGNUM"
},
{
"name": "Netlify CI",
"constant": "NETLIFY",
"env": "NETLIFY",
"pr": { "env": "PULL_REQUEST", "ne": "false" }
},
{
"name": "Nevercode",
"constant": "NEVERCODE",
"env": "NEVERCODE",
"pr": { "env": "NEVERCODE_PULL_REQUEST", "ne": "false" }
},
{
"name": "Render",
"constant": "RENDER",
"env": "RENDER",
"pr": { "IS_PULL_REQUEST": "true" }
},
{
"name": "Sail CI",
"constant": "SAIL",
"env": "SAILCI",
"pr": "SAIL_PULL_REQUEST_NUMBER"
},
{
"name": "Semaphore",
"constant": "SEMAPHORE",
"env": "SEMAPHORE",
"pr": "PULL_REQUEST_NUMBER"
},
{
"name": "Screwdriver",
"constant": "SCREWDRIVER",
"env": "SCREWDRIVER",
"pr": { "env": "SD_PULL_REQUEST", "ne": "false" }
},
{
"name": "Shippable",
"constant": "SHIPPABLE",
"env": "SHIPPABLE",
"pr": { "IS_PULL_REQUEST": "true" }
},
{
"name": "Solano CI",
"constant": "SOLANO",
"env": "TDDIUM",
"pr": "TDDIUM_PR_ID"
},
{
"name": "Strider CD",
"constant": "STRIDER",
"env": "STRIDER"
},
{
"name": "TaskCluster",
"constant": "TASKCLUSTER",
"env": ["TASK_ID", "RUN_ID"]
},
{
"name": "TeamCity",
"constant": "TEAMCITY",
"env": "TEAMCITY_VERSION"
},
{
"name": "Travis CI",
"constant": "TRAVIS",
"env": "TRAVIS",
"pr": { "env": "TRAVIS_PULL_REQUEST", "ne": "false" }
},
{
"name": "Vercel",
"constant": "VERCEL",
"env": "NOW_BUILDER"
},
{
"name": "Visual Studio App Center",
"constant": "APPCENTER",
"env": "APPCENTER_BUILD_ID"
}
]