Skip to content

Commit

Permalink
Merge pull request #318 from JuliaCI/dpa/codecov-v4
Browse files Browse the repository at this point in the history
Update Codecov upload API to v4 (replacement for #304)
  • Loading branch information
DilumAluthge authored Jun 13, 2021
2 parents b79485e + 0b0e47e commit 996d94c
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 10 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,13 @@ jobs:
arch: ${{ matrix.arch }}
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
env:
JULIA_COVERAGE_BLACK_HOLE_SERVER_URL_PUT: https://httpbingo.julialang.org/put
# submit coverage data to a black hole server, and collect new coverage data on that
- run: julia --color=yes --project=. --code-coverage=user etc/travis-coverage.jl
working-directory: ${{ github.workspace }}
env:
JULIA_COVERAGE_IS_BLACK_HOLE_SERVER: true
COVERALLS_TOKEN: token
COVERALLS_URL: https://httpbingo.julialang.org/post
CODECOV_URL: https://httpbingo.julialang.org
Expand Down
5 changes: 3 additions & 2 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "Coverage"
uuid = "a2441757-f6aa-5fb2-8edb-039e3f45d037"
authors = ["Iain Dunning <iaindunning@gmail.com>", "contributors"]
version = "1.2.2"
version = "1.3.0"

[deps]
CoverageTools = "c36e975a-824b-4404-a568-ef97ca766997"
Expand All @@ -18,7 +18,8 @@ MbedTLS = "0.6, 0.7, 1"
julia = "1"

[extras]
CoverageTools = "c36e975a-824b-4404-a568-ef97ca766997"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test"]
test = ["CoverageTools", "Test"]
24 changes: 19 additions & 5 deletions src/codecovio.jl
Original file line number Diff line number Diff line change
Expand Up @@ -223,14 +223,28 @@ module Codecov
@info "Submitting data to Codecov..."
@debug "Codecov.io API URL:\n" * mask_token(uri_str)

is_black_hole_server = parse(Bool, strip(get(ENV, "JULIA_COVERAGE_IS_BLACK_HOLE_SERVER", "false")))::Bool
if !dry_run
heads = Dict("Content-Type" => "application/json")
data = to_json(fcs)
req = HTTP.post(uri_str; body = JSON.json(data), headers = heads)
@debug "Result of submission:" * mask_token(String(req))
# Tell Codecov we have an upload for them
response = HTTP.post(uri_str; headers=Dict("Accept" => "text/plain"))
# Get the temporary URL to use for uploading to S3
repr = String(response)
s3url = get(split(String(response.body), '\n'), 2, "")
repr = chomp(replace(repr, s3url => ""))
@debug "Result of submission:" * repr
!is_black_hole_server && upload_to_s3(; s3url=s3url, fcs=fcs)
end
end

function upload_to_s3(; s3url, fcs)
startswith(s3url, "https://") || error("Invalid codecov response: $s3url")
# Upload to S3
request = HTTP.put(s3url; body=json(to_json(fcs)),
header=Dict("Content-Type" => "application/json",
"x-amz-storage-class" => "REDUCED_REDUNDANCY"))
@debug "Result of submission:" * mask_token(String(request))
end

function construct_uri_string(kwargs::Dict)
url = get(ENV, "CODECOV_URL", "")
isempty(url) || (kwargs = set_defaults(kwargs, codecov_url = url))
Expand All @@ -252,7 +266,7 @@ module Codecov
error("the codecov_url should not end with a /, given url $(repr(codecov_url))")
end

codecov_url_path = get(kwargs, :codecov_url_path, "/upload/v2")
codecov_url_path = get(kwargs, :codecov_url_path, "/upload/v4")
if isempty(codecov_url_path) || codecov_url_path[1] != '/' || codecov_url_path[end] == '/'
error("the codecov_url_path should begin with, but not end with, a /, given url $(repr(codecov_url_path))")
end
Expand Down
19 changes: 16 additions & 3 deletions test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

using Coverage, Test, LibGit2

import CoverageTools

@testset "Coverage" begin
# set up base system ENV vars for testing
withenv(
Expand Down Expand Up @@ -430,11 +432,22 @@ withenv(

# in the case above, the token is at the end. Let's test explicitly,
# that this also works if the token occurs earlier in the url
url = "https://enterprise-codecov-1.com/upload/v2?token=token_name_1&build=t_job_num"
url = "https://enterprise-codecov-1.com/upload/v4?token=token_name_1&build=t_job_num"
masked = Coverage.Codecov.mask_token(url)
@test masked == "https://enterprise-codecov-1.com/upload/v2?token=<HIDDEN>&build=t_job_num"
@test masked == "https://enterprise-codecov-1.com/upload/v4?token=<HIDDEN>&build=t_job_num"

@testset "Run the `Coverage.Codecov.upload_to_s3` function against the \"black hole\" server" begin
black_hole_server = get(
ENV,
"JULIA_COVERAGE_BLACK_HOLE_SERVER_URL_PUT",
"https://httpbingo.julialang.org/put",
)
s3url = black_hole_server
fcs = Vector{CoverageTools.FileCoverage}(undef, 0)
Coverage.Codecov.upload_to_s3(; s3url=s3url, fcs=fcs)
end
end


@testset "coveralls" begin
# NOTE: this only returns actual content if this package is devved.
Expand Down

2 comments on commit 996d94c

@DilumAluthge
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/38774

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v1.3.0 -m "<description of version>" 996d94c6f02c45020331842c666486e0623789e1
git push origin v1.3.0

Please sign in to comment.