Skip to content

Commit f9c8a47

Browse files
Add create commit to empty-upload command
This is so that we can also create the commit before uploading. The create-commit is optional (i.e. if users don't pass in values, then their workflow shouldn't break). It will only create a commit if the values are passed.
1 parent 079f01b commit f9c8a47

File tree

2 files changed

+81
-1
lines changed

2 files changed

+81
-1
lines changed

codecov_cli/commands/empty_upload.py

+40-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
from codecov_cli.fallbacks import CodecovOption, FallbackFieldEnum
88
from codecov_cli.helpers.args import get_cli_args
9-
from codecov_cli.helpers.git import GitService
109
from codecov_cli.helpers.options import global_options
10+
from codecov_cli.services.commit import create_commit_logic
1111
from codecov_cli.services.empty_upload import empty_upload_logic
1212
from codecov_cli.types import CommandContext
1313

@@ -16,6 +16,26 @@
1616

1717
@click.command()
1818
@click.option("--force", is_flag=True, default=False)
19+
@click.option(
20+
"--parent-sha",
21+
help="SHA (with 40 chars) of what should be the parent of this commit",
22+
)
23+
@click.option(
24+
"-P",
25+
"--pr",
26+
"--pull-request-number",
27+
"pull_request_number",
28+
help="Specify the pull request number mannually. Used to override pre-existing CI environment variables",
29+
cls=CodecovOption,
30+
fallback_field=FallbackFieldEnum.pull_request_number,
31+
)
32+
@click.option(
33+
"-B",
34+
"--branch",
35+
help="Branch to which this commit belongs to",
36+
cls=CodecovOption,
37+
fallback_field=FallbackFieldEnum.branch,
38+
)
1939
@global_options
2040
@click.pass_context
2141
def empty_upload(
@@ -26,11 +46,30 @@ def empty_upload(
2646
token: typing.Optional[str],
2747
git_service: typing.Optional[str],
2848
fail_on_error: typing.Optional[bool],
49+
parent_sha: typing.Optional[str],
50+
pull_request_number: typing.Optional[int],
51+
branch: typing.Optional[str],
2952
):
3053
with sentry_sdk.start_transaction(op="task", name="Empty Upload"):
3154
with sentry_sdk.start_span(name="empty_upload"):
3255
enterprise_url = ctx.obj.get("enterprise_url")
3356
args = get_cli_args(ctx)
57+
58+
if parent_sha and pull_request_number and branch:
59+
logger.debug("Attempting to Create Commit before doing an empty upload.")
60+
create_commit_logic(
61+
commit_sha,
62+
parent_sha,
63+
pull_request_number,
64+
branch,
65+
slug,
66+
token,
67+
git_service,
68+
enterprise_url,
69+
fail_on_error,
70+
args,
71+
)
72+
3473
logger.debug(
3574
"Starting empty upload process",
3675
extra=dict(
+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
from click.testing import CliRunner
2+
3+
from codecov_cli.fallbacks import FallbackFieldEnum
4+
from codecov_cli.main import cli
5+
from tests.factory import FakeProvider, FakeVersioningSystem
6+
7+
def test_invoke_empty_upload_with_create_commit(mocker):
8+
create_commit_mock = mocker.patch("codecov_cli.commands.empty_upload.create_commit_logic")
9+
empty_upload_mock = mocker.patch("codecov_cli.commands.empty_upload.empty_upload_logic")
10+
11+
fake_ci_provider = FakeProvider({FallbackFieldEnum.commit_sha: None})
12+
mocker.patch("codecov_cli.main.get_ci_adapter", return_value=fake_ci_provider)
13+
14+
runner = CliRunner()
15+
result = runner.invoke(cli, ["empty-upload",
16+
"-C", "command-sha",
17+
"--slug", "owner/repo",
18+
"--parent-sha", "asdf",
19+
"--branch", "main",
20+
"--pr", 1234], obj={})
21+
assert result.exit_code == 0
22+
23+
create_commit_mock.assert_called_once()
24+
empty_upload_mock.assert_called_once()
25+
26+
def test_invoke_empty_upload_no_create_commit(mocker):
27+
create_commit_mock = mocker.patch("codecov_cli.commands.empty_upload.create_commit_logic")
28+
empty_upload_mock = mocker.patch("codecov_cli.commands.empty_upload.empty_upload_logic")
29+
30+
fake_ci_provider = FakeProvider({FallbackFieldEnum.commit_sha: None})
31+
mocker.patch("codecov_cli.main.get_ci_adapter", return_value=fake_ci_provider)
32+
33+
runner = CliRunner()
34+
result = runner.invoke(cli, ["empty-upload",
35+
"-C", "command-sha",
36+
"--slug", "owner/repo"], obj={})
37+
assert result.exit_code == 0
38+
39+
create_commit_mock.assert_not_called()
40+
empty_upload_mock.assert_called_once()
41+

0 commit comments

Comments
 (0)