From 8bd8a0d716cd0f9312daf63d440f53bb0a704b51 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 10:31:17 -0400 Subject: [PATCH 1/8] delete pr tag on merge/close of a pr --- webhook_server_container/libs/github_api.py | 38 +++++++++++++++++++++ webhook_server_container/utils/helpers.py | 6 ++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 8f9353e3..527ce829 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -759,6 +759,43 @@ def close_issue_for_merged_or_closed_pr(self, hook_action): issue.edit(state="closed") break + @ignore_exceptions(logger=FLASK_APP.logger) + def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): + pr_tag = f"pr-{self.pull_request.number}" + # run regctl as a container: + base_regctl_command = ( + "podman container run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ " + "ghcr.io/regclient/regctl:latest" + ) + # First we need to execute regctl login command before we can delete the tag: + rc, _, _ = run_command( + command=f"{base_regctl_command} {self.container_repository} -u {self.container_repository_username} " + f"-p {self.container_repository_password}", + verify_stderr=True, + log_prefix=self.log_prefix, + ) + if rc: + # check if the tag exists: + rc, output, _ = run_command( + command=f"{base_regctl_command} tag ls {self.container_repository}", + log_prefix=self.log_prefix, + ) + if rc and pr_tag in output: + # delete the tag: + rc, _, _ = run_command( + command=f"{base_regctl_command} tag delete {self.container_repository}:{pr_tag}", + log_prefix=self.log_prefix, + verify_stderr=True, + ) + if rc: + self.pull_request.create_issue_comment(f"Successfully removed PR tag: {pr_tag}.") + else: + self.pull_request.create_issue_comment(f"PR tag: {pr_tag} does not exist, not attempting to delete it.") + + else: + # login command failed add a comment to the PR that the tag was not deleted + self.pull_request.create_issue_comment(f"Failed to delete tag: {pr_tag}. Please delete it manually.") + def process_comment_webhook_data(self): if self.hook_data["action"] in ("action", "deleted"): return @@ -848,6 +885,7 @@ def process_pull_request_webhook_data(self): if hook_action == "closed": self.close_issue_for_merged_or_closed_pr(hook_action=hook_action) + self.delete_remote_tag_for_merged_or_closed_pr(hook_action=hook_action) is_merged = pull_request_data.get("merged") if self.jira_track_pr: diff --git a/webhook_server_container/utils/helpers.py b/webhook_server_container/utils/helpers.py index 19aa7c89..9f93faf4 100644 --- a/webhook_server_container/utils/helpers.py +++ b/webhook_server_container/utils/helpers.py @@ -44,11 +44,11 @@ def run_command( Args: command (str): Command to run log_prefix (str): Prefix for log messages - verify_stderr (bool, default True): Check command stderr + verify_stderr (bool, default False): Check command stderr shell (bool, default False): run subprocess with shell toggle timeout (int, optional): Command wait timeout - capture_output (bool, default False): Capture command output - check (boot, default True): If check is True and the exit code was non-zero, it raises a + capture_output (bool, default True): Capture command output + check (boot, default False): If check is True and the exit code was non-zero, it raises a CalledProcessError Returns: From 5d6d3699fa22568acdce34fceffc63f5793333b2 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 13:17:22 -0400 Subject: [PATCH 2/8] updates based on review comments --- webhook_server_container/libs/github_api.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 527ce829..bb6c494d 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -764,8 +764,7 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): pr_tag = f"pr-{self.pull_request.number}" # run regctl as a container: base_regctl_command = ( - "podman container run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ " - "ghcr.io/regclient/regctl:latest" + "podman run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ ghcr.io/regclient/regctl:latest" ) # First we need to execute regctl login command before we can delete the tag: rc, _, _ = run_command( @@ -789,9 +788,6 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): ) if rc: self.pull_request.create_issue_comment(f"Successfully removed PR tag: {pr_tag}.") - else: - self.pull_request.create_issue_comment(f"PR tag: {pr_tag} does not exist, not attempting to delete it.") - else: # login command failed add a comment to the PR that the tag was not deleted self.pull_request.create_issue_comment(f"Failed to delete tag: {pr_tag}. Please delete it manually.") From cced76c6dcd0ed5d5b5527984f1aa7a2d527855b Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 13:27:16 -0400 Subject: [PATCH 3/8] fixing some commands --- webhook_server_container/libs/github_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index bb6c494d..a0183166 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -768,7 +768,7 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): ) # First we need to execute regctl login command before we can delete the tag: rc, _, _ = run_command( - command=f"{base_regctl_command} {self.container_repository} -u {self.container_repository_username} " + command=f"{base_regctl_command} registry login quay.io -u {self.container_repository_username} " f"-p {self.container_repository_password}", verify_stderr=True, log_prefix=self.log_prefix, From c797b8650b4246061414dfceb083e6e59332e265 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 14:01:33 -0400 Subject: [PATCH 4/8] determine registry url from container_repository value --- webhook_server_container/libs/github_api.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index a0183166..e93f6b7a 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -766,9 +766,12 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): base_regctl_command = ( "podman run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ ghcr.io/regclient/regctl:latest" ) + registry_info = self.container_repository.split("/") + registry_url = "" if len(registry_info) < 2 else registry_info[0] + self.app.logger.info(f"Using registry url: {registry_url}") # First we need to execute regctl login command before we can delete the tag: rc, _, _ = run_command( - command=f"{base_regctl_command} registry login quay.io -u {self.container_repository_username} " + command=f"{base_regctl_command} registry login {registry_url} -u {self.container_repository_username} " f"-p {self.container_repository_password}", verify_stderr=True, log_prefix=self.log_prefix, From f1710748f2afb205535f8d84584e9cc897b69db8 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 14:05:35 -0400 Subject: [PATCH 5/8] address review comment --- webhook_server_container/libs/github_api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index e93f6b7a..3130504b 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -767,7 +767,7 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): "podman run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ ghcr.io/regclient/regctl:latest" ) registry_info = self.container_repository.split("/") - registry_url = "" if len(registry_info) < 2 else registry_info[0] + registry_url = "" if len(registry_info) < 3 else registry_info[0] self.app.logger.info(f"Using registry url: {registry_url}") # First we need to execute regctl login command before we can delete the tag: rc, _, _ = run_command( From 6dd7995800479581f9667e49bb0e95e7a2eee9b8 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 14:43:28 -0400 Subject: [PATCH 6/8] update based on comments received --- webhook_server_container/libs/github_api.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 3130504b..745daff3 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -764,11 +764,10 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): pr_tag = f"pr-{self.pull_request.number}" # run regctl as a container: base_regctl_command = ( - "podman run -i --rm --net host -v regctl-conf:/home/appuser/.regctl/ ghcr.io/regclient/regctl:latest" + "podman run --rm --net host -v regctl-conf:/home/appuser/.regctl/ ghcr.io/regclient/regctl:latest" ) registry_info = self.container_repository.split("/") registry_url = "" if len(registry_info) < 3 else registry_info[0] - self.app.logger.info(f"Using registry url: {registry_url}") # First we need to execute regctl login command before we can delete the tag: rc, _, _ = run_command( command=f"{base_regctl_command} registry login {registry_url} -u {self.container_repository_username} " From 3aa76c9e0617560a6efab3bbe5006db11304ede8 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 15:00:23 -0400 Subject: [PATCH 7/8] remove verify_stderr --- webhook_server_container/libs/github_api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 745daff3..7e041879 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -772,7 +772,6 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): rc, _, _ = run_command( command=f"{base_regctl_command} registry login {registry_url} -u {self.container_repository_username} " f"-p {self.container_repository_password}", - verify_stderr=True, log_prefix=self.log_prefix, ) if rc: From de37a201931fb8018a7a11abc78b0219948a0891 Mon Sep 17 00:00:00 2001 From: dbasunag Date: Mon, 24 Jun 2024 15:03:52 -0400 Subject: [PATCH 8/8] updates --- webhook_server_container/libs/github_api.py | 1 - 1 file changed, 1 deletion(-) diff --git a/webhook_server_container/libs/github_api.py b/webhook_server_container/libs/github_api.py index 7e041879..cde1caf3 100644 --- a/webhook_server_container/libs/github_api.py +++ b/webhook_server_container/libs/github_api.py @@ -785,7 +785,6 @@ def delete_remote_tag_for_merged_or_closed_pr(self, hook_action): rc, _, _ = run_command( command=f"{base_regctl_command} tag delete {self.container_repository}:{pr_tag}", log_prefix=self.log_prefix, - verify_stderr=True, ) if rc: self.pull_request.create_issue_comment(f"Successfully removed PR tag: {pr_tag}.")