Skip to content

Commit 65210ba

Browse files
authored
Merge pull request #329 from codecov/dana/pr-option-in-create-report
adding PR option and tokenless logic to create-report command
2 parents 67efc57 + c07796d commit 65210ba

5 files changed

Lines changed: 64 additions & 12 deletions

File tree

codecov_cli/commands/report.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@
1515
@click.option(
1616
"--code", help="The code of the report. If unsure, leave default", default="default"
1717
)
18+
@click.option(
19+
"-P",
20+
"--pr",
21+
"--pull-request-number",
22+
"pull_request_number",
23+
help="Specify the pull request number mannually. Used to override pre-existing CI environment variables",
24+
cls=CodecovOption,
25+
fallback_field=FallbackFieldEnum.pull_request_number,
26+
)
1827
@global_options
1928
@click.pass_context
2029
def create_report(
@@ -25,6 +34,7 @@ def create_report(
2534
git_service: str,
2635
token: uuid.UUID,
2736
fail_on_error: bool,
37+
pull_request_number: int,
2838
):
2939
enterprise_url = ctx.obj.get("enterprise_url")
3040
logger.debug(
@@ -41,7 +51,14 @@ def create_report(
4151
),
4252
)
4353
res = create_report_logic(
44-
commit_sha, code, slug, git_service, token, enterprise_url, fail_on_error
54+
commit_sha,
55+
code,
56+
slug,
57+
git_service,
58+
token,
59+
enterprise_url,
60+
pull_request_number,
61+
fail_on_error,
4562
)
4663
if not res.error:
4764
logger.info(

codecov_cli/services/report/__init__.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import json
22
import logging
33
import time
4-
import typing
54
import uuid
65

76
import requests
87

98
from codecov_cli.helpers import request
109
from codecov_cli.helpers.config import CODECOV_API_URL
11-
from codecov_cli.helpers.encoder import encode_slug
10+
from codecov_cli.helpers.encoder import decode_slug, encode_slug
11+
from codecov_cli.helpers.git import is_fork_pr
1212
from codecov_cli.helpers.request import (
1313
get_token_header_or_fail,
1414
log_warnings_and_errors_if_any,
@@ -27,21 +27,33 @@ def create_report_logic(
2727
service: str,
2828
token: uuid.UUID,
2929
enterprise_url: str,
30+
pull_request_number: int,
3031
fail_on_error: bool = False,
3132
):
3233
encoded_slug = encode_slug(slug)
3334
sending_result = send_create_report_request(
34-
commit_sha, code, service, token, encoded_slug, enterprise_url
35+
commit_sha,
36+
code,
37+
service,
38+
token,
39+
encoded_slug,
40+
enterprise_url,
41+
pull_request_number,
3542
)
3643
log_warnings_and_errors_if_any(sending_result, "Report creating", fail_on_error)
3744
return sending_result
3845

3946

4047
def send_create_report_request(
41-
commit_sha, code, service, token, encoded_slug, enterprise_url
48+
commit_sha, code, service, token, encoded_slug, enterprise_url, pull_request_number
4249
):
4350
data = {"code": code}
44-
headers = get_token_header_or_fail(token)
51+
decoded_slug = decode_slug(encoded_slug)
52+
headers = (
53+
{}
54+
if not token and is_fork_pr(pull_request_number, decoded_slug, service)
55+
else get_token_header_or_fail(token)
56+
)
4557
upload_url = enterprise_url or CODECOV_API_URL
4658
url = f"{upload_url}/upload/{service}/{encoded_slug}/commits/{commit_sha}/reports"
4759
return send_post_request(url=url, headers=headers, data=data)

tests/helpers/git_services/test_github.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def mock_request(*args, headers={}, **kwargs):
5454
},
5555
}
5656

57+
5758
def test_get_pull_request_404(mocker):
5859
def mock_request(*args, headers={}, **kwargs):
5960
assert headers["X-GitHub-Api-Version"] == "2022-11-28"

tests/services/commit/test_commit_service.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,14 @@ def test_commit_sender_200(mocker):
103103
)
104104
token = uuid.uuid4()
105105
res = send_commit_data(
106-
"commit_sha", "parent_sha", "pr", "branch", "owner::::repo", token, "service", None
106+
"commit_sha",
107+
"parent_sha",
108+
"pr",
109+
"branch",
110+
"owner::::repo",
111+
token,
112+
"service",
113+
None,
107114
)
108115
assert res.error is None
109116
assert res.warnings == []
@@ -117,7 +124,14 @@ def test_commit_sender_403(mocker):
117124
)
118125
token = uuid.uuid4()
119126
res = send_commit_data(
120-
"commit_sha", "parent_sha", "pr", "branch", "owner::::repo", token, "service", None
127+
"commit_sha",
128+
"parent_sha",
129+
"pr",
130+
"branch",
131+
"owner::::repo",
132+
token,
133+
"service",
134+
None,
121135
)
122136
assert res.error == RequestError(
123137
code="HTTP Error 403",

tests/services/report/test_report_service.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,13 @@ def test_send_create_report_request_200(mocker):
1313
return_value=mocker.MagicMock(status_code=200),
1414
)
1515
res = send_create_report_request(
16-
"commit_sha", "code", "github", uuid.uuid4(), "slug", "enterprise_url"
16+
"commit_sha",
17+
"code",
18+
"github",
19+
uuid.uuid4(),
20+
"owner::::repo",
21+
"enterprise_url",
22+
1,
1723
)
1824
assert res.error is None
1925
assert res.warnings == []
@@ -26,7 +32,7 @@ def test_send_create_report_request_403(mocker):
2632
return_value=mocker.MagicMock(status_code=403, text="Permission denied"),
2733
)
2834
res = send_create_report_request(
29-
"commit_sha", "code", "github", uuid.uuid4(), "slug", None
35+
"commit_sha", "code", "github", uuid.uuid4(), "owner::::repo", None, 1
3036
)
3137
assert res.error == RequestError(
3238
code="HTTP Error 403",
@@ -55,6 +61,7 @@ def test_create_report_command_with_warnings(mocker):
5561
service="github",
5662
token="token",
5763
enterprise_url=None,
64+
pull_request_number=1,
5865
)
5966

6067
out_bytes = parse_outstreams_into_log_lines(outstreams[0].getvalue())
@@ -70,7 +77,7 @@ def test_create_report_command_with_warnings(mocker):
7077
text="",
7178
)
7279
mocked_send_request.assert_called_with(
73-
"commit_sha", "code", "github", "token", "owner::::repo", None
80+
"commit_sha", "code", "github", "token", "owner::::repo", None, 1
7481
)
7582

7683

@@ -96,6 +103,7 @@ def test_create_report_command_with_error(mocker):
96103
slug="owner/repo",
97104
service="github",
98105
token="token",
106+
pull_request_number=1,
99107
enterprise_url="enterprise_url",
100108
)
101109

@@ -115,5 +123,5 @@ def test_create_report_command_with_error(mocker):
115123
warnings=[],
116124
)
117125
mock_send_report_data.assert_called_with(
118-
"commit_sha", "code", "github", "token", "owner::::repo", "enterprise_url"
126+
"commit_sha", "code", "github", "token", "owner::::repo", "enterprise_url", 1
119127
)

0 commit comments

Comments
 (0)