From 3faacd412a71145c425cfe3feaa628b17afc3e2f Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Mon, 17 Jun 2019 18:55:10 -0600 Subject: [PATCH 1/2] Add support for AWS CodeBuild --- lib/detect.js | 3 +- lib/services/codebuild.js | 42 +++++++++++++++++++++++++++ package-lock.json | 2 +- test/services/codebuild.test.js | 50 +++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 lib/services/codebuild.js create mode 100644 test/services/codebuild.test.js diff --git a/lib/detect.js b/lib/detect.js index 4a11e9be..cbe2ade5 100644 --- a/lib/detect.js +++ b/lib/detect.js @@ -13,7 +13,8 @@ var services = { snap: require('./services/snap'), gitlab: require('./services/gitlab'), heroku: require('./services/heroku'), - teamcity: require('./services/teamcity') + teamcity: require('./services/teamcity'), + codebuild: require('./services/codebuild'), } var detectProvider = function() { diff --git a/lib/services/codebuild.js b/lib/services/codebuild.js new file mode 100644 index 00000000..88726ae0 --- /dev/null +++ b/lib/services/codebuild.js @@ -0,0 +1,42 @@ +module.exports = { + detect: function() { + return !!process.env.CODEBUILD_CI + }, + + configuration: function() { + console.log(' AWS CodeBuild Detected') + return { + service: 'codebuild', + build: process.env.CODEBUILD_BUILD_ID, + job: process.env.CODEBUILD_BUILD_ID, + commit: process.env.CODEBUILD_RESOLVED_SOURCE_VERSION, + branch: detectBranchName(), + pr: detectPRNumber(), + slug: detectRepoSlug(), + } + function detectBranchName() { + if (process.env.CODEBUILD_WEBHOOK_HEAD_REF) { + return process.env.CODEBUILD_WEBHOOK_HEAD_REF.replace( + /^refs\/heads\//, + '' + ) + } + throw new Error('Cannot detect branch name.') + } + function detectPRNumber() { + if (process.env.CODEBUILD_SOURCE_VERSION) { + return process.env.CODEBUILD_SOURCE_VERSION.replace(/^pr\//, '') + } + throw new Error('Cannot detect PR number.') + } + function detectRepoSlug() { + if (process.env.CODEBUILD_SOURCE_REPO_URL) { + return process.env.CODEBUILD_SOURCE_REPO_URL.replace( + /^.*github.com\//, + '' + ).replace(/\.git$/, '') + } + throw new Error('Cannot detect repository slug.') + } + }, +} diff --git a/package-lock.json b/package-lock.json index 3cc3d68f..902e1312 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "codecov", - "version": "3.4.0", + "version": "3.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/test/services/codebuild.test.js b/test/services/codebuild.test.js new file mode 100644 index 00000000..1d77684a --- /dev/null +++ b/test/services/codebuild.test.js @@ -0,0 +1,50 @@ +var codebuild = require('../../lib/services/codebuild') + +describe('AWS CodeBuild Provider', function() { + it('can detect codebuild', function() { + process.env.CODEBUILD_CI = 'true' + expect(codebuild.detect()).toBe(true) + }) + + it('can get codebuild env info', function() { + process.env.CODEBUILD_CI = 'true' + process.env.CODEBUILD_BUILD_ID = + 'my-project:e016b9d9-f2c8-4749-8373-7ca673b6d969' + process.env.CODEBUILD_RESOLVED_SOURCE_VERSION = + '39ec2418eca4c539d765574a1c68f3bd77e8c549' + process.env.CODEBUILD_WEBHOOK_HEAD_REF = 'refs/heads/master' + process.env.CODEBUILD_SOURCE_VERSION = 'pr/1' + process.env.CODEBUILD_SOURCE_REPO_URL = + 'https://github.com/my-org/my-project.git' + expect(codebuild.configuration()).toEqual({ + service: 'codebuild', + build: 'my-project:e016b9d9-f2c8-4749-8373-7ca673b6d969', + job: 'my-project:e016b9d9-f2c8-4749-8373-7ca673b6d969', + commit: '39ec2418eca4c539d765574a1c68f3bd77e8c549', + branch: 'master', + pr: '1', + slug: 'my-org/my-project', + }) + }) + + it('throws if branch name cannot be detected', function() { + delete process.env.CODEBUILD_WEBHOOK_HEAD_REF + expect(function() { + codebuild.configuration() + }).toThrow() + }) + + it('throws if pr number cannot be detected', function() { + delete process.env.CODEBUILD_SOURCE_VERSION + expect(function() { + codebuild.configuration() + }).toThrow() + }) + + it('throws if slug cannot be detected', function() { + delete process.env.CODEBUILD_SOURCE_REPO_URL + expect(function() { + codebuild.configuration() + }).toThrow() + }) +}) From e2f6b81cffb12b417e67d118f3567285e0856d8a Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Mon, 17 Jun 2019 19:04:31 -0600 Subject: [PATCH 2/2] Test improvements --- test/services/codebuild.test.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/services/codebuild.test.js b/test/services/codebuild.test.js index 1d77684a..28c354d9 100644 --- a/test/services/codebuild.test.js +++ b/test/services/codebuild.test.js @@ -35,6 +35,7 @@ describe('AWS CodeBuild Provider', function() { }) it('throws if pr number cannot be detected', function() { + process.env.CODEBUILD_WEBHOOK_HEAD_REF = 'refs/heads/master' delete process.env.CODEBUILD_SOURCE_VERSION expect(function() { codebuild.configuration() @@ -42,6 +43,8 @@ describe('AWS CodeBuild Provider', function() { }) it('throws if slug cannot be detected', function() { + process.env.CODEBUILD_RESOLVED_SOURCE_VERSION = + '39ec2418eca4c539d765574a1c68f3bd77e8c549' delete process.env.CODEBUILD_SOURCE_REPO_URL expect(function() { codebuild.configuration()