Skip to content

Commit

Permalink
Merge pull request #1087 from jpopelka/bugzilla-from-gitlab
Browse files Browse the repository at this point in the history
Create a Bugzilla bug for a new Merge Request (Gitlab)

When an "accepted" flag is added to a MR in a source-git repo, create a bug in Bugzilla against that component for the CentOS Stream version.
We already have the functionality for Pagure, but because we've moved our source-git repos to Gitlab we need support for Gitlab.
Since this MR flag -> BZ workflow is c8s specific and we won't go back to Pagure, this PR removes the relevant Pagure related pieces.
There are some refactoring commits, so it's better to check them separately.

 The description should tell what the BZ is and why it was opened, provide guidance to the maintainer and a link to the MR with clear CLI commands how to get the patch.

Reviewed-by: None <None>
Reviewed-by: Jiri Popelka <None>
  • Loading branch information
softwarefactory-project-zuul[bot] committed May 10, 2021
2 parents 9e2edfb + ccc6fa9 commit fef8409
Show file tree
Hide file tree
Showing 21 changed files with 919 additions and 961 deletions.
15 changes: 10 additions & 5 deletions packit_service/config.py
Expand Up @@ -68,8 +68,6 @@ def __eq__(self, other: object) -> bool:


class ServiceConfig(Config):
service_config = None

