def create_issue_if_needed(project: GitProject, title: str, message: str) -> Optional[Issue]: # TODO: Improve filtering issues = project.get_issue_list() title = f"[packit] {title}" if any(title in issue.title for issue in issues): return None # TODO: store in DB return project.create_issue(title=title, body=message)
def get_package_config_from_repo( project: GitProject, reference: Optional[str] = None, base_project: Optional[GitProject] = None, pr_id: int = None, fail_when_missing: bool = True, spec_file_path: Optional[str] = None, ): """ Get the package config and catch the invalid config scenario and possibly no-config scenario """ if not base_project and not project: return None project_to_search_in = base_project or project try: package_config: PackageConfig = get_package_config_from_repo( project=project_to_search_in, ref=reference, spec_file_path=spec_file_path, ) if not package_config and fail_when_missing: raise PackitConfigException( f"No config file found in {project_to_search_in.full_repo_name} " "on ref '{reference}'" ) except PackitConfigException as ex: if pr_id: project.pr_comment( pr_id, f"Failed to load packit config file:\n```\n{str(ex)}\n```" ) else: # TODO: filter when https://github.com/packit/ogr/issues/308 fixed issues = project.get_issue_list() if "Invalid packit config" not in [x.title for x in issues]: # TODO: store in DB message = ( f"Failed to load packit config file:\n```\n{str(ex)}\n```\n" "For more info, please check out the documentation: " "http://packit.dev/packit-as-a-service/ or contact us - " "[Packit team]" "(https://github.com/orgs/packit/teams/the-packit-team)" ) i = project.create_issue( title="[packit] Invalid config", body=message ) logger.debug(f"Created issue for invalid packit config: {i.url}") raise ex return package_config
def get_package_config_from_repo( self, project: GitProject, reference: str, pr_id: int = None, fail_when_missing: bool = True, ): """ Get the package config and catch the invalid config scenario and possibly no-config scenario Static because of the easier mocking. """ try: package_config: PackageConfig = get_package_config_from_repo( project, reference ) if not package_config and fail_when_missing: raise PackitConfigException( f"No config file found in {project.full_repo_name}" ) except PackitConfigException as ex: if pr_id: project.pr_comment( pr_id, f"Failed to load packit config file:\n```\n{str(ex)}\n```" ) else: # TODO: filter when https://github.com/packit-service/ogr/issues/308 fixed issues = project.get_issue_list() if "Invalid packit config" not in [x.title for x in issues]: # TODO: store in DB message = ( f"Failed to load packit config file:\n```\n{str(ex)}\n```\n" "For more info, please check out the documentation: " "http://packit.dev/packit-as-a-service/ or contact us - " "[Packit team]" "(https://github.com/orgs/packit-service/teams/the-packit-team)" ) i = project.create_issue( title="[packit] Invalid config", body=message ) logger.debug(f"Created issue for invalid packit config: {i.url}") raise ex return package_config