Skip to content
This repository was archived by the owner on Jul 16, 2025. It is now read-only.

Commit 3a3488a

Browse files
committed
Merge branch 'master' into dana/base-picking-command
2 parents be7a0b3 + ab55ea3 commit 3a3488a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+2922
-656
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,8 @@ jobs:
4848
pytest --cov
4949
- name: Dogfooding codecov-cli. Use codecov-cli to upload to codecov
5050
run: |
51-
codecovcli --auto-load-params-from githubactions do-upload -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag cli3.10
52-
- name: Upload to codecov
53-
run: |
54-
pip install codecov
55-
codecov -t ${{ secrets.CODECOV_TOKEN }} -F python3.10
51+
codecovcli do-upload -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag cli3.10
52+
5653
5754
5855
create_release:

.github/workflows/python-package.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,10 +50,10 @@ jobs:
5050
pytest --cov
5151
- name: Dogfooding codecov-cli. Use codecov-cli to upload to codecov
5252
run: |
53-
codecovcli --auto-load-params-from githubactions do-upload -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag cli3.10
54-
- name: Upload to codecov
55-
run: |
56-
pip install codecov
57-
codecov -t ${{ secrets.CODECOV_TOKEN }} -F python3.10
53+
codecovcli do-upload -t ${{ secrets.CODECOV_TOKEN }} --plugin pycoverage --flag cli3.10 --flag python3.10
54+
# - name: Upload to codecov
55+
# run: |
56+
# pip install codecov
57+
# codecov -t ${{ secrets.CODECOV_TOKEN }} -F python3.10
5858

5959

codecov_cli/commands/report_result.py renamed to codecov_cli/commands/create_report_result.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import click
55

66
from codecov_cli.fallbacks import CodecovOption, FallbackFieldEnum
7-
from codecov_cli.services.report import get_report_results_logic
7+
from codecov_cli.services.report import create_report_results_logic
88

99
logger = logging.getLogger("codecovcli")
1010

@@ -42,7 +42,7 @@
4242
envvar="CODECOV_TOKEN",
4343
)
4444
@click.pass_context
45-
def get_report_results(
45+
def create_report_results(
4646
ctx,
4747
commit_sha: str,
4848
code: str,
@@ -51,11 +51,11 @@ def get_report_results(
5151
token: uuid.UUID,
5252
):
5353
logger.debug(
54-
"Getting report results",
54+
"Creating report results",
5555
extra=dict(
5656
extra_log_attributes=dict(
5757
commit_sha=commit_sha, code=code, slug=slug, service=service
5858
)
5959
),
6060
)
61-
get_report_results_logic(commit_sha, code, slug, service, token)
61+
create_report_results_logic(commit_sha, code, slug, service, token)
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import logging
2+
import uuid
3+
4+
import click
5+
6+
from codecov_cli.fallbacks import CodecovOption, FallbackFieldEnum
7+
from codecov_cli.helpers.encoder import encode_slug
8+
from codecov_cli.services.report import send_reports_result_get_request
9+
10+
logger = logging.getLogger("codecovcli")
11+
12+
13+
@click.command()
14+
@click.option(
15+
"--commit-sha",
16+
help="Commit SHA (with 40 chars)",
17+
cls=CodecovOption,
18+
fallback_field=FallbackFieldEnum.commit_sha,
19+
required=True,
20+
)
21+
@click.option(
22+
"--code", help="The code of the report. If unsure, leave default", default="default"
23+
)
24+
@click.option(
25+
"--slug",
26+
cls=CodecovOption,
27+
fallback_field=FallbackFieldEnum.slug,
28+
help="owner/repo slug used instead of the private repo token in Self-hosted",
29+
envvar="CODECOV_SLUG",
30+
required=True,
31+
)
32+
@click.option(
33+
"--service",
34+
help="Git service provider, e.g. github",
35+
cls=CodecovOption,
36+
fallback_field=FallbackFieldEnum.service,
37+
)
38+
@click.option(
39+
"-t",
40+
"--token",
41+
help="Codecov upload token",
42+
type=click.UUID,
43+
envvar="CODECOV_TOKEN",
44+
)
45+
@click.pass_context
46+
def get_report_results(
47+
ctx,
48+
commit_sha: str,
49+
code: str,
50+
slug: str,
51+
service: str,
52+
token: uuid.UUID,
53+
):
54+
logger.debug(
55+
"Getting report results",
56+
extra=dict(
57+
extra_log_attributes=dict(
58+
commit_sha=commit_sha, code=code, slug=slug, service=service
59+
)
60+
),
61+
)
62+
encoded_slug = encode_slug(slug)
63+
send_reports_result_get_request(
64+
commit_sha=commit_sha,
65+
report_code=code,
66+
encoded_slug=encoded_slug,
67+
service=service,
68+
token=token,
69+
)

codecov_cli/commands/report.py

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import uuid
23

34
import click
45

@@ -27,16 +28,34 @@
2728
envvar="CODECOV_SLUG",
2829
required=True,
2930
)
31+
@click.option(
32+
"--service",
33+
help="Git service provider, e.g. github",
34+
cls=CodecovOption,
35+
fallback_field=FallbackFieldEnum.service,
36+
)
37+
@click.option(
38+
"-t",
39+
"--token",
40+
help="Codecov upload token",
41+
type=click.UUID,
42+
envvar="CODECOV_TOKEN",
43+
)
3044
@click.pass_context
31-
def create_report(ctx, commit_sha: str, code: str, slug: str):
45+
def create_report(
46+
ctx, commit_sha: str, code: str, slug: str, service: str, token: uuid.UUID
47+
):
3248
logger.debug(
3349
"Starting create report process",
3450
extra=dict(
3551
extra_log_attributes=dict(
36-
commit_sha=commit_sha,
37-
code=code,
38-
slug=slug,
52+
commit_sha=commit_sha, code=code, slug=slug, service=service
3953
)
4054
),
4155
)
42-
create_report_logic(commit_sha, code, slug)
56+
res = create_report_logic(commit_sha, code, slug, service, token)
57+
if not res.error:
58+
logger.info(
59+
"Finished creating report successfully",
60+
extra=dict(extra_log_attributes=dict(response=res.text)),
61+
)

codecov_cli/commands/upload.py

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ def _turn_env_vars_into_dict(ctx, params, value):
1818

1919
@click.command()
2020
@click.option(
21+
"-C",
22+
"--sha",
2123
"--commit-sha",
24+
"commit_sha",
2225
help="Commit SHA (with 40 chars)",
2326
cls=CodecovOption,
2427
fallback_field=FallbackFieldEnum.commit_sha,
@@ -37,13 +40,17 @@ def _turn_env_vars_into_dict(ctx, params, value):
3740
show_default="Current working directory",
3841
)
3942
@click.option(
43+
"-s",
44+
"--dir",
4045
"--coverage-files-search-root-folder",
46+
"coverage_files_search_root_folder",
4147
help="Folder where to search for coverage files",
4248
type=click.Path(path_type=pathlib.Path),
4349
default=pathlib.Path.cwd,
4450
show_default="Current Working Directory",
4551
)
4652
@click.option(
53+
"--exclude",
4754
"--coverage-files-search-exclude-folder",
4855
"coverage_files_search_exclude_folders",
4956
help="Folders where to search for coverage files",
@@ -52,6 +59,8 @@ def _turn_env_vars_into_dict(ctx, params, value):
5259
default=None,
5360
)
5461
@click.option(
62+
"-f",
63+
"--file",
5564
"--coverage-files-search-direct-file",
5665
"coverage_files_search_explicitly_listed_files",
5766
help="Explicit files to upload",
@@ -60,12 +69,17 @@ def _turn_env_vars_into_dict(ctx, params, value):
6069
default=None,
6170
)
6271
@click.option(
72+
"-b",
73+
"--build",
6374
"--build-code",
75+
"build_code",
6476
cls=CodecovOption,
77+
help="Specify the build number manually",
6578
fallback_field=FallbackFieldEnum.build_code,
6679
)
6780
@click.option(
6881
"--build-url",
82+
"build_url",
6983
cls=CodecovOption,
7084
help="The URL of the build where this is running",
7185
fallback_field=FallbackFieldEnum.build_url,
@@ -95,23 +109,50 @@ def _turn_env_vars_into_dict(ctx, params, value):
95109
fallback_field=FallbackFieldEnum.branch,
96110
)
97111
@click.option(
112+
"-r",
98113
"--slug",
114+
"slug",
99115
cls=CodecovOption,
100116
fallback_field=FallbackFieldEnum.slug,
101117
help="owner/repo slug used instead of the private repo token in Self-hosted",
102118
envvar="CODECOV_SLUG",
103119
)
104120
@click.option(
121+
"-P",
122+
"--pr",
105123
"--pull-request-number",
124+
"pull_request_number",
106125
help="Specify the pull request number mannually. Used to override pre-existing CI environment variables",
107126
cls=CodecovOption,
108127
fallback_field=FallbackFieldEnum.pull_request_number,
109128
)
110-
@click.option("--env-var", "env_vars", multiple=True, callback=_turn_env_vars_into_dict)
111-
@click.option("--flag", "flags", multiple=True, default=[])
129+
@click.option(
130+
"-e",
131+
"--env",
132+
"--env-var",
133+
"env_vars",
134+
multiple=True,
135+
callback=_turn_env_vars_into_dict,
136+
help="Specify environment variables to be included with this build.",
137+
)
138+
@click.option(
139+
"-F",
140+
"--flag",
141+
"flags",
142+
multiple=True,
143+
default=[],
144+
help="Flag the upload to group coverage metrics. Multiple flags allowed.",
145+
)
112146
@click.option(
113147
"--plugin", "plugin_names", multiple=True, default=["xcode", "gcov", "pycoverage"]
114148
)
149+
@click.option(
150+
"-Z",
151+
"--fail-on-error",
152+
"fail_on_error",
153+
is_flag=True,
154+
help="Exit with non-zero code in case of error uploading.",
155+
)
115156
@click.option("--use-new-uploader", "is_using_new_uploader", default=False)
116157
@click.pass_context
117158
def do_upload(
@@ -134,6 +175,7 @@ def do_upload(
134175
slug: typing.Optional[str],
135176
pull_request_number: typing.Optional[str],
136177
is_using_new_uploader: bool,
178+
fail_on_error: bool,
137179
):
138180
versioning_system = ctx.obj["versioning_system"]
139181
codecov_yaml = ctx.obj["codecov_yaml"] or {}
@@ -185,4 +227,5 @@ def do_upload(
185227
slug=slug,
186228
pull_request_number=pull_request_number,
187229
is_using_new_uploader=is_using_new_uploader,
230+
fail_on_error=fail_on_error,
188231
)
Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,55 @@
1+
import logging
2+
13
from codecov_cli.helpers.ci_adapters.appveyor_ci import AppveyorCIAdapter
4+
from codecov_cli.helpers.ci_adapters.azure_pipelines import AzurePipelinesCIAdapter
5+
from codecov_cli.helpers.ci_adapters.bitbucket_ci import BitbucketAdapter
6+
from codecov_cli.helpers.ci_adapters.bitrise_ci import BitriseCIAdapter
7+
from codecov_cli.helpers.ci_adapters.buildkite import BuildkiteAdapter
28
from codecov_cli.helpers.ci_adapters.circleci import CircleCICIAdapter
9+
from codecov_cli.helpers.ci_adapters.cirrus_ci import CirrusCIAdapter
10+
from codecov_cli.helpers.ci_adapters.droneci import DroneCIAdapter
311
from codecov_cli.helpers.ci_adapters.github_actions import GithubActionsCIAdapter
412
from codecov_cli.helpers.ci_adapters.gitlab_ci import GitlabCIAdapter
13+
from codecov_cli.helpers.ci_adapters.heroku import HerokuCIAdapter
14+
from codecov_cli.helpers.ci_adapters.jenkins import JenkinsAdapter
15+
from codecov_cli.helpers.ci_adapters.local import LocalAdapter
16+
from codecov_cli.helpers.ci_adapters.teamcity import TeamcityAdapter
17+
from codecov_cli.helpers.ci_adapters.travis_ci import TravisCIAdapter
18+
from codecov_cli.helpers.ci_adapters.woodpeckerci import WoodpeckerCIAdapter
19+
20+
logger = logging.getLogger("codecovcli")
521

622

7-
def get_ci_adapter(provider_name):
8-
if provider_name == "circleci":
9-
return CircleCICIAdapter()
10-
if provider_name == "githubactions":
11-
return GithubActionsCIAdapter()
12-
if provider_name == "gitlabCI":
13-
return GitlabCIAdapter()
14-
if provider_name == "appveyor":
15-
return AppveyorCIAdapter()
23+
def get_ci_adapter(provider_name: str = None):
24+
if provider_name:
25+
for provider in get_ci_providers_list():
26+
if provider.get_service_name().lower() == provider_name.lower():
27+
return provider
28+
else:
29+
for provider in get_ci_providers_list():
30+
if provider.detect():
31+
logger.info(f"Found ci service {provider._get_service()}")
32+
return provider
1633
return None
34+
35+
36+
def get_ci_providers_list():
37+
return [
38+
CircleCICIAdapter(),
39+
GithubActionsCIAdapter(),
40+
GitlabCIAdapter(),
41+
BitbucketAdapter(),
42+
BitriseCIAdapter(),
43+
AppveyorCIAdapter(),
44+
WoodpeckerCIAdapter(),
45+
HerokuCIAdapter(),
46+
DroneCIAdapter(),
47+
BuildkiteAdapter(),
48+
AzurePipelinesCIAdapter(),
49+
JenkinsAdapter(),
50+
CirrusCIAdapter(),
51+
TeamcityAdapter(),
52+
TravisCIAdapter(),
53+
# local adapter should always be the last one
54+
LocalAdapter(),
55+
]

codecov_cli/helpers/ci_adapters/appveyor_ci.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
44

55

66
class AppveyorCIAdapter(CIAdapterBase):
7+
# https://www.appveyor.com/docs/environment-variables/
8+
9+
def detect(self) -> bool:
10+
return bool(os.getenv("CI")) and bool(os.getenv("APPVEYOR"))
11+
712
def _get_commit_sha(self):
813
return os.getenv("APPVEYOR_PULL_REQUEST_HEAD_COMMIT") or os.getenv(
914
"APPVEYOR_REPO_COMMIT"
@@ -44,3 +49,6 @@ def _get_branch(self):
4449

4550
def _get_service(self):
4651
return "appveyor"
52+
53+
def get_service_name(self):
54+
return "AppVeyor"

0 commit comments

Comments
 (0)