codecov-cli 11.2.7__tar.gz → 11.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codecov_cli-11.2.7/codecov_cli.egg-info → codecov_cli-11.3.0}/PKG-INFO +10 -10
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/README.md +5 -5
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/upload.py +4 -1
- codecov_cli-11.3.0/codecov_cli/fallbacks.py +78 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/args.py +3 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/__init__.py +2 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/base.py +8 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/github_actions.py +7 -0
- codecov_cli-11.3.0/codecov_cli/helpers/ci_adapters/harness.py +52 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/request.py +1 -1
- codecov_cli-11.3.0/codecov_cli/helpers/upload_url_validation.py +21 -0
- codecov_cli-11.3.0/codecov_cli/opentelemetry.py +85 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/commit/__init__.py +6 -2
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/empty_upload/__init__.py +7 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/report/__init__.py +13 -5
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/__init__.py +1 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/upload_sender.py +12 -7
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload_completion/__init__.py +6 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0/codecov_cli.egg-info}/PKG-INFO +10 -10
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli.egg-info/SOURCES.txt +3 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli.egg-info/requires.txt +1 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/pyproject.toml +8 -7
- codecov_cli-11.3.0/tests/ci_adapters/test_harnessci.py +150 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_invoke_upload.py +1 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/factory.py +4 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_ci_adapter_selection.py +4 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_upload_sender.py +54 -17
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_versioning_systems.py +1 -1
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/commit/test_commit_service.py +41 -8
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/empty_upload/test_empty_upload.py +11 -11
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/report/test_report_results.py +15 -15
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/report/test_report_service.py +6 -6
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/upload/test_upload_service.py +9 -9
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/upload_completion/test_upload_completion.py +9 -9
- codecov_cli-11.3.0/tests/test_fallbacks.py +93 -0
- codecov_cli-11.2.7/codecov_cli/fallbacks.py +0 -56
- codecov_cli-11.2.7/codecov_cli/opentelemetry.py +0 -26
- codecov_cli-11.2.7/tests/test_fallbacks.py +0 -33
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/LICENSE +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/MANIFEST.in +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/branding.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/base_picking.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/commit.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/create_report_result.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/empty_upload.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/get_report_results.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/labelanalysis.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/process_test_results.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/report.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/send_notifications.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/staticanalysis.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/upload_coverage.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/commands/upload_process.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/appveyor_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/azure_pipelines.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/bitbucket_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/bitrise_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/buildkite.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/circleci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/cirrus_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/cloudbuild.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/codebuild.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/droneci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/gitlab_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/heroku.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/jenkins.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/local.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/teamcity.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/travis_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/ci_adapters/woodpeckerci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/config.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/encoder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/folder_searcher.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/git.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/git_services/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/git_services/github.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/glob.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/logging_utils.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/options.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/upload_type.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/validators.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/helpers/versioning_systems.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/main.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/compress_pycoverage_contexts.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/gcov.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/pycoverage.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/types.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/plugins/xcode.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/runners/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/runners/dan_runner.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/runners/pytest_standard_runner.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/runners/types.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/commit/base_picking.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/file_finder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/legacy_upload_sender.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/network_finder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload/upload_collector.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload_coverage/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/types.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli.egg-info/dependency_links.txt +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli.egg-info/entry_points.txt +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli.egg-info/top_level.txt +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/example_cli_config.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/example_module.js +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.github/.codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.github/.codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.github/codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/.github/codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/dev/.codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/dev/.codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/dev/codecov.yaml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/fake_project/dev/codecov.yml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/inputs/sample_001.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/inputs/sample_002.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/inputs/sample_003.js +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/inputs/sample_004.js +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/inputs/sample_005.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/junit.xml +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/outputs/sample_001.json +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/outputs/sample_002.json +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/outputs/sample_003.json +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/outputs/sample_004.json +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/samples/outputs/sample_005.json +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/setup.cfg +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/setup.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_appveyor.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_azure_pipelines.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_bitbucket_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_bitrise.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_buildkite.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_circleci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_cirrusci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_cloudbuild.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_codebuild.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_droneci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_ghactions.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_gitlabci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_herokuci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_jenkins.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_local.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_teamcity.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_travis_ci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/ci_adapters/test_woodpeckerci.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/__init__.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_invoke_empty_upload.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_invoke_labelanalysis.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_invoke_upload_coverage.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_invoke_upload_process.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_process_test_results.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/commands/test_upload_token_discovery.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/conftest.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/files_to_fix_examples/bad_encoding.go +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/files_to_fix_examples/sample.cpp +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/files_to_fix_examples/sample.go +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/files_to_fix_examples/sample.kt +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/files_to_fix_examples/sample.php +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data/reports_examples.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/data//320/232/320/276/320/275/321/202/321/200/320/276/320/273/320/273/320/265/321/200/321/213//320/237/320/276/320/273/321/214/320/267/320/276/320/262/320/260/321/202/320/265/320/273/321/214//320/223/320/273/320/260/320/262/320/275/321/213/320/271/320/232/320/276/320/275/321/202/321/200/320/276/320/273/320/273/320/265/321/200.php" +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/git_services/test_github.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_args.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_config.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_encoder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_folder_searcher.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_git.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_legacy_upload_sender.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_network_finder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_request.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/helpers/test_validators.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/plugins/test_compress_pycoverage_contexts.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/plugins/test_gcov.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/plugins/test_instantiation.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/plugins/test_pycoverage.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/plugins/test_xcode.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/runners/test_dan_runner.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/runners/test_pytest_standard_runner.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/runners/test_runners.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/runners/test_types.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/commit/test_base_picking.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/upload/test_coverage_file_finder.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/services/upload/test_upload_collector.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/test_codecov_cli.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/test_helpers.py +0 -0
- {codecov_cli-11.2.7 → codecov_cli-11.3.0}/tests/test_types.py +0 -0
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codecov-cli
|
|
3
|
-
Version: 11.
|
|
3
|
+
Version: 11.3.0
|
|
4
4
|
Summary: Codecov Command Line Interface
|
|
5
5
|
Author-email: Tom Hu <thomas.hu@sentry.io>
|
|
6
6
|
Maintainer-email: Codecov Support <support@codecov.io>
|
|
7
7
|
Project-URL: Homepage, https://about.codecov.io
|
|
8
|
-
Project-URL: CI: GitHub, https://github.com/
|
|
8
|
+
Project-URL: CI: GitHub, https://github.com/codecov/codecov-cli/actions/workflows/ci.yml
|
|
9
9
|
Project-URL: Docs, https://docs.codecov.com
|
|
10
|
-
Project-URL: GitHub: issues, https://github.com/
|
|
11
|
-
Project-URL: GitHub: repo, https://github.com/
|
|
10
|
+
Project-URL: GitHub: issues, https://github.com/codecov/codecov-cli/issues
|
|
11
|
+
Project-URL: GitHub: repo, https://github.com/codecov/codecov-cli
|
|
12
12
|
Requires-Python: >=3.9
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
15
15
|
Requires-Dist: click<8.3.0,>=8.0.0
|
|
16
16
|
Requires-Dist: ijson==3.*
|
|
17
17
|
Requires-Dist: PyYAML==6.*
|
|
18
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: requests>=2.25.0
|
|
19
19
|
Requires-Dist: sentry-sdk==2.*
|
|
20
20
|
Requires-Dist: test-results-parser==0.6.1
|
|
21
21
|
Dynamic: license-file
|
|
22
22
|
|
|
23
23
|
# CodecovCLI
|
|
24
24
|
|
|
25
|
-
[](https://codecov.io/github/codecov/codecov-cli)
|
|
26
|
+
[](https://github.com/codecov/codecov-cli/actions/workflows/ci.yml)
|
|
27
27
|
|
|
28
28
|
CodecovCLI is a new way for users to interact with Codecov directly from the user’s terminal or CI platform. Many Codecov features that require the user’s interference can be done via the codecovCLI. It saves commits, creates reports, uploads coverage and has many more features.
|
|
29
29
|
|
|
@@ -63,7 +63,7 @@ The above command will download the latest version of Codecov-cli. If you wish t
|
|
|
63
63
|
Note: If you're installing in a `pyenv` environment, you may need to call `pyenv rehash` before the CLI will work.
|
|
64
64
|
|
|
65
65
|
## As a Binary
|
|
66
|
-
If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/
|
|
66
|
+
If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/codecov/codecov-cli/releases) on this repository.
|
|
67
67
|
|
|
68
68
|
You can retrieve the Binary for Linux directly from your command line as follows:
|
|
69
69
|
|
|
@@ -78,7 +78,7 @@ sudo chmod +x codecov
|
|
|
78
78
|
The binary can be integrity checked using a SHASUM256 and SHASUM256.sig file. The process for macos and Linux is identical. Linux is as follows:
|
|
79
79
|
|
|
80
80
|
```
|
|
81
|
-
curl https://keybase.io/
|
|
81
|
+
curl https://keybase.io/codecovsecops/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step
|
|
82
82
|
curl -Os https://cli.codecov.io/latest/linux/codecov
|
|
83
83
|
curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM
|
|
84
84
|
curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig
|
|
@@ -121,7 +121,7 @@ The following tokens are suitable for uploading:
|
|
|
121
121
|
If the installation is successful, running `codecovcli --help` will output the available commands along with the different general options that can be used with them.
|
|
122
122
|
|
|
123
123
|
> [!IMPORTANT]
|
|
124
|
-
> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/
|
|
124
|
+
> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/codecov/codecov-cli/blob/main/codecovcli_commands)
|
|
125
125
|
|
|
126
126
|
```
|
|
127
127
|
Usage: codecovcli [OPTIONS] COMMAND [ARGS]...
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# CodecovCLI
|
|
2
2
|
|
|
3
|
-
[](https://codecov.io/github/codecov/codecov-cli)
|
|
4
|
+
[](https://github.com/codecov/codecov-cli/actions/workflows/ci.yml)
|
|
5
5
|
|
|
6
6
|
CodecovCLI is a new way for users to interact with Codecov directly from the user’s terminal or CI platform. Many Codecov features that require the user’s interference can be done via the codecovCLI. It saves commits, creates reports, uploads coverage and has many more features.
|
|
7
7
|
|
|
@@ -41,7 +41,7 @@ The above command will download the latest version of Codecov-cli. If you wish t
|
|
|
41
41
|
Note: If you're installing in a `pyenv` environment, you may need to call `pyenv rehash` before the CLI will work.
|
|
42
42
|
|
|
43
43
|
## As a Binary
|
|
44
|
-
If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/
|
|
44
|
+
If you would like to use the CLI in an environment that does not have access to Python / PIP, you can install the CLI as a compiled binary. Linux and macOS releases can be found [here](https://cli.codecov.io/), along with SHASUMs and signatures for each released version. Binary releases are also available via [Github releases](https://github.com/codecov/codecov-cli/releases) on this repository.
|
|
45
45
|
|
|
46
46
|
You can retrieve the Binary for Linux directly from your command line as follows:
|
|
47
47
|
|
|
@@ -56,7 +56,7 @@ sudo chmod +x codecov
|
|
|
56
56
|
The binary can be integrity checked using a SHASUM256 and SHASUM256.sig file. The process for macos and Linux is identical. Linux is as follows:
|
|
57
57
|
|
|
58
58
|
```
|
|
59
|
-
curl https://keybase.io/
|
|
59
|
+
curl https://keybase.io/codecovsecops/pgp_keys.asc | gpg --no-default-keyring --keyring trustedkeys.gpg --import # One-time step
|
|
60
60
|
curl -Os https://cli.codecov.io/latest/linux/codecov
|
|
61
61
|
curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM
|
|
62
62
|
curl -Os https://cli.codecov.io/latest/linux/codecov.SHA256SUM.sig
|
|
@@ -99,7 +99,7 @@ The following tokens are suitable for uploading:
|
|
|
99
99
|
If the installation is successful, running `codecovcli --help` will output the available commands along with the different general options that can be used with them.
|
|
100
100
|
|
|
101
101
|
> [!IMPORTANT]
|
|
102
|
-
> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/
|
|
102
|
+
> For up-to-date command usage, please check the `codecovcli_commands` [file](https://github.com/codecov/codecov-cli/blob/main/codecovcli_commands)
|
|
103
103
|
|
|
104
104
|
```
|
|
105
105
|
Usage: codecovcli [OPTIONS] COMMAND [ARGS]...
|
|
@@ -111,7 +111,10 @@ _global_upload_options = [
|
|
|
111
111
|
"--name",
|
|
112
112
|
help="Custom defined name of the upload. Visible in Codecov UI",
|
|
113
113
|
cls=CodecovOption,
|
|
114
|
-
|
|
114
|
+
fallback_fields=(
|
|
115
|
+
FallbackFieldEnum.job_name,
|
|
116
|
+
FallbackFieldEnum.build_code,
|
|
117
|
+
),
|
|
115
118
|
),
|
|
116
119
|
click.option(
|
|
117
120
|
"-B",
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import typing
|
|
2
|
+
from enum import Enum, auto
|
|
3
|
+
|
|
4
|
+
import click
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class FallbackFieldEnum(Enum):
|
|
8
|
+
branch = auto()
|
|
9
|
+
build_code = auto()
|
|
10
|
+
build_url = auto()
|
|
11
|
+
commit_sha = auto()
|
|
12
|
+
git_service = auto()
|
|
13
|
+
job_code = auto()
|
|
14
|
+
pull_request_number = auto()
|
|
15
|
+
service = auto()
|
|
16
|
+
slug = auto()
|
|
17
|
+
job_name = auto()
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
_FIELDS_WITH_VERSIONING_FALLBACK = frozenset(
|
|
21
|
+
{
|
|
22
|
+
FallbackFieldEnum.branch,
|
|
23
|
+
FallbackFieldEnum.commit_sha,
|
|
24
|
+
FallbackFieldEnum.slug,
|
|
25
|
+
FallbackFieldEnum.git_service,
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class CodecovOption(click.Option):
|
|
31
|
+
fallback_fields: typing.Optional[tuple[FallbackFieldEnum, ...]]
|
|
32
|
+
|
|
33
|
+
def __init__(self, *args, **kwargs):
|
|
34
|
+
fallback_fields = kwargs.pop("fallback_fields", None)
|
|
35
|
+
fallback_field = kwargs.pop("fallback_field", None)
|
|
36
|
+
if fallback_fields is not None:
|
|
37
|
+
self.fallback_fields = tuple(fallback_fields)
|
|
38
|
+
elif fallback_field is not None:
|
|
39
|
+
self.fallback_fields = (fallback_field,)
|
|
40
|
+
else:
|
|
41
|
+
self.fallback_fields = None
|
|
42
|
+
super().__init__(*args, **kwargs)
|
|
43
|
+
|
|
44
|
+
def get_default(
|
|
45
|
+
self, ctx: click.Context, call: bool = True
|
|
46
|
+
) -> typing.Optional[typing.Union[typing.Any, typing.Callable[[], typing.Any]]]:
|
|
47
|
+
res = super().get_default(ctx, call=call)
|
|
48
|
+
if res is not None:
|
|
49
|
+
return res
|
|
50
|
+
if self.fallback_fields is not None:
|
|
51
|
+
for field in self.fallback_fields:
|
|
52
|
+
if ctx.obj.get("ci_adapter") is not None:
|
|
53
|
+
res = ctx.obj.get("ci_adapter").get_fallback_value(field)
|
|
54
|
+
if res is not None:
|
|
55
|
+
return res
|
|
56
|
+
if (
|
|
57
|
+
ctx.obj.get("versioning_system") is not None
|
|
58
|
+
and field in _FIELDS_WITH_VERSIONING_FALLBACK
|
|
59
|
+
):
|
|
60
|
+
res = ctx.obj.get("versioning_system").get_fallback_value(field)
|
|
61
|
+
if res is not None:
|
|
62
|
+
return res
|
|
63
|
+
return None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class BrandedOption(click.Option):
|
|
67
|
+
def resolve_envvar_value(self, ctx: click.Context) -> typing.Optional[str]:
|
|
68
|
+
actual_var = self.envvar
|
|
69
|
+
self.envvar = [
|
|
70
|
+
f"{brand.value.upper()}_{actual_var}" for brand in ctx.obj["branding"]
|
|
71
|
+
]
|
|
72
|
+
res = super().resolve_envvar_value(ctx)
|
|
73
|
+
self.envvar = actual_var
|
|
74
|
+
return res
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
class BrandedCodecovOption(CodecovOption, BrandedOption):
|
|
78
|
+
pass
|
|
@@ -5,6 +5,7 @@ from pathlib import PosixPath
|
|
|
5
5
|
import click
|
|
6
6
|
|
|
7
7
|
from codecov_cli import __version__
|
|
8
|
+
from codecov_cli.opentelemetry import set_cli_tags
|
|
8
9
|
|
|
9
10
|
logger = logging.getLogger("codecovcli")
|
|
10
11
|
|
|
@@ -28,4 +29,6 @@ def get_cli_args(ctx: click.Context):
|
|
|
28
29
|
except Exception:
|
|
29
30
|
continue
|
|
30
31
|
|
|
32
|
+
set_cli_tags(filtered_args, ctx)
|
|
33
|
+
|
|
31
34
|
return filtered_args
|
|
@@ -14,6 +14,7 @@ from codecov_cli.helpers.ci_adapters.codebuild import AWSCodeBuildCIAdapter
|
|
|
14
14
|
from codecov_cli.helpers.ci_adapters.droneci import DroneCIAdapter
|
|
15
15
|
from codecov_cli.helpers.ci_adapters.github_actions import GithubActionsCIAdapter
|
|
16
16
|
from codecov_cli.helpers.ci_adapters.gitlab_ci import GitlabCIAdapter
|
|
17
|
+
from codecov_cli.helpers.ci_adapters.harness import HarnessAdapter
|
|
17
18
|
from codecov_cli.helpers.ci_adapters.heroku import HerokuCIAdapter
|
|
18
19
|
from codecov_cli.helpers.ci_adapters.jenkins import JenkinsAdapter
|
|
19
20
|
from codecov_cli.helpers.ci_adapters.local import LocalAdapter
|
|
@@ -48,6 +49,7 @@ def get_ci_providers_list():
|
|
|
48
49
|
BitriseCIAdapter(),
|
|
49
50
|
AppveyorCIAdapter(),
|
|
50
51
|
WoodpeckerCIAdapter(),
|
|
52
|
+
HarnessAdapter(),
|
|
51
53
|
HerokuCIAdapter(),
|
|
52
54
|
DroneCIAdapter(),
|
|
53
55
|
BuildkiteAdapter(),
|
|
@@ -17,6 +17,7 @@ class CIAdapterBase(ABC):
|
|
|
17
17
|
FallbackFieldEnum.pull_request_number: self._get_pull_request_number,
|
|
18
18
|
FallbackFieldEnum.job_code: self._get_job_code,
|
|
19
19
|
FallbackFieldEnum.git_service: self._get_git_service,
|
|
20
|
+
FallbackFieldEnum.job_name: self._get_job_name,
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
def get_fallback_value(
|
|
@@ -100,3 +101,10 @@ class CIAdapterBase(ABC):
|
|
|
100
101
|
|
|
101
102
|
def _get_git_service(self):
|
|
102
103
|
return None
|
|
104
|
+
|
|
105
|
+
def _get_job_name(self):
|
|
106
|
+
"""
|
|
107
|
+
Name of the job that gets displayed in the Codecov UI
|
|
108
|
+
Returns: string
|
|
109
|
+
"""
|
|
110
|
+
return None
|
|
@@ -87,3 +87,10 @@ class GithubActionsCIAdapter(CIAdapterBase):
|
|
|
87
87
|
|
|
88
88
|
def get_service_name(self):
|
|
89
89
|
return "GithubActions"
|
|
90
|
+
|
|
91
|
+
def _get_job_name(self):
|
|
92
|
+
github_workflow = os.getenv("GITHUB_WORKFLOW")
|
|
93
|
+
github_job = os.getenv("GITHUB_JOB")
|
|
94
|
+
if github_workflow and github_job:
|
|
95
|
+
return f"{github_workflow} - {github_job}"
|
|
96
|
+
return github_workflow or github_job or None
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from codecov_cli.helpers.ci_adapters.base import CIAdapterBase
|
|
4
|
+
from codecov_cli.helpers.git import parse_slug
|
|
5
|
+
|
|
6
|
+
# https://developer.harness.io/docs/continuous-integration/troubleshoot-ci/ci-env-var/
|
|
7
|
+
|
|
8
|
+
# Uses CI_ prefixed environment variables variant if available and DRONE_ prefixed environment variables variant if not
|
|
9
|
+
# The DRONE variables overlap with the Drone CI Adapter as Harness CI is built on top
|
|
10
|
+
class HarnessAdapter(CIAdapterBase):
|
|
11
|
+
def detect(self) -> bool:
|
|
12
|
+
return bool(os.getenv("HARNESS_BUILD_ID"))
|
|
13
|
+
|
|
14
|
+
def _get_branch(self):
|
|
15
|
+
return os.getenv("DRONE_COMMIT_BRANCH")
|
|
16
|
+
|
|
17
|
+
def _get_commit_sha(self):
|
|
18
|
+
return os.getenv("DRONE_COMMIT_SHA")
|
|
19
|
+
|
|
20
|
+
def _get_pull_request_number(self):
|
|
21
|
+
return os.getenv("DRONE_PULL_REQUEST")
|
|
22
|
+
|
|
23
|
+
def _get_job_code(self):
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
def _get_build_code(self):
|
|
27
|
+
return os.getenv("CI_BUILD_NUMBER")
|
|
28
|
+
|
|
29
|
+
def _get_build_url(self):
|
|
30
|
+
return os.getenv("CI_BUILD_LINK")
|
|
31
|
+
|
|
32
|
+
def _get_slug(self):
|
|
33
|
+
ci_repo = os.getenv("CI_REPO")
|
|
34
|
+
if ci_repo and "/" in ci_repo:
|
|
35
|
+
return ci_repo
|
|
36
|
+
for env_var in (
|
|
37
|
+
"CI_REPO_REMOTE",
|
|
38
|
+
"CI_REMOTE_URL",
|
|
39
|
+
"CI_REPO_LINK",
|
|
40
|
+
"DRONE_GIT_HTTP_URL",
|
|
41
|
+
"DRONE_REMOTE_URL",
|
|
42
|
+
):
|
|
43
|
+
if url := os.getenv(env_var):
|
|
44
|
+
if slug := parse_slug(url):
|
|
45
|
+
return slug
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
def _get_service(self):
|
|
49
|
+
return "harness"
|
|
50
|
+
|
|
51
|
+
def get_service_name(self):
|
|
52
|
+
return "Harness"
|
|
@@ -152,7 +152,7 @@ def log_warnings_and_errors_if_any(
|
|
|
152
152
|
sending_result: RequestResult, process_desc: str, fail_on_error: bool = False
|
|
153
153
|
):
|
|
154
154
|
logger.info(
|
|
155
|
-
f"
|
|
155
|
+
f"{process_desc} complete",
|
|
156
156
|
)
|
|
157
157
|
logger.debug(
|
|
158
158
|
f"{process_desc} result",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import click
|
|
2
|
+
|
|
3
|
+
from codecov_cli.helpers.git import GitService
|
|
4
|
+
|
|
5
|
+
# The set of acceptable upload services from Shelter
|
|
6
|
+
_CODECOV_UPLOAD_SERVICES = frozenset(s.value for s in GitService) | {"github-actions"}
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def validate_upload_service(
|
|
10
|
+
service: str,
|
|
11
|
+
) -> None:
|
|
12
|
+
allowed = ", ".join(sorted(_CODECOV_UPLOAD_SERVICES))
|
|
13
|
+
if not service:
|
|
14
|
+
raise click.ClickException(
|
|
15
|
+
"Upload service is missing (Codecov requires it for upload URLs). "
|
|
16
|
+
f"Pass --git-service with one of: {allowed}"
|
|
17
|
+
)
|
|
18
|
+
if service not in _CODECOV_UPLOAD_SERVICES:
|
|
19
|
+
raise click.ClickException(
|
|
20
|
+
f"Invalid upload service {service!r}. Use one of: {allowed}"
|
|
21
|
+
)
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import random
|
|
3
|
+
|
|
4
|
+
import sentry_sdk
|
|
5
|
+
|
|
6
|
+
from codecov_cli import __version__
|
|
7
|
+
|
|
8
|
+
_SAMPLED_MESSAGES = [
|
|
9
|
+
"Token required",
|
|
10
|
+
"No JUnit XML reports found",
|
|
11
|
+
]
|
|
12
|
+
_SAMPLE_RATE = 100
|
|
13
|
+
_SKIP_TAG_KEYS = {"branch", "flags", "commit_sha", "env_vars"}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def _before_send(event, hint):
|
|
17
|
+
messages = []
|
|
18
|
+
if "message" in event and event.get("message") is not None:
|
|
19
|
+
messages.append(event.get("message"))
|
|
20
|
+
if "logentry" in event and "message" in event.get("logentry", {}) and event.get("logentry", {}).get("message") is not None:
|
|
21
|
+
messages.append(event.get("logentry", {}).get("message"))
|
|
22
|
+
if "exception" in event and event.get("exception") is not None:
|
|
23
|
+
for exc in event.get("exception", {}).get("values", []):
|
|
24
|
+
if "value" in exc:
|
|
25
|
+
messages.append(exc.get("value"))
|
|
26
|
+
|
|
27
|
+
matched = False
|
|
28
|
+
for message in messages:
|
|
29
|
+
for pattern in _SAMPLED_MESSAGES:
|
|
30
|
+
if pattern in message:
|
|
31
|
+
matched = True
|
|
32
|
+
break
|
|
33
|
+
|
|
34
|
+
if matched and random.randint(1, _SAMPLE_RATE) != 1:
|
|
35
|
+
return None
|
|
36
|
+
return event
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def init_telem(ctx):
|
|
40
|
+
if ctx["disable_telem"]:
|
|
41
|
+
return
|
|
42
|
+
if ctx["enterprise_url"]: # dont run on dedicated cloud
|
|
43
|
+
return
|
|
44
|
+
if os.getenv("CODECOV_ENV", "production") == "test":
|
|
45
|
+
return
|
|
46
|
+
|
|
47
|
+
sentry_sdk.init(
|
|
48
|
+
dsn="https://0bea75c61745c221a6ef1ac1709b1f4d@o26192.ingest.us.sentry.io/4508615876083713",
|
|
49
|
+
enable_tracing=True,
|
|
50
|
+
environment=os.getenv("CODECOV_ENV", "production"),
|
|
51
|
+
release=f"cli@{__version__}",
|
|
52
|
+
before_send=_before_send,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def set_cli_tags(args: dict, ctx):
|
|
57
|
+
"""Set Sentry tags from resolved CLI arguments."""
|
|
58
|
+
for key, value in args.items():
|
|
59
|
+
if key in _SKIP_TAG_KEYS:
|
|
60
|
+
continue
|
|
61
|
+
if value is None or value in ([], (), {}):
|
|
62
|
+
continue
|
|
63
|
+
if isinstance(value, (list, tuple)):
|
|
64
|
+
value = ",".join(str(v) for v in value)
|
|
65
|
+
elif isinstance(value, dict):
|
|
66
|
+
value = ",".join(
|
|
67
|
+
f"{k}={v}" for k, v in value.items() if v is not None
|
|
68
|
+
)
|
|
69
|
+
sentry_sdk.set_tag(f"cli.{key}", str(value)[:200])
|
|
70
|
+
|
|
71
|
+
token = ctx.params.get("token") if hasattr(ctx, "params") else None
|
|
72
|
+
sentry_sdk.set_tag("cli.token_provided", str(bool(token)).lower())
|
|
73
|
+
|
|
74
|
+
ci_adapter = (
|
|
75
|
+
ctx.obj.get("ci_adapter") if hasattr(ctx, "obj") and ctx.obj else None
|
|
76
|
+
)
|
|
77
|
+
if ci_adapter is not None:
|
|
78
|
+
try:
|
|
79
|
+
sentry_sdk.set_tag("cli.ci_adapter", ci_adapter.get_service_name())
|
|
80
|
+
except Exception:
|
|
81
|
+
pass
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def close_telem():
|
|
85
|
+
sentry_sdk.flush()
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
import os
|
|
3
3
|
import typing
|
|
4
4
|
|
|
5
|
+
from codecov_cli import __version__ as codecov_cli_version
|
|
5
6
|
from codecov_cli.helpers.config import CODECOV_INGEST_URL
|
|
6
7
|
from codecov_cli.helpers.encoder import encode_slug
|
|
7
8
|
from codecov_cli.helpers.request import (
|
|
@@ -9,10 +10,10 @@ from codecov_cli.helpers.request import (
|
|
|
9
10
|
log_warnings_and_errors_if_any,
|
|
10
11
|
send_post_request,
|
|
11
12
|
)
|
|
13
|
+
from codecov_cli.helpers.upload_url_validation import validate_upload_service
|
|
12
14
|
|
|
13
15
|
logger = logging.getLogger("codecovcli")
|
|
14
16
|
|
|
15
|
-
|
|
16
17
|
def create_commit_logic(
|
|
17
18
|
commit_sha: str,
|
|
18
19
|
parent_sha: typing.Optional[str],
|
|
@@ -75,10 +76,13 @@ def send_commit_data(
|
|
|
75
76
|
"commitid": commit_sha,
|
|
76
77
|
"parent_commit_id": parent_sha,
|
|
77
78
|
"pullid": pr,
|
|
79
|
+
"version": codecov_cli_version,
|
|
78
80
|
}
|
|
79
81
|
|
|
80
82
|
upload_url = enterprise_url or CODECOV_INGEST_URL
|
|
81
|
-
|
|
83
|
+
service_part = (service or "").strip()
|
|
84
|
+
validate_upload_service(service_part)
|
|
85
|
+
url = f"{upload_url}/upload/{service_part}/{slug}/commits"
|
|
82
86
|
return send_post_request(
|
|
83
87
|
url=url,
|
|
84
88
|
data=data,
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
|
+
from codecov_cli import __version__ as codecov_cli_version
|
|
4
5
|
from codecov_cli.helpers.config import CODECOV_API_URL
|
|
5
6
|
from codecov_cli.helpers.encoder import encode_slug
|
|
7
|
+
from codecov_cli.helpers.upload_url_validation import validate_upload_service
|
|
8
|
+
|
|
6
9
|
from codecov_cli.helpers.request import (
|
|
7
10
|
get_token_header,
|
|
8
11
|
log_warnings_and_errors_if_any,
|
|
@@ -25,13 +28,16 @@ def empty_upload_logic(
|
|
|
25
28
|
encoded_slug = encode_slug(slug)
|
|
26
29
|
headers = get_token_header(token)
|
|
27
30
|
upload_url = enterprise_url or CODECOV_API_URL
|
|
28
|
-
|
|
31
|
+
service_part = (git_service or "").strip()
|
|
32
|
+
validate_upload_service(service_part)
|
|
33
|
+
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/empty-upload"
|
|
29
34
|
sending_result = send_post_request(
|
|
30
35
|
url=url,
|
|
31
36
|
headers=headers,
|
|
32
37
|
data={
|
|
33
38
|
"cli_args": args,
|
|
34
39
|
"should_force": should_force,
|
|
40
|
+
"version": codecov_cli_version,
|
|
35
41
|
},
|
|
36
42
|
)
|
|
37
43
|
log_warnings_and_errors_if_any(sending_result, "Empty Upload", fail_on_error)
|
|
@@ -3,8 +3,7 @@ import logging
|
|
|
3
3
|
import time
|
|
4
4
|
import typing
|
|
5
5
|
|
|
6
|
-
import
|
|
7
|
-
|
|
6
|
+
from codecov_cli import __version__ as codecov_cli_version
|
|
8
7
|
from codecov_cli.helpers import request
|
|
9
8
|
from codecov_cli.helpers.config import CODECOV_API_URL, CODECOV_INGEST_URL
|
|
10
9
|
from codecov_cli.helpers.encoder import encode_slug
|
|
@@ -14,6 +13,7 @@ from codecov_cli.helpers.request import (
|
|
|
14
13
|
request_result,
|
|
15
14
|
send_post_request,
|
|
16
15
|
)
|
|
16
|
+
from codecov_cli.helpers.upload_url_validation import validate_upload_service
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger("codecovcli")
|
|
19
19
|
MAX_NUMBER_TRIES = 3
|
|
@@ -58,10 +58,13 @@ def send_create_report_request(
|
|
|
58
58
|
data = {
|
|
59
59
|
"cli_args": args,
|
|
60
60
|
"code": code,
|
|
61
|
+
"version": codecov_cli_version,
|
|
61
62
|
}
|
|
62
63
|
headers = get_token_header(token)
|
|
63
64
|
upload_url = enterprise_url or CODECOV_INGEST_URL
|
|
64
|
-
|
|
65
|
+
service_part = (service or "").strip()
|
|
66
|
+
validate_upload_service(service_part)
|
|
67
|
+
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/reports"
|
|
65
68
|
return send_post_request(url=url, headers=headers, data=data)
|
|
66
69
|
|
|
67
70
|
|
|
@@ -103,10 +106,13 @@ def send_reports_result_request(
|
|
|
103
106
|
):
|
|
104
107
|
data = {
|
|
105
108
|
"cli_args": args,
|
|
109
|
+
"version": codecov_cli_version,
|
|
106
110
|
}
|
|
107
111
|
headers = get_token_header(token)
|
|
108
112
|
upload_url = enterprise_url or CODECOV_API_URL
|
|
109
|
-
|
|
113
|
+
service_part = (service or "").strip()
|
|
114
|
+
validate_upload_service(service_part)
|
|
115
|
+
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/reports/{report_code}/results"
|
|
110
116
|
return send_post_request(url=url, data=data, headers=headers)
|
|
111
117
|
|
|
112
118
|
|
|
@@ -121,7 +127,9 @@ def send_reports_result_get_request(
|
|
|
121
127
|
):
|
|
122
128
|
headers = get_token_header(token)
|
|
123
129
|
upload_url = enterprise_url or CODECOV_API_URL
|
|
124
|
-
|
|
130
|
+
service_part = (service or "").strip()
|
|
131
|
+
validate_upload_service(service_part)
|
|
132
|
+
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/reports/{report_code}/results"
|
|
125
133
|
number_tries = 0
|
|
126
134
|
while number_tries < MAX_NUMBER_TRIES:
|
|
127
135
|
resp = request.get(url=url, headers=headers)
|
|
@@ -165,5 +165,5 @@ def do_upload_logic(
|
|
|
165
165
|
status_code=200,
|
|
166
166
|
text="Data NOT sent to Codecov because of dry-run option",
|
|
167
167
|
)
|
|
168
|
-
log_warnings_and_errors_if_any(sending_result, "Upload", fail_on_error)
|
|
168
|
+
log_warnings_and_errors_if_any(sending_result, "Upload queued for processing", fail_on_error)
|
|
169
169
|
return sending_result
|
|
@@ -2,7 +2,6 @@ import base64
|
|
|
2
2
|
import json
|
|
3
3
|
import logging
|
|
4
4
|
import typing
|
|
5
|
-
import sys
|
|
6
5
|
import zlib
|
|
7
6
|
from typing import Any, Dict
|
|
8
7
|
|
|
@@ -12,6 +11,7 @@ from codecov_cli import __version__ as codecov_cli_version
|
|
|
12
11
|
from codecov_cli.helpers.config import CODECOV_INGEST_URL
|
|
13
12
|
from codecov_cli.helpers.encoder import encode_slug
|
|
14
13
|
from codecov_cli.helpers.upload_type import ReportType
|
|
14
|
+
from codecov_cli.helpers.upload_url_validation import validate_upload_service
|
|
15
15
|
from codecov_cli.helpers.request import (
|
|
16
16
|
get_token_header,
|
|
17
17
|
send_post_request,
|
|
@@ -92,11 +92,14 @@ class UploadSender(object):
|
|
|
92
92
|
commit_sha,
|
|
93
93
|
report_code,
|
|
94
94
|
upload_coverage,
|
|
95
|
+
file_not_found=file_not_found,
|
|
95
96
|
)
|
|
96
97
|
# Data that goes to storage
|
|
97
98
|
reports_payload = self._generate_payload(
|
|
98
99
|
upload_data, env_vars, report_type
|
|
99
100
|
)
|
|
101
|
+
reports_payload_size = len(reports_payload)
|
|
102
|
+
data["report_payload_bytes"] = reports_payload_size
|
|
100
103
|
|
|
101
104
|
with sentry_sdk.start_span(name="upload_sender_storage_request"):
|
|
102
105
|
logger.debug("Sending upload request to Codecov")
|
|
@@ -117,7 +120,7 @@ class UploadSender(object):
|
|
|
117
120
|
resp_json_obj = json.loads(resp_from_codecov.text)
|
|
118
121
|
if resp_json_obj.get("url"):
|
|
119
122
|
logger.info(
|
|
120
|
-
f"Your upload is now processing. When finished, results will be available at: {resp_json_obj.get('url')}"
|
|
123
|
+
f"Your upload is now queued for processing. When finished, results will be available at: {resp_json_obj.get('url')}"
|
|
121
124
|
)
|
|
122
125
|
logger.debug(
|
|
123
126
|
"Upload request to Codecov complete.",
|
|
@@ -126,9 +129,8 @@ class UploadSender(object):
|
|
|
126
129
|
put_url = resp_json_obj["raw_upload_location"]
|
|
127
130
|
|
|
128
131
|
with sentry_sdk.start_span(name="upload_sender_storage") as storage_span:
|
|
129
|
-
payload_size
|
|
130
|
-
|
|
131
|
-
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")
|
|
132
134
|
resp_from_storage = send_put_request(put_url, data=reports_payload)
|
|
133
135
|
|
|
134
136
|
return resp_from_storage
|
|
@@ -218,8 +220,11 @@ class UploadSender(object):
|
|
|
218
220
|
upload_coverage=False,
|
|
219
221
|
file_not_found=False,
|
|
220
222
|
):
|
|
223
|
+
service_part = (git_service or "").strip()
|
|
224
|
+
|
|
221
225
|
if report_type == ReportType.COVERAGE:
|
|
222
|
-
|
|
226
|
+
validate_upload_service(service_part)
|
|
227
|
+
base_url = f"{upload_url}/upload/{service_part}/{encoded_slug}"
|
|
223
228
|
if upload_coverage:
|
|
224
229
|
url = f"{base_url}/upload-coverage"
|
|
225
230
|
else:
|
|
@@ -228,7 +233,7 @@ class UploadSender(object):
|
|
|
228
233
|
data["slug"] = encoded_slug
|
|
229
234
|
data["branch"] = branch
|
|
230
235
|
data["commit"] = commit_sha
|
|
231
|
-
data["service"] =
|
|
236
|
+
data["service"] = service_part if service_part else None
|
|
232
237
|
data["file_not_found"] = file_not_found
|
|
233
238
|
url = f"{upload_url}/upload/test_results/v1"
|
|
234
239
|
|
{codecov_cli-11.2.7 → codecov_cli-11.3.0}/codecov_cli/services/upload_completion/__init__.py
RENAMED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
3
|
|
|
4
|
+
from codecov_cli import __version__ as codecov_cli_version
|
|
4
5
|
from codecov_cli.helpers.config import CODECOV_API_URL
|
|
5
6
|
from codecov_cli.helpers.encoder import encode_slug
|
|
7
|
+
from codecov_cli.helpers.upload_url_validation import validate_upload_service
|
|
6
8
|
from codecov_cli.helpers.request import (
|
|
7
9
|
get_token_header,
|
|
8
10
|
log_warnings_and_errors_if_any,
|
|
@@ -24,9 +26,12 @@ def upload_completion_logic(
|
|
|
24
26
|
encoded_slug = encode_slug(slug)
|
|
25
27
|
headers = get_token_header(token)
|
|
26
28
|
upload_url = enterprise_url or CODECOV_API_URL
|
|
27
|
-
|
|
29
|
+
service_part = (git_service or "").strip()
|
|
30
|
+
validate_upload_service(service_part)
|
|
31
|
+
url = f"{upload_url}/upload/{service_part}/{encoded_slug}/commits/{commit_sha}/upload-complete"
|
|
28
32
|
data = {
|
|
29
33
|
"cli_args": args,
|
|
34
|
+
"version": codecov_cli_version,
|
|
30
35
|
}
|
|
31
36
|
sending_result = send_post_request(url=url, data=data, headers=headers)
|
|
32
37
|
log_warnings_and_errors_if_any(
|