Skip to content
This repository was archived by the owner on Jan 10, 2023. It is now read-only.

Commit e0aa49e

Browse files
authored
fix crash and support CodeBuild under CodePipeline (#131)
* fix crash and support CodeBuild under CodePipeline * add build_url test * invalid PR gets status 400, suppress it
1 parent 61f2343 commit e0aa49e

3 files changed

Lines changed: 48 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Repo tokens are **not** required for public repos on Travis-Ci, CircleCI, or App
5151
| [Bitrise CI](https://www.bitrise.io/) |
5252
| [Buildkite CI](https://buildkite.com/) |
5353
| [CodeBuild CI](https://aws.amazon.com/codebuild/) |
54+
| [CodePipeline](https://aws.amazon.com/codepipeline/) |
5455
| [Circle CI](https://circleci.com/) |
5556
| [Codeship CI](https://codeship.com/) |
5657
| [Drone CI](https://drone.io/) |

lib/codecov/uploader.rb

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -180,16 +180,29 @@ def self.build_params(ci)
180180
params[:commit] = ENV['CIRCLE_SHA1']
181181
when CODEBUILD
182182
# https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html
183+
# To use CodePipeline as CodeBuild source which sets no branch and slug variable:
184+
#
185+
# 1. Set up CodeStarSourceConnection as source action provider
186+
# https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CodestarConnectionSource.html
187+
# 2. Add a Namespace to your source action. Example: "CodeStar".
188+
# https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-variables.html#reference-variables-concepts-namespaces
189+
# 3. Add these environment variables to your CodeBuild action:
190+
# - CODESTAR_BRANCH_NAME: #{CodeStar.BranchName}
191+
# - CODESTAR_FULL_REPOSITORY_NAME: #{CodeStar.FullRepositoryName} (optional)
192+
# https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-CodeBuild.html#action-reference-CodeBuild-config
193+
#
194+
# PRs are not supported with CodePipeline.
183195
params[:service] = 'codebuild'
184-
params[:branch] = ENV['CODEBUILD_WEBHOOK_HEAD_REF'].split('/')[2]
196+
params[:branch] = ENV['CODEBUILD_WEBHOOK_HEAD_REF']&.split('/')&.[](2) || ENV['CODESTAR_BRANCH_NAME']
185197
params[:build] = ENV['CODEBUILD_BUILD_ID']
186198
params[:commit] = ENV['CODEBUILD_RESOLVED_SOURCE_VERSION']
187199
params[:job] = ENV['CODEBUILD_BUILD_ID']
188-
params[:slug] = ENV['CODEBUILD_SOURCE_REPO_URL'].match(/.*github.com\/(?<slug>.*).git/)['slug']
189-
params[:pr] = if ENV['CODEBUILD_SOURCE_VERSION']
200+
params[:slug] = ENV['CODEBUILD_SOURCE_REPO_URL']&.match(/.*github.com\/(?<slug>.*).git/)&.[]('slug') || ENV['CODESTAR_FULL_REPOSITORY_NAME']
201+
params[:pr] = if ENV['CODEBUILD_SOURCE_VERSION'] && !(ENV['CODEBUILD_INITIATOR'] =~ /codepipeline/)
190202
matched = ENV['CODEBUILD_SOURCE_VERSION'].match(%r{pr/(?<pr>.*)})
191203
matched.nil? ? ENV['CODEBUILD_SOURCE_VERSION'] : matched['pr']
192204
end
205+
params[:build_url] = ENV['CODEBUILD_BUILD_URL']
193206
when CODESHIP
194207
# https://www.codeship.io/documentation/continuous-integration/set-environment-variables/
195208
params[:service] = 'codeship'

test/test_codecov.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,14 @@ def teardown
169169
ENV['CIRCLECI'] = nil
170170
ENV['CODEBUILD_CI'] = nil
171171
ENV['CODEBUILD_BUILD_ID'] = nil
172+
ENV['CODEBUILD_BUILD_URL'] = nil
173+
ENV['CODEBUILD_INITIATOR'] = nil
172174
ENV['CODEBUILD_RESOLVED_SOURCE_VERSION'] = nil
173175
ENV['CODEBUILD_WEBHOOK_HEAD_REF'] = nil
174176
ENV['CODEBUILD_SOURCE_VERSION'] = nil
175177
ENV['CODEBUILD_SOURCE_REPO_URL'] = nil
178+
ENV['CODESTAR_BRANCH_NAME'] = nil
179+
ENV['CODESTAR_FULL_REPOSITORY_NAME'] = nil
176180
ENV['CODECOV_ENV'] = nil
177181
ENV['CODECOV_SLUG'] = nil
178182
ENV['CODECOV_TOKEN'] = nil
@@ -639,6 +643,33 @@ def test_codebuild
639643
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
640644
end
641645

646+
def test_codebuild_codepipeline
647+
ENV['CODEBUILD_CI'] = "true"
648+
ENV['CODEBUILD_INITIATOR'] = "codepipeline/codepipeline-name"
649+
ENV['CODEBUILD_BUILD_ID'] = "codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3"
650+
ENV['CODEBUILD_BUILD_URL'] = "http://codebuild"
651+
ENV['CODEBUILD_RESOLVED_SOURCE_VERSION'] = 'd653b934ed59c1a785cc1cc79d08c9aaa4eba73b'
652+
ENV['CODEBUILD_WEBHOOK_HEAD_REF'] = nil
653+
ENV['CODEBUILD_SOURCE_VERSION'] = 'arn:aws:s3:::bucket/codepipeline-name/SourceActionName/cf4IT8b'
654+
ENV['CODEBUILD_SOURCE_REPO_URL'] = nil
655+
# set CodeStarSourceConnection namespace and CodeBuild variables manually in CodePipeline, see source code comments
656+
ENV['CODESTAR_BRANCH_NAME'] = 'branch-name'
657+
ENV['CODESTAR_FULL_REPOSITORY_NAME'] = 'owner/repo'
658+
ENV['CODECOV_TOKEN'] = 'f881216b-b5c0-4eb1-8f21-b51887d1d506'
659+
660+
result = upload
661+
662+
assert_equal("codebuild", result['params'][:service])
663+
assert_equal("d653b934ed59c1a785cc1cc79d08c9aaa4eba73b", result['params'][:commit])
664+
assert_equal("codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3", result['params'][:build])
665+
assert_equal("http://codebuild", result['params'][:build_url])
666+
assert_equal("codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3", result['params'][:job])
667+
assert_equal("owner/repo", result['params'][:slug])
668+
assert_equal("branch-name", result['params'][:branch])
669+
assert_nil(result['params'][:pr])
670+
assert_equal('f881216b-b5c0-4eb1-8f21-b51887d1d506', result['params']['token'])
671+
end
672+
642673
def test_codebuild_source_version_is_other_than_pr_number
643674
ENV['CODEBUILD_CI'] = 'true'
644675
ENV['CODEBUILD_BUILD_ID'] = 'codebuild-project:458dq3q8-7354-4513-8702-ea7b9c81efb3'

0 commit comments

Comments
 (0)