Skip to content

Commit 118cacd

Browse files
author
espanov
committed
fix type, documentatuion, duplication, naming
1 parent f4cc226 commit 118cacd

10 files changed

Lines changed: 74 additions & 126 deletions

docs/commands/deploy.md

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,13 @@ usage: gitopscli deploy [-h] --file FILE --values VALUES
135135
options:
136136
-h, --help show this help message and exit
137137
--file FILE YAML file path
138-
--values VALUES YAML/JSON object with the YAML path as key and the
139-
desired value as value
138+
--values VALUES YAML/JSON object with the YAML path as key and the desired value as value
140139
--single-commit [SINGLE_COMMIT]
141140
Create only single commit for all updates
142141
--commit-message COMMIT_MESSAGE
143142
Specify exact commit message of deployment commit
144-
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env
145-
variable)
146-
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD
147-
env variable)
143+
--username USERNAME Git username (alternative: GITOPSCLI_USERNAME env variable)
144+
--password PASSWORD Git password or token (alternative: GITOPSCLI_PASSWORD env variable)
148145
--git-user GIT_USER Git Username
149146
--git-email GIT_EMAIL
150147
Git User Email
@@ -155,18 +152,19 @@ options:
155152
--git-provider GIT_PROVIDER
156153
Git server provider
157154
--git-provider-url GIT_PROVIDER_URL
158-
Git provider base API URL (e.g.
159-
https://bitbucket.example.tld)
155+
Git provider base API URL (e.g. https://bitbucket.example.tld)
160156
--create-pr [CREATE_PR]
161157
Creates a Pull Request
162158
--auto-merge [AUTO_MERGE]
163-
Automatically merge the created PR (only valid with
164-
--create-pr)
159+
Automatically merge the created PR (only valid with --create-pr)
165160
--merge-method MERGE_METHOD
166-
Merge Method (e.g., 'squash', 'rebase', 'merge')
167-
(default: merge)
168-
--json
169-
Print a JSON object containing deployment information
161+
Merge Method (e.g., 'squash', 'rebase', 'merge') (default: merge)
162+
--json [JSON] Print a JSON object containing deployment information
163+
--pr-labels PR_LABELS
164+
JSON array pr labels (Gitlab, Github supported)
165+
--merge-parameters MERGE_PARAMETERS
166+
JSON object pr parameters (only Gitlab supported)
170167
-v [VERBOSE], --verbose [VERBOSE]
171168
Verbose exception logging
169+
172170
```

gitopscli/cliparser.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ def parse_args(raw_args: List[str]) -> Tuple[bool, CommandArgs]:
2525

2626
args = vars(parser.parse_args(raw_args))
2727
args = __deduce_empty_git_provider_from_git_provider_url(args, parser.error)
28-
__check_compatibility_args(args, parser.error)
2928

3029
verbose = args.pop("verbose", False)
3130
command_args = __create_command_args(args)
@@ -114,10 +113,10 @@ def __create_deploy_parser() -> ArgumentParser:
114113
default=False,
115114
)
116115
parser.add_argument(
117-
"--pr-labels", help="JSON object pr labels (Gitlab, Github supported)", type=__parse_yaml, default=None
116+
"--pr-labels", help="JSON array pr labels (Gitlab, Github supported)", type=__parse_yaml, default=None
118117
)
119118
parser.add_argument(
120-
"--gitlab-merge-parameters",
119+
"--merge-parameters",
121120
help="JSON object pr parameters (only Gitlab supported)",
122121
type=__parse_yaml,
123122
default=None,
@@ -311,15 +310,6 @@ def __deduce_empty_git_provider_from_git_provider_url(
311310
return updated_args
312311

313312

314-
def __check_compatibility_args(args: Dict[str, Any], error: Callable[[str], NoReturn]) -> None:
315-
if "git_provider" not in args:
316-
return
317-
if args.get("pr_labels") and args["git_provider"] == GitProvider.BITBUCKET:
318-
error("Cannot use --pr-labels with --git-provider bitbucket-server")
319-
if args.get("gitlab_merge_parameters") and args["git_provider"] != GitProvider.GITLAB:
320-
error("Can use --gitlab_merge_parameters only with --git-provider gitlab")
321-
322-
323313
def __create_command_args(args: Dict[str, Any]) -> CommandArgs:
324314
args = dict(args)
325315
command = args.pop("command")

gitopscli/commands/deploy.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ class Args(GitApiConfig):
2828
auto_merge: bool
2929
json: bool
3030

31-
pr_labels: Any
32-
gitlab_merge_parameters: Any
31+
pr_labels: Optional[List[str]]
32+
merge_parameters: Optional[Any]
3333
merge_method: Literal["squash", "rebase", "merge"] = "merge"
3434

3535
def __init__(self, args: Args) -> None:
@@ -58,10 +58,8 @@ def execute(self) -> None:
5858
if self.__args.pr_labels:
5959
git_repo_api.add_pull_request_label(pr_id, self.__args.pr_labels)
6060
if self.__args.auto_merge:
61-
if self.__args.gitlab_merge_parameters:
62-
git_repo_api.merge_pull_request_with_parameters(
63-
pr_id, self.__args.gitlab_merge_parameters, self.__args.merge_method
64-
)
61+
if self.__args.merge_parameters:
62+
git_repo_api.merge_pull_request(pr_id, self.__args.merge_method, self.__args.merge_parameters)
6563
else:
6664
git_repo_api.merge_pull_request(pr_id, self.__args.merge_method)
6765
git_repo_api.delete_branch(pr_branch)

gitopscli/git_api/bitbucket_git_repo_api_adapter.py

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Dict, Any, Optional, Literal
1+
from typing import List, Dict, Any, Optional, Literal
22
import requests
33

44
from atlassian import Bitbucket
@@ -74,7 +74,12 @@ def create_pull_request(
7474
raise GitOpsException(pull_request["errors"][0]["message"])
7575
return GitRepoApi.PullRequestIdAndUrl(pr_id=pull_request["id"], url=pull_request["links"]["self"][0]["href"])
7676

77-
def merge_pull_request(self, pr_id: int, merge_method: Literal["squash", "rebase", "merge"] = "merge") -> None:
77+
def merge_pull_request(
78+
self,
79+
pr_id: int,
80+
merge_method: Literal["squash", "rebase", "merge"] = "merge",
81+
merge_parameters: Dict[str, Any] = None,
82+
) -> None:
7883
pull_request = self.__bitbucket.get_pullrequest(self.__organisation, self.__repository_name, pr_id)
7984
self.__bitbucket.merge_pull_request(
8085
self.__organisation, self.__repository_name, pull_request["id"], pull_request["version"]
@@ -109,13 +114,5 @@ def __get_default_branch(self) -> str:
109114
default_branch = self.__bitbucket.get_default_branch(self.__organisation, self.__repository_name)
110115
return str(default_branch["id"])
111116

112-
def merge_pull_request_with_parameters(
113-
self,
114-
pr_id: int,
115-
gitlab_merge_parameters: Dict[str, Any],
116-
merge_method: Literal["squash", "rebase", "merge"] = "merge",
117-
) -> None:
118-
pass
119-
120-
def add_pull_request_label(self, pr_id: int, pr_labels: Dict[str, Any]) -> None:
117+
def add_pull_request_label(self, pr_id: int, pr_labels: List[str]) -> None:
121118
pass

gitopscli/git_api/git_repo_api.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from abc import ABCMeta, abstractmethod
2-
from typing import Any, Dict, NamedTuple, Optional, Literal
2+
from typing import Any, List, Dict, NamedTuple, Optional, Literal
33

44

55
class GitRepoApi(metaclass=ABCMeta):
@@ -32,7 +32,12 @@ def create_pull_request(
3232
...
3333

3434
@abstractmethod
35-
def merge_pull_request(self, pr_id: int, merge_method: Literal["squash", "rebase", "merge"] = "merge") -> None:
35+
def merge_pull_request(
36+
self,
37+
pr_id: int,
38+
merge_method: Literal["squash", "rebase", "merge"] = "merge",
39+
merge_parameters: Dict[str, Any] = None,
40+
) -> None:
3641
...
3742

3843
@abstractmethod
@@ -52,14 +57,5 @@ def get_pull_request_branch(self, pr_id: int) -> str:
5257
...
5358

5459
@abstractmethod
55-
def add_pull_request_label(self, pr_id: int, pr_labels: Dict[str, Any]) -> None:
56-
...
57-
58-
@abstractmethod
59-
def merge_pull_request_with_parameters(
60-
self,
61-
pr_id: int,
62-
gitlab_merge_parameters: Dict[str, Any],
63-
merge_method: Literal["squash", "rebase", "merge"] = "merge",
64-
) -> None:
60+
def add_pull_request_label(self, pr_id: int, pr_labels: List[str]) -> None:
6561
...

gitopscli/git_api/git_repo_api_logging_proxy.py

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import logging
2-
from typing import Any, Dict, Optional, Literal
2+
from typing import Any, List, Dict, Optional, Literal
33
from .git_repo_api import GitRepoApi
44

55

@@ -28,7 +28,12 @@ def create_pull_request(
2828
logging.info("Creating pull request from '%s' to '%s' with title: %s", from_branch, to_branch, title)
2929
return self.__api.create_pull_request(from_branch, to_branch, title, description)
3030

31-
def merge_pull_request(self, pr_id: int, merge_method: Literal["squash", "rebase", "merge"] = "merge") -> None:
31+
def merge_pull_request(
32+
self,
33+
pr_id: int,
34+
merge_method: Literal["squash", "rebase", "merge"] = "merge",
35+
merge_parameters: Dict[str, Any] = None,
36+
) -> None:
3237
logging.info("Merging pull request %s", pr_id)
3338
self.__api.merge_pull_request(pr_id, merge_method=merge_method)
3439

@@ -51,15 +56,6 @@ def get_branch_head_hash(self, branch: str) -> str:
5156
def get_pull_request_branch(self, pr_id: int) -> str:
5257
return self.__api.get_pull_request_branch(pr_id)
5358

54-
def add_pull_request_label(self, pr_id: int, pr_labels: Dict[str, Any]) -> None:
59+
def add_pull_request_label(self, pr_id: int, pr_labels: List[str]) -> None:
5560
logging.info("Adding labels for pull request %s with content: %s", pr_id, pr_labels)
5661
self.__api.add_pull_request_label(pr_id, pr_labels)
57-
58-
def merge_pull_request_with_parameters(
59-
self,
60-
pr_id: int,
61-
gitlab_merge_parameters: Dict[str, Any],
62-
merge_method: Literal["squash", "rebase", "merge"] = "merge",
63-
) -> None:
64-
logging.info("Merging pull request %s with parameters %s", pr_id, gitlab_merge_parameters)
65-
self.__api.merge_pull_request_with_parameters(pr_id, gitlab_merge_parameters, merge_method=merge_method)

gitopscli/git_api/github_git_repo_api_adapter.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,12 @@ def create_pull_request(
4545
pull_request = repo.create_pull(title=title, body=description, head=from_branch, base=to_branch)
4646
return GitRepoApi.PullRequestIdAndUrl(pr_id=pull_request.number, url=pull_request.html_url)
4747

48-
def merge_pull_request(self, pr_id: int, merge_method: Literal["squash", "rebase", "merge"] = "merge") -> None:
48+
def merge_pull_request(
49+
self,
50+
pr_id: int,
51+
merge_method: Literal["squash", "rebase", "merge"] = "merge",
52+
merge_parameters: Dict[str, Any] = None,
53+
) -> None:
4954
pull_request = self.__get_pull_request(pr_id)
5055
pull_request.merge(merge_method=merge_method)
5156

@@ -92,11 +97,3 @@ def __get_repo(self) -> Repository.Repository:
9297
def add_pull_request_label(self, pr_id: int, pr_labels: Union[str, Any]) -> None:
9398
pull_request = self.__get_pull_request(pr_id)
9499
pull_request.set_labels(pr_labels)
95-
96-
def merge_pull_request_with_parameters(
97-
self,
98-
pr_id: int,
99-
gitlab_merge_parameters: Dict[str, Any],
100-
merge_method: Literal["squash", "rebase", "merge"] = "merge",
101-
) -> None:
102-
pass

gitopscli/git_api/gitlab_git_repo_api_adapter.py

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Any, Dict, Optional, Literal
1+
from typing import Any, List, Dict, Optional, Literal
22
import logging
33
import time
44
import requests
@@ -59,16 +59,21 @@ def create_pull_request(
5959
)
6060
return GitRepoApi.PullRequestIdAndUrl(pr_id=merge_request.iid, url=merge_request.web_url)
6161

62-
def merge_pull_request(self, pr_id: int, merge_method: Literal["squash", "rebase", "merge"] = "merge") -> None:
62+
def merge_pull_request(
63+
self,
64+
pr_id: int,
65+
merge_method: Literal["squash", "rebase", "merge"] = "merge",
66+
merge_parameters: Dict[str, Any] = None,
67+
) -> None:
6368
merge_request = self.__project.mergerequests.get(pr_id)
6469

6570
max_retries = MAX_MERGE_RETRIES
6671
while max_retries > 0:
6772
try:
6873
if merge_method == "rebase":
69-
merge_request.rebase()
74+
merge_request.rebase(merge_parameters)
7075
return
71-
merge_request.merge()
76+
merge_request.merge(merge_parameters)
7277
return
7378
except gitlab.exceptions.GitlabMRClosedError as ex:
7479
# "Branch cannot be merged" error can occur if the server
@@ -103,34 +108,7 @@ def __get_default_branch(self) -> str:
103108
raise GitOpsException("Default branch does not exist")
104109
return str(default_branch.name)
105110

106-
def add_pull_request_label(self, pr_id: int, pr_labels: Dict[str, Any]) -> None:
111+
def add_pull_request_label(self, pr_id: int, pr_labels: List[str]) -> None:
107112
merge_request = self.__project.mergerequests.get(pr_id)
108113
merge_request.labels = pr_labels
109114
merge_request.save()
110-
111-
def merge_pull_request_with_parameters(
112-
self,
113-
pr_id: int,
114-
gitlab_merge_parameters: Dict[str, Any],
115-
merge_method: Literal["squash", "rebase", "merge"] = "merge",
116-
) -> None:
117-
merge_request = self.__project.mergerequests.get(pr_id)
118-
119-
max_retries = MAX_MERGE_RETRIES
120-
while max_retries > 0:
121-
try:
122-
if merge_method == "rebase":
123-
merge_request.rebase(gitlab_merge_parameters)
124-
return
125-
merge_request.merge(gitlab_merge_parameters)
126-
return
127-
except gitlab.exceptions.GitlabMRClosedError as ex:
128-
# "Branch cannot be merged" error can occur if the server
129-
# is still processing the merge request internally
130-
max_retries -= 1
131-
logging.warning(
132-
"Retry merging pull request. Attempts: (%s/%s)", MAX_MERGE_RETRIES - max_retries, MAX_MERGE_RETRIES
133-
)
134-
if max_retries == 0:
135-
raise GitOpsException("Error merging pull request: 'Branch cannot be merged'") from ex
136-
time.sleep(2.5)

0 commit comments

Comments
 (0)