Skip to content

Commit 20dc7e0

Browse files
feat: Send upload size to upload request and cli version with API requests (#702)
* feat: Send upload size to upload request and cli version with API requests * fix: Pass file_not_found param to upload data
1 parent 2be4e29 commit 20dc7e0

7 files changed

Lines changed: 72 additions & 23 deletions

File tree

codecov-cli/codecov_cli/services/commit/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import os
33
import typing
44

5+
from codecov_cli import __version__ as codecov_cli_version
56
from codecov_cli.helpers.config import CODECOV_INGEST_URL
67
from codecov_cli.helpers.encoder import encode_slug
78
from codecov_cli.helpers.request import (
@@ -75,6 +76,7 @@ def send_commit_data(
7576
"commitid": commit_sha,
7677
"parent_commit_id": parent_sha,
7778
"pullid": pr,
79+
"version": codecov_cli_version,
7880
}
7981

8082
upload_url = enterprise_url or CODECOV_INGEST_URL

codecov-cli/codecov_cli/services/empty_upload/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
import logging
33

4+
from codecov_cli import __version__ as codecov_cli_version
45
from codecov_cli.helpers.config import CODECOV_API_URL
56
from codecov_cli.helpers.encoder import encode_slug
67
from codecov_cli.helpers.upload_url_validation import validate_upload_service
@@ -36,6 +37,7 @@ def empty_upload_logic(
3637
data={
3738
"cli_args": args,
3839
"should_force": should_force,
40+
"version": codecov_cli_version,
3941
},
4042
)
4143
log_warnings_and_errors_if_any(sending_result, "Empty Upload", fail_on_error)

codecov-cli/codecov_cli/services/report/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@
33
import time
44
import typing
55

6-
import requests
7-
6+
from codecov_cli import __version__ as codecov_cli_version
87
from codecov_cli.helpers import request
98
from codecov_cli.helpers.config import CODECOV_API_URL, CODECOV_INGEST_URL
109
from codecov_cli.helpers.encoder import encode_slug
@@ -59,6 +58,7 @@ def send_create_report_request(
5958
data = {
6059
"cli_args": args,
6160
"code": code,
61+
"version": codecov_cli_version,
6262
}
6363
headers = get_token_header(token)
6464
upload_url = enterprise_url or CODECOV_INGEST_URL
@@ -106,6 +106,7 @@ def send_reports_result_request(
106106
):
107107
data = {
108108
"cli_args": args,
109+
"version": codecov_cli_version,
109110
}
110111
headers = get_token_header(token)
111112
upload_url = enterprise_url or CODECOV_API_URL

codecov-cli/codecov_cli/services/upload/upload_sender.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import json
33
import logging
44
import typing
5-
import sys
65
import zlib
76
from typing import Any, Dict
87

@@ -93,11 +92,14 @@ def send_upload_data(
9392
commit_sha,
9493
report_code,
9594
upload_coverage,
95+
file_not_found=file_not_found,
9696
)
9797
# Data that goes to storage
9898
reports_payload = self._generate_payload(
9999
upload_data, env_vars, report_type
100100
)
101+
reports_payload_size = len(reports_payload)
102+
data["report_payload_bytes"] = reports_payload_size
101103

102104
with sentry_sdk.start_span(name="upload_sender_storage_request"):
103105
logger.debug("Sending upload request to Codecov")
@@ -127,9 +129,8 @@ def send_upload_data(
127129
put_url = resp_json_obj["raw_upload_location"]
128130

129131
with sentry_sdk.start_span(name="upload_sender_storage") as storage_span:
130-
payload_size = sys.getsizeof(reports_payload)
131-
storage_span.set_data("payload_size", payload_size)
132-
logger.info(f"Sending upload ({payload_size} bytes) to storage")
132+
storage_span.set_data("payload_size", reports_payload_size)
133+
logger.info(f"Sending upload ({reports_payload_size} bytes) to storage")
133134
resp_from_storage = send_put_request(put_url, data=reports_payload)
134135

135136
return resp_from_storage

codecov-cli/codecov_cli/services/upload_completion/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
import logging
33

4+
from codecov_cli import __version__ as codecov_cli_version
45
from codecov_cli.helpers.config import CODECOV_API_URL
56
from codecov_cli.helpers.encoder import encode_slug
67
from codecov_cli.helpers.upload_url_validation import validate_upload_service
@@ -30,6 +31,7 @@ def upload_completion_logic(
3031
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/upload-complete"
3132
data = {
3233
"cli_args": args,
34+
"version": codecov_cli_version,
3335
}
3436
sending_result = send_post_request(url=url, data=data, headers=headers)
3537
log_warnings_and_errors_if_any(

codecov-cli/tests/helpers/test_upload_sender.py

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -52,19 +52,51 @@
5252
"ci_service": "ci_service",
5353
"git_service": "github",
5454
}
55+
56+
57+
def _upload_ingest_post_json_base(*, file_not_found: bool) -> dict:
58+
return {
59+
"ci_service": "ci_service",
60+
"ci_url": "build_url",
61+
"cli_args": None,
62+
"env": {},
63+
"flags": "flags",
64+
"job_code": "job_code",
65+
"name": "name",
66+
"version": codecov_cli_version,
67+
"file_not_found": file_not_found,
68+
}
69+
70+
71+
_report_payload_bytes_coverage = len(
72+
UploadSender()._generate_payload(
73+
upload_collection, {}, ReportType.COVERAGE
74+
)
75+
)
76+
5577
request_data = {
56-
"ci_service": "ci_service",
57-
"ci_url": "build_url",
58-
"cli_args": None,
59-
"env": {},
60-
"flags": "flags",
61-
"job_code": "job_code",
62-
"name": "name",
63-
"version": codecov_cli_version,
64-
"file_not_found": False,
78+
**_upload_ingest_post_json_base(file_not_found=False),
79+
"report_payload_bytes": _report_payload_bytes_coverage,
6580
}
6681

6782

83+
def _test_results_ingest_post_json(
84+
upload_data: UploadCollectionResult, *, file_not_found: bool
85+
) -> dict:
86+
return {
87+
**_upload_ingest_post_json_base(file_not_found=file_not_found),
88+
"slug": encode_slug("org/repo"),
89+
"branch": "branch",
90+
"commit": random_sha,
91+
"service": "github",
92+
"report_payload_bytes": len(
93+
UploadSender()._generate_payload(
94+
upload_data, {}, ReportType.TEST_RESULTS
95+
)
96+
),
97+
}
98+
99+
68100
@pytest.fixture
69101
def mocked_responses():
70102
with responses.RequestsMock() as rsps:
@@ -266,18 +298,22 @@ def test_upload_sender_post_called_with_right_parameters_test_results(
266298
):
267299
headers = {"Authorization": f"token {random_token}"}
268300

269-
mocked_legacy_upload_endpoint.match = [
270-
matchers.json_params_matcher(request_data),
271-
matchers.header_matcher(headers),
272-
]
273-
274301
ta_upload_collection = deepcopy(upload_collection)
275302

276303
test_path = tmp_path / "test_results.xml"
277304
test_path.write_bytes(b"test_data")
278305

279306
ta_upload_collection.files = [UploadCollectionResultFile(test_path)]
280307

308+
mocked_test_results_endpoint.match = [
309+
matchers.json_params_matcher(
310+
_test_results_ingest_post_json(
311+
ta_upload_collection, file_not_found=False
312+
)
313+
),
314+
matchers.header_matcher(headers),
315+
]
316+
281317
sending_result = UploadSender().send_upload_data(
282318
ta_upload_collection,
283319
random_sha,
@@ -309,10 +345,11 @@ def test_upload_sender_post_called_with_right_parameters_test_results_file_not_f
309345
):
310346
headers = {"Authorization": f"token {random_token}"}
311347

312-
req_data = deepcopy(request_data)
313-
req_data["file_not_found"] = True
348+
req_data = _test_results_ingest_post_json(
349+
upload_collection, file_not_found=True
350+
)
314351

315-
mocked_legacy_upload_endpoint.match = [
352+
mocked_test_results_endpoint_file_not_found.match = [
316353
matchers.json_params_matcher(req_data),
317354
matchers.header_matcher(headers),
318355
]

codecov-cli/tests/services/commit/test_commit_service.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import pytest
55
from click.testing import CliRunner
66

7+
from codecov_cli import __version__ as codecov_cli_version
78
from codecov_cli.services.commit import create_commit_logic, send_commit_data
89
from codecov_cli.types import RequestError, RequestResult, RequestResultWarning
910
from tests.test_helpers import parse_outstreams_into_log_lines
@@ -173,6 +174,7 @@ def test_commit_sender_with_forked_repo(mocker):
173174
"commitid": "commit_sha",
174175
"parent_commit_id": "parent_sha",
175176
"pullid": "1",
177+
"version": codecov_cli_version,
176178
},
177179
headers=None,
178180
)
@@ -230,6 +232,7 @@ def test_commit_without_token(mocker):
230232
"commitid": "commit_sha",
231233
"parent_commit_id": "parent_sha",
232234
"pullid": "1",
235+
"version": codecov_cli_version,
233236
},
234237
headers=None,
235238
)
@@ -261,6 +264,7 @@ def test_commit_sender_with_forked_repo_bad_branch(mocker):
261264
"commitid": "commit_sha",
262265
"parent_commit_id": "parent_sha",
263266
"pullid": "1",
267+
"version": codecov_cli_version,
264268
},
265269
headers=None,
266270
)

0 commit comments

Comments
 (0)