Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Codecov upload API to v4 (replacement for #304) #318

Merged
merged 4 commits into from
Jun 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 <[email protected]>", "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