UNPKG

cross-ci

Version:

`cross-ci` standardizes environment variables for CI. For example, your can simply use `BUILD_BRANCH` variable in all CI runners instead of `CIRCLE_BRANCH` in CircleCI or `TRAVIS_PULL_REQUEST_BRANCH` in Travis.

274 lines (217 loc) 8.84 kB
const {execSync} = require('child_process'); const evar = (name, prefix = '') => execSync(`${prefix ? prefix + ' ' : ''}node ./bin/cross-ci.js node lib/echo.js ${name}`).toString().trim(); describe('integration', () => { describe('YEAR', () => { test('equals to current year', () => { expect(evar('YEAR')).toBe((new Date()).toJSON().substr(0, 4)); }); }); describe('MONTH', () => { test('equals to current month', () => { expect(evar('MONTH')).toBe((new Date()).toJSON().substr(5, 2)); }); }); describe('BRANCH_PRODUCTION', () => { test('defaults to production', () => { expect(evar('BRANCH_PRODUCTION')).toBe('production'); }); test('can be overwritten', () => { expect(evar('BRANCH_PRODUCTION', 'BRANCH_PRODUCTION=foobar')).toBe('foobar'); }); }); describe('BRANCH_STAGING', () => { test('defaults to master', () => { expect(evar('BRANCH_STAGING')).toBe('master'); }); test('can be overwritten', () => { expect(evar('BRANCH_STAGING', 'BRANCH_STAGING=foobar')).toBe('foobar'); }); }); describe('BRANCH_URL', () => { test('returns URL', () => { expect(evar('BRANCH_URL').substr(0, 4)).toBe('http'); }); }); describe('BUILD_BRANCH', () => { test('uses CIRCLE_BRANCH', () => { expect(evar('BUILD_BRANCH', 'CIRCLE_BRANCH=foobar')).toBe('foobar'); }); test('uses TRAVIS_PULL_REQUEST_BRANCH', () => { expect(evar('BUILD_BRANCH', 'TRAVIS=yes TRAVIS_PULL_REQUEST_BRANCH=foobar')).toBe('foobar'); }); test('uses TRAVIS_BRANCH', () => { expect(evar('BUILD_BRANCH', 'TRAVIS=yes TRAVIS_BRANCH=foobar')).toBe('foobar'); }); test('uses BUILD_BRANCH', () => { expect(evar('BUILD_BRANCH', 'BUILD_BRANCH=foobar')).toBe('foobar'); }); }); describe('BUILD_COMMIT_PR_URL', () => { test('returns URL', () => { expect(evar('BUILD_COMMIT_PR_URL').substr(0, 4)).toBe('http'); }); }); describe('BUILD_COMMIT_URL', () => { test('returns URL', () => { expect(evar('BUILD_COMMIT_URL').substr(0, 4)).toBe('http'); }); }); describe('BUILD_COMMIT', () => { test('uses CIRCLE_SHA1', () => { expect(evar('BUILD_COMMIT', 'CIRCLE_SHA1=foobar')).toBe('foobar'); }); test('uses TRAVIS_PULL_REQUEST_SHA', () => { expect(evar('BUILD_COMMIT', 'TRAVIS=yes TRAVIS_PULL_REQUEST_SHA=foobar')).toBe('foobar'); }); test('uses TRAVIS_COMMIT', () => { expect(evar('BUILD_COMMIT', 'TRAVIS=yes TRAVIS_COMMIT=foobar')).toBe('foobar'); }); }); describe('BUILD_NUM', () => { test('uses BUILD_NUM', () => { expect(evar('BUILD_NUM', 'BUILD_NUM=123')).toBe('123'); }); test('uses CIRCLE_BUILD_NUM', () => { expect(evar('BUILD_NUM', 'CIRCLE_BUILD_NUM=123')).toBe('123'); }); test('uses TRAVIS_BUILD_NUMBER', () => { expect(evar('BUILD_NUM', 'TRAVIS=yes TRAVIS_BUILD_NUMBER=123')).toBe('123'); }); test('uses BUILD_NUMBER', () => { expect(evar('BUILD_NUM', 'TRAVIS=yes BUILD_NUMBER=123')).toBe('123'); }); }); describe('BUILD_PR_NUM', () => { test('uses CI_PULL_REQUEST', () => { expect(evar('BUILD_PR_NUM', 'CI_PULL_REQUEST="https://github.com/streamich/cross-ci/pull/3"')).toBe('3'); }); test('uses TRAVIS_PULL_REQUEST', () => { expect(evar('BUILD_PR_NUM', 'TRAVIS=yes TRAVIS_PULL_REQUEST=25')).toBe('25'); }); test('uses BUILD_PR_NUM', () => { expect(evar('BUILD_PR_NUM', 'BUILD_PR_NUM=25')).toBe('25'); }); }); describe('BUILD_PR_URL', () => { test('returns URL', () => { expect(evar('BUILD_PR_URL', 'BUILD_PR_NUM=123').substr(0, 4)).toBe('http'); }); }); describe('BUILD_URL', () => { test('defaults to empty string', () => { expect(evar('BUILD_URL')).toBe(''); }); test('uses CIRCLE_BUILD_URL', () => { expect(evar('BUILD_URL', 'CIRCLE_BUILD_URL=http://example.com')).toBe('http://example.com'); }); test('constructs URL for Travis', () => { expect(evar('BUILD_URL', 'CI_PLATFORM=YES TRAVIS=YES').substr(0, 4)).toBe('http'); }); }); describe('CI_PLATFORM', () => { test('defaults to ___UNKNOWN_CI_PLATFORM___', () => { expect(evar('CI_PLATFORM')).toBe('___UNKNOWN_CI_PLATFORM___'); }); test('uses CIRCLECI', () => { expect(evar('CI_PLATFORM', 'CIRCLECI=yes')).toBe('circle'); }); test('uses TRAVIS', () => { expect(evar('CI_PLATFORM', 'TRAVIS=yes')).toBe('travis'); }); test('uses TRATEAMCITY_VERSIONVIS', () => { expect(evar('CI_PLATFORM', 'TEAMCITY_VERSION=1.2.3')).toBe('teamcity'); }); }); describe('GIT_REMOTE', () => { test('defaults to origin', () => { expect(evar('GIT_REMOTE')).toBe('origin'); }); }); describe('GITHUB_TOKEN', () => { test('defaults to empty string', () => { expect(evar('GITHUB_TOKEN')).toBe(''); }); test('uses GITHUB_TOKEN', () => { expect(evar('GITHUB_TOKEN', 'GITHUB_TOKEN=foobar')).toBe('foobar'); }); test('uses GITHUB_ACCESS_TOKEN', () => { expect(evar('GITHUB_TOKEN', 'GITHUB_ACCESS_TOKEN=foobar')).toBe('foobar'); }); test('uses GH_TOKEN', () => { expect(evar('GITHUB_TOKEN', 'GH_TOKEN=foobar')).toBe('foobar'); }); test('uses GIT_CREDENTIALS', () => { expect(evar('GITHUB_TOKEN', 'GIT_CREDENTIALS=foobar')).toBe('foobar'); }); }); describe('PROJECT_NAME', () => { test('extracts from package.json', () => { expect(evar('PROJECT_NAME')).toBe('cross-ci'); }); test('uses CIRCLE_PROJECT_REPONAME', () => { expect(evar('PROJECT_NAME', 'CIRCLE_PROJECT_REPONAME=foobar')).toBe('foobar'); }); test('uses TRAVIS_REPO_SLUG', () => { expect(evar('PROJECT_NAME', 'TRAVIS_REPO_SLUG=owner/foobar')).toBe('foobar'); }); test('uses TEAMCITY_PROJECT_NAME', () => { expect(evar('PROJECT_NAME', 'TEAMCITY_PROJECT_NAME=foobar')).toBe('foobar'); }); }); describe('PROJECT_OWNER', () => { test('extracts from package.json', () => { expect(evar('PROJECT_OWNER')).toBe('streamich'); }); test('uses CIRCLE_PROJECT_USERNAME', () => { expect(evar('PROJECT_OWNER', 'CIRCLE_PROJECT_USERNAME=owner')).toBe('owner'); }); test('uses TRAVIS_REPO_SLUG', () => { expect(evar('PROJECT_OWNER', 'TRAVIS_REPO_SLUG=owner/foobar')).toBe('owner'); }); }); describe('PROJECT_URL', () => { test('returns URL', () => { expect(evar('PROJECT_URL').substr(0, 4)).toBe('http'); }); }); describe('BUILD_DIR', () => { test('defaults to current working directory', () => { expect(evar('BUILD_DIR')).toBe(process.cwd()); }); test('uses CIRCLE_WORKING_DIRECTORY', () => { expect(evar('BUILD_DIR', 'CIRCLE_WORKING_DIRECTORY=/foobar')).toBe('/foobar'); }); test('uses TRAVIS_BUILD_DIR', () => { expect(evar('BUILD_DIR', 'TRAVIS_BUILD_DIR=/foobar')).toBe('/foobar'); }); }); describe('IS_CI', () => { test('defaults false', () => { expect(evar('IS_CI')).toBe('false'); }); test('uses CI', () => { expect(evar('IS_CI', 'CI=yes')).toBe('true'); }); test('true on Travis', () => { expect(evar('IS_CI', 'TRAVIS=yes')).toBe('true'); }); }); describe('TIME', () => { test('returns a time string', () => { const time = evar('TIME'); const date = new Date(time); expect(typeof time).toBe('string'); expect(date.getTime()).toBeLessThanOrEqual(Date.now()); expect(date.getTime()).toBeGreaterThanOrEqual(Date.now() - 60 * 60); }); }); describe('TIMESTAMP', () => { test('returns a timestamp number', () => { const time = parseInt(evar('TIMESTAMP'), 10); expect(typeof time).toBe('number'); expect(time).toBeLessThanOrEqual(Date.now()); expect(time).toBeGreaterThanOrEqual(Date.now() - 60 * 60); }); }); });