def __init__(
self,
deployment: Deployment = Deployment.stg,
Expand All @@ -81,7 +79,8 @@ def __init__(
fas_password: Optional[str] = "",
bugzilla_url: str = "",
bugzilla_api_key: str = "",
pr_accepted_labels: List[str] = None,
bugz_namespaces: List[str] = None,
bugz_branches: List[str] = None,
gitlab_webhook_tokens: List[str] = None,
enabled_private_namespaces: Union[Set[str], List[str]] = None,
gitlab_token_secret: str = "",
Expand All @@ -108,8 +107,12 @@ def __init__(

self.bugzilla_url = bugzilla_url
self.bugzilla_api_key = bugzilla_api_key
# Labels/Tags to mark a PR as accepted - handler will create a bug & attach patch from PR
self.pr_accepted_labels: Set[str] = set(pr_accepted_labels or ["accepted"])
# Create bugs only for MRs against these namespaces
self.bugz_namespaces: Set[str] = set(
bugz_namespaces or ["redhat/centos-stream/src"]
)
# Create bugs only for MRs against one of these branches (regex set)
self.bugz_branches: Set[str] = set(bugz_branches or [r"^c8s"])

# List of github users who are allowed to trigger p-s on any repository
self.admins: Set[str] = set(admins or [])
Expand Down Expand Up @@ -139,6 +142,8 @@ def __init__(
self.koji_logs_url = koji_logs_url
self.koji_web_url = koji_web_url

service_config = None

def __repr__(self):
def hide(token: str) -> str:
return f"{token[:1]}***{token[-1:]}" if token else ""
Expand Down
3 changes: 2 additions & 1 deletion packit_service/schema.py
Expand Up @@ -52,7 +52,8 @@ class ServiceConfigSchema(UserConfigSchema):
validate_webhooks = fields.Bool(default=False)
bugzilla_url = fields.String(default="")
bugzilla_api_key = fields.String(default="")
pr_accepted_labels = fields.List(fields.String())
bugz_namespaces = fields.List(fields.String())
bugz_branches = fields.List(fields.String())
admins = fields.List(fields.String())
server_name = fields.String()
gitlab_webhook_tokens = fields.List(fields.String())
Expand Down
49 changes: 7 additions & 42 deletions packit_service/service/events.py
Expand Up @@ -13,6 +13,7 @@
from ogr.abstract import GitProject
from ogr.services.pagure import PagureProject
from packit.config import PackageConfig, get_package_config_from_repo

from packit_service.config import PackageConfigGetter, ServiceConfig
from packit_service.constants import KojiBuildState
from packit_service.models import (
Expand Down Expand Up @@ -504,10 +505,12 @@ def __init__(
username: str,
object_id: int,
object_iid: int,
source_repo_name: str,
source_repo_namespace: str,
source_repo_name: str,
source_repo_branch: str,
target_repo_namespace: str,
target_repo_name: str,
target_repo_branch: str,
project_url: str,
commit_sha: str,
):
Expand All @@ -519,10 +522,12 @@ def __init__(
self.user_login = username
self.object_id = object_id
self.identifier = str(object_iid)
self.source_repo_name = source_repo_name
self.source_repo_namespace = source_repo_namespace
self.source_repo_name = source_repo_name
self.source_repo_branch = source_repo_branch
self.target_repo_namespace = target_repo_namespace
self.target_repo_name = target_repo_name
self.target_repo_branch = target_repo_branch
self.project_url = project_url
self.commit_sha = commit_sha

Expand Down Expand Up @@ -1322,43 +1327,3 @@ def get_base_project(self) -> GitProject:
)
logger.debug(f"Base project: {fork} owned by {self.base_repo_owner}")
return fork


class PullRequestLabelPagureEvent(AddPullRequestDbTrigger, AbstractPagureEvent):
def __init__(
self,
action: PullRequestLabelAction,
pr_id: int,
base_repo_namespace: str,
base_repo_name: str,
base_repo_owner: str,
base_ref: Optional[str],
commit_sha: str,
project_url: str,
labels: List[str],
):
super().__init__(project_url=project_url, pr_id=pr_id)
self.action = action
self.base_repo_namespace = base_repo_namespace
self.base_repo_name = base_repo_name
self.base_repo_owner = base_repo_owner
self.base_ref = base_ref
self.identifier = str(pr_id)
self.git_ref = None # pr_id will be used for checkout
self.commit_sha = commit_sha
self.labels = labels

def get_dict(self, default_dict: Optional[Dict] = None) -> dict:
result = super().get_dict()
result["action"] = result["action"].value
return result

def get_base_project(self) -> GitProject:
fork = self.project.service.get_project(
namespace=self.base_repo_namespace,
repo=self.base_repo_name,
username=self.base_repo_owner,
is_fork=True,
)
logger.debug(f"Base project: {fork} owned by {self.base_repo_owner}")
return fork
41 changes: 27 additions & 14 deletions packit_service/worker/handlers/__init__.py
Expand Up @@ -9,35 +9,48 @@
# from packit_service.worker.handlers import something


from packit_service.worker.handlers.abstract import Handler, JobHandler
from packit_service.worker.handlers.fedmsg_handlers import (
from packit_service.worker.handlers.abstract import (
Handler,
JobHandler,
FedmsgHandler,
)
from packit_service.worker.handlers.bugzilla_handler import (
BugzillaHandler,
)
from packit_service.worker.handlers.copr_handlers import (
CoprBuildHandler,
CoprBuildEndHandler,
CoprBuildStartHandler,
FedmsgHandler,
)
from packit_service.worker.handlers.distgit_handlers import (
DistGitCommitHandler,
ProposeDownstreamHandler,
)
from packit_service.worker.handlers.github_handlers import (
from packit_service.worker.handlers.forges_handlers import (
GithubAppInstallationHandler,
ProposeDownstreamHandler,
TestingFarmHandler,
CoprBuildHandler,
)
from packit_service.worker.handlers.koji_handlers import (
KojiBuildHandler,
KojiBuildReportHandler,
)
from packit_service.worker.handlers.testing_farm_handlers import (
TestingFarmHandler,
TestingFarmResultsHandler,
)

__all__ = [
Handler.__name__,
JobHandler.__name__,
FedmsgHandler.__name__,
BugzillaHandler.__name__,
CoprBuildHandler.__name__,
CoprBuildEndHandler.__name__,
CoprBuildStartHandler.__name__,
FedmsgHandler.__name__,
GithubAppInstallationHandler.__name__,
ProposeDownstreamHandler.__name__,
Handler.__name__,
JobHandler.__name__,
DistGitCommitHandler.__name__,
TestingFarmResultsHandler.__name__,
CoprBuildHandler.__name__,
TestingFarmHandler.__name__,
ProposeDownstreamHandler.__name__,
KojiBuildHandler.__name__,
KojiBuildReportHandler.__name__,
TestingFarmHandler.__name__,
TestingFarmResultsHandler.__name__,
]
32 changes: 31 additions & 1 deletion packit_service/worker/handlers/abstract.py
Expand Up @@ -41,6 +41,8 @@
] = defaultdict(set)
MAP_COMMENT_TO_HANDLER: Dict[str, Set[Type["JobHandler"]]] = defaultdict(set)

PROCESSED_FEDMSG_TOPICS = []


def configured_as(job_type: JobType):
"""
Expand Down Expand Up @@ -159,6 +161,12 @@ def _add_to_mapping(kls: Type["JobHandler"]):
return _add_to_mapping


def add_topic(kls: Type["FedmsgHandler"]):
if issubclass(kls, FedmsgHandler):
PROCESSED_FEDMSG_TOPICS.append(kls.topic)
return kls


class TaskName(str, enum.Enum):
copr_build_start = "task.run_copr_build_start_handler"
copr_build_end = "task.run_copr_build_end_handler"
Expand All @@ -170,7 +178,7 @@ class TaskName(str, enum.Enum):
propose_downstream = "task.run_propose_downstream_handler"
koji_build = "task.run_koji_build_handler"
distgit_commit = "task.run_distgit_commit_handler"
pagure_pr_label = "task.run_pagure_pr_label_handler"
bugzilla = "task.run_bugzilla_handler"
koji_build_report = "task.run_koji_build_report_handler"


Expand Down Expand Up @@ -330,3 +338,25 @@ def get_signature(cls, event: Event, job: Optional[JobConfig]) -> Signature:

def run(self) -> TaskResults:
raise NotImplementedError("This should have been implemented.")


class FedmsgHandler(JobHandler):
"""Handlers for events from fedmsg"""

topic: str

def __init__(
self,
package_config: PackageConfig,
job_config: JobConfig,
event: dict,
):
super().__init__(
package_config=package_config,
job_config=job_config,
event=event,
)
self._pagure_service = None

def run(self) -> TaskResults:
raise NotImplementedError("This should have been implemented.")

0 comments on commit fef8409

Please sign in to comment.