diff --git a/codecov-cli/codecov_cli/services/commit/__init__.py b/codecov-cli/codecov_cli/services/commit/__init__.py index be6caf35..56eecf98 100644 --- a/codecov-cli/codecov_cli/services/commit/__init__.py +++ b/codecov-cli/codecov_cli/services/commit/__init__.py @@ -2,6 +2,7 @@ import os import typing +from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers.config import CODECOV_INGEST_URL from codecov_cli.helpers.encoder import encode_slug from codecov_cli.helpers.request import ( @@ -75,6 +76,7 @@ def send_commit_data( "commitid": commit_sha, "parent_commit_id": parent_sha, "pullid": pr, + "version": codecov_cli_version, } upload_url = enterprise_url or CODECOV_INGEST_URL diff --git a/codecov-cli/codecov_cli/services/empty_upload/__init__.py b/codecov-cli/codecov_cli/services/empty_upload/__init__.py index 587bb756..89a54354 100644 --- a/codecov-cli/codecov_cli/services/empty_upload/__init__.py +++ b/codecov-cli/codecov_cli/services/empty_upload/__init__.py @@ -1,6 +1,7 @@ import json import logging +from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers.config import CODECOV_API_URL from codecov_cli.helpers.encoder import encode_slug from codecov_cli.helpers.request import ( @@ -32,6 +33,7 @@ def empty_upload_logic( data={ "cli_args": args, "should_force": should_force, + "version": codecov_cli_version, }, ) log_warnings_and_errors_if_any(sending_result, "Empty Upload", fail_on_error) diff --git a/codecov-cli/codecov_cli/services/report/__init__.py b/codecov-cli/codecov_cli/services/report/__init__.py index 757a7f47..712e2a8d 100644 --- a/codecov-cli/codecov_cli/services/report/__init__.py +++ b/codecov-cli/codecov_cli/services/report/__init__.py @@ -3,8 +3,7 @@ import time import typing -import requests - +from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers import request from codecov_cli.helpers.config import CODECOV_API_URL, CODECOV_INGEST_URL from codecov_cli.helpers.encoder import encode_slug @@ -58,6 +57,7 @@ def send_create_report_request( data = { "cli_args": args, "code": code, + "version": codecov_cli_version, } headers = get_token_header(token) upload_url = enterprise_url or CODECOV_INGEST_URL @@ -103,6 +103,7 @@ def send_reports_result_request( ): data = { "cli_args": args, + "version": codecov_cli_version, } headers = get_token_header(token) upload_url = enterprise_url or CODECOV_API_URL diff --git a/codecov-cli/codecov_cli/services/upload/upload_sender.py b/codecov-cli/codecov_cli/services/upload/upload_sender.py index 957caf2c..a9f79ee6 100644 --- a/codecov-cli/codecov_cli/services/upload/upload_sender.py +++ b/codecov-cli/codecov_cli/services/upload/upload_sender.py @@ -2,7 +2,6 @@ import json import logging import typing -import sys import zlib from typing import Any, Dict @@ -92,11 +91,14 @@ def send_upload_data( commit_sha, report_code, upload_coverage, + file_not_found=file_not_found, ) # Data that goes to storage reports_payload = self._generate_payload( upload_data, env_vars, report_type ) + reports_payload_size = len(reports_payload) + data["report_payload_bytes"] = reports_payload_size with sentry_sdk.start_span(name="upload_sender_storage_request"): logger.debug("Sending upload request to Codecov") @@ -126,9 +128,8 @@ def send_upload_data( put_url = resp_json_obj["raw_upload_location"] with sentry_sdk.start_span(name="upload_sender_storage") as storage_span: - payload_size = sys.getsizeof(reports_payload) - storage_span.set_data("payload_size", payload_size) - logger.info(f"Sending upload ({payload_size} bytes) to storage") + storage_span.set_data("payload_size", reports_payload_size) + logger.info(f"Sending upload ({reports_payload_size} bytes) to storage") resp_from_storage = send_put_request(put_url, data=reports_payload) return resp_from_storage diff --git a/codecov-cli/codecov_cli/services/upload_completion/__init__.py b/codecov-cli/codecov_cli/services/upload_completion/__init__.py index b595ba7f..7046d914 100644 --- a/codecov-cli/codecov_cli/services/upload_completion/__init__.py +++ b/codecov-cli/codecov_cli/services/upload_completion/__init__.py @@ -1,6 +1,7 @@ import json import logging +from codecov_cli import __version__ as codecov_cli_version from codecov_cli.helpers.config import CODECOV_API_URL from codecov_cli.helpers.encoder import encode_slug from codecov_cli.helpers.request import ( @@ -27,6 +28,7 @@ def upload_completion_logic( url = f"{upload_url}/upload/{git_service}/{encoded_slug}/commits/{commit_sha}/upload-complete" data = { "cli_args": args, + "version": codecov_cli_version, } sending_result = send_post_request(url=url, data=data, headers=headers) log_warnings_and_errors_if_any( diff --git a/codecov-cli/tests/helpers/test_upload_sender.py b/codecov-cli/tests/helpers/test_upload_sender.py index f04eb77a..2eb50eec 100644 --- a/codecov-cli/tests/helpers/test_upload_sender.py +++ b/codecov-cli/tests/helpers/test_upload_sender.py @@ -52,19 +52,51 @@ "ci_service": "ci_service", "git_service": "github", } + + +def _upload_ingest_post_json_base(*, file_not_found: bool) -> dict: + return { + "ci_service": "ci_service", + "ci_url": "build_url", + "cli_args": None, + "env": {}, + "flags": "flags", + "job_code": "job_code", + "name": "name", + "version": codecov_cli_version, + "file_not_found": file_not_found, + } + + +_report_payload_bytes_coverage = len( + UploadSender()._generate_payload( + upload_collection, {}, ReportType.COVERAGE + ) +) + request_data = { - "ci_service": "ci_service", - "ci_url": "build_url", - "cli_args": None, - "env": {}, - "flags": "flags", - "job_code": "job_code", - "name": "name", - "version": codecov_cli_version, - "file_not_found": False, + **_upload_ingest_post_json_base(file_not_found=False), + "report_payload_bytes": _report_payload_bytes_coverage, } +def _test_results_ingest_post_json( + upload_data: UploadCollectionResult, *, file_not_found: bool +) -> dict: + return { + **_upload_ingest_post_json_base(file_not_found=file_not_found), + "slug": encode_slug("org/repo"), + "branch": "branch", + "commit": random_sha, + "service": "github", + "report_payload_bytes": len( + UploadSender()._generate_payload( + upload_data, {}, ReportType.TEST_RESULTS + ) + ), + } + + @pytest.fixture def mocked_responses(): with responses.RequestsMock() as rsps: @@ -266,11 +298,6 @@ def test_upload_sender_post_called_with_right_parameters_test_results( ): headers = {"Authorization": f"token {random_token}"} - mocked_legacy_upload_endpoint.match = [ - matchers.json_params_matcher(request_data), - matchers.header_matcher(headers), - ] - ta_upload_collection = deepcopy(upload_collection) test_path = tmp_path / "test_results.xml" @@ -278,6 +305,15 @@ def test_upload_sender_post_called_with_right_parameters_test_results( ta_upload_collection.files = [UploadCollectionResultFile(test_path)] + mocked_test_results_endpoint.match = [ + matchers.json_params_matcher( + _test_results_ingest_post_json( + ta_upload_collection, file_not_found=False + ) + ), + matchers.header_matcher(headers), + ] + sending_result = UploadSender().send_upload_data( ta_upload_collection, random_sha, @@ -309,10 +345,11 @@ def test_upload_sender_post_called_with_right_parameters_test_results_file_not_f ): headers = {"Authorization": f"token {random_token}"} - req_data = deepcopy(request_data) - req_data["file_not_found"] = True + req_data = _test_results_ingest_post_json( + upload_collection, file_not_found=True + ) - mocked_legacy_upload_endpoint.match = [ + mocked_test_results_endpoint_file_not_found.match = [ matchers.json_params_matcher(req_data), matchers.header_matcher(headers), ] diff --git a/codecov-cli/tests/services/commit/test_commit_service.py b/codecov-cli/tests/services/commit/test_commit_service.py index c574b9c0..3227575e 100644 --- a/codecov-cli/tests/services/commit/test_commit_service.py +++ b/codecov-cli/tests/services/commit/test_commit_service.py @@ -2,6 +2,7 @@ from click.testing import CliRunner +from codecov_cli import __version__ as codecov_cli_version from codecov_cli.services.commit import create_commit_logic, send_commit_data from codecov_cli.types import RequestError, RequestResult, RequestResultWarning from tests.test_helpers import parse_outstreams_into_log_lines @@ -171,6 +172,7 @@ def test_commit_sender_with_forked_repo(mocker): "commitid": "commit_sha", "parent_commit_id": "parent_sha", "pullid": "1", + "version": codecov_cli_version, }, headers=None, ) @@ -201,6 +203,7 @@ def test_commit_without_token(mocker): "commitid": "commit_sha", "parent_commit_id": "parent_sha", "pullid": "1", + "version": codecov_cli_version, }, headers=None, ) @@ -232,6 +235,7 @@ def test_commit_sender_with_forked_repo_bad_branch(mocker): "commitid": "commit_sha", "parent_commit_id": "parent_sha", "pullid": "1", + "version": codecov_cli_version, }, headers=None, )