diff --git a/lib/circleci.js b/lib/circleci.js index 81a225a..e4ad432 100644 --- a/lib/circleci.js +++ b/lib/circleci.js @@ -1,10 +1,14 @@ -// https://circleci.com/docs/1.0/environment-variables +// Circle 1.0 docs: https://circleci.com/docs/1.0/environment-variables +// Circle 2.0 docs: https://circleci.com/docs/2.0/env-vars/ module.exports = { detect() { return Boolean(process.env.CIRCLECI); }, configuration() { + // Support both 1.0 and 2.0 + const pullRequestUrl = process.env.CIRCLE_PULL_REQUEST || process.env.CI_PULL_REQUEST; + const pullRequest = pullRequestUrl ? pullRequestUrl.split('/').pop() : process.env.CIRCLE_PR_NUMBER; return { name: 'CircleCI', service: 'circleci', @@ -13,8 +17,8 @@ module.exports = { job: `${process.env.CIRCLE_BUILD_NUM}.${process.env.CIRCLE_NODE_INDEX}`, commit: process.env.CIRCLE_SHA1, branch: process.env.CIRCLE_BRANCH, - pr: process.env.CI_PULL_REQUEST ? process.env.CI_PULL_REQUEST.split('/').pop() : undefined, - isPr: Boolean(process.env.CI_PULL_REQUEST), + pr: pullRequest, + isPr: Boolean(pullRequest), slug: `${process.env.CIRCLE_PROJECT_USERNAME}/${process.env.CIRCLE_PROJECT_REPONAME}`, }; }, diff --git a/test/circleci.test.js b/test/circleci.test.js index ed17941..f76f9b5 100644 --- a/test/circleci.test.js +++ b/test/circleci.test.js @@ -26,7 +26,7 @@ test('Push', t => { }); }); -test('PR', t => { +test('PR 1.0', t => { process.env.CIRCLECI = 'true'; process.env.CIRCLE_BUILD_NUM = '1234'; process.env.CIRCLE_SHA1 = '5678'; @@ -49,3 +49,54 @@ test('PR', t => { slug: 'owner/repo', }); }); + +test('PR 2.0', t => { + process.env.CIRCLECI = 'true'; + process.env.CIRCLE_BUILD_NUM = '1234'; + process.env.CIRCLE_SHA1 = '5678'; + process.env.CIRCLE_BRANCH = 'pr_branch'; + process.env.CIRCLE_NODE_INDEX = '1'; + process.env.CIRCLE_PROJECT_USERNAME = 'owner'; + process.env.CIRCLE_PROJECT_REPONAME = 'repo'; + process.env.CIRCLE_PULL_REQUEST = 'uri/pr/10'; + delete process.env.CI_PULL_REQUEST; + + t.deepEqual(circle.configuration(), { + name: 'CircleCI', + service: 'circleci', + commit: '5678', + build: '1234', + buildUrl: 'https://server.com/buildresult', + job: '1234.1', + branch: 'pr_branch', + pr: '10', + isPr: true, + slug: 'owner/repo', + }); +}); + +test('PR 2.0 without pull uri', t => { + process.env.CIRCLECI = 'true'; + process.env.CIRCLE_BUILD_NUM = '1234'; + process.env.CIRCLE_SHA1 = '5678'; + process.env.CIRCLE_BRANCH = 'pr_branch'; + process.env.CIRCLE_NODE_INDEX = '1'; + process.env.CIRCLE_PROJECT_USERNAME = 'owner'; + process.env.CIRCLE_PROJECT_REPONAME = 'repo'; + process.env.CIRCLE_PR_NUMBER = '10'; + delete process.env.CIRCLE_PULL_REQUEST; + delete process.env.CI_PULL_REQUEST; + + t.deepEqual(circle.configuration(), { + name: 'CircleCI', + service: 'circleci', + commit: '5678', + build: '1234', + buildUrl: 'https://server.com/buildresult', + job: '1234.1', + branch: 'pr_branch', + pr: '10', + isPr: true, + slug: 'owner/repo', + }); +});