def events(request) -> List[Tuple[AbstractGithubEvent, bool]]: """ :param request: event type to create Event instances of that type :return: list of Events that check_and_report accepts together with whether they should pass """ approved_accounts = [ ("foo", "bar", False), ("foo", "lojzo", True), ("lojzo", "bar", True), ("lojzo", "fero", True), ] if request.param == "release": return [ (ReleaseEvent("foo", "", "", ""), False), (ReleaseEvent("lojzo", "", "", ""), True), ] elif request.param == "pr": return [( PullRequestEvent(PullRequestAction.opened, 1, namespace, "", "", "", "", "", login), approved, ) for namespace, login, approved in approved_accounts] elif request.param == "pr_comment": return [( PullRequestCommentEvent( PullRequestCommentAction.created, 1, namespace, "", "", "", "", login, "", ), approved, ) for namespace, login, approved in approved_accounts] elif request.param == "issue_comment": return [( IssueCommentEvent( IssueCommentAction.created, 1, namespace, "", "", "", login, "", ), approved, ) for namespace, login, approved in approved_accounts] return []
def parse_release_event(event) -> Optional[ReleaseEvent]: """ https://developer.github.com/v3/activity/events/types/#releaseevent https://developer.github.com/v3/repos/releases/#get-a-single-release look into the provided event and see if it's one for a published github release; if it is, process it and return input for the job handler """ action = event.get("action") release = event.get("release") if action != "published" or not release: return None logger.info(f"GitHub release {release} {action!r} event.") repo_namespace = nested_get(event, "repository", "owner", "login") repo_name = nested_get(event, "repository", "name") if not (repo_namespace and repo_name): logger.warning("No full name of the repository.") return None release_ref = nested_get(event, "release", "tag_name") if not release_ref: logger.warning("Release tag name is not set.") return None logger.info( f"New release event {release_ref!r} for repo {repo_namespace}/{repo_name}." ) https_url = event["repository"]["html_url"] return ReleaseEvent(repo_namespace, repo_name, release_ref, https_url)
def parse_release_event(event) -> Optional[ReleaseEvent]: """ look into the provided event and see if it's one for a published github release; if it is, process it and return input for the job handler """ action = event.get("action") release = event.get("release") if action == "published" and release: logger.info(f"GitHub release {release} event, action = {action}.") repo_namespace = nested_get(event, "repository", "owner", "login") repo_name = nested_get(event, "repository", "name") if not (repo_namespace and repo_name): logger.warning("No full name of the repository.") return None release_ref = nested_get(event, "release", "tag_name") if not release_ref: logger.warning("Release tag name is not set.") return None logger.info( f"New release event {release_ref} for repo {repo_namespace}/{repo_name}." ) https_url = event["repository"]["html_url"] return ReleaseEvent(repo_namespace, repo_name, release_ref, https_url) return None
def __init__(self, config: ServiceConfig, job_config: JobConfig, event: ReleaseEvent): super().__init__(config=config, job_config=job_config, event=event) self.project: GitProject = event.get_project() self.package_config: PackageConfig = self.get_package_config_from_repo( self.project, event.tag_name) self.package_config.upstream_project_url = event.project_url
def __init__(self, config: ServiceConfig, job: JobConfig, release_event: ReleaseEvent): super().__init__(config=config, job=job, event=release_event) self.project: GitProject = release_event.get_project() self.package_config: PackageConfig = get_package_config_from_repo( self.project, release_event.tag_name) if not self.package_config: raise ValueError( f"No config file found in {self.project.full_repo_name}") self.package_config.upstream_project_url = release_event.project_url
def events(request) -> List[Tuple[AbstractGithubEvent, bool]]: """ :param request: event type to create Event instances of that type :return: list of Events that check_and_report accepts together with whether they should pass """ approved_accounts = [ ("foo", "bar", False), ("foo", "lojzo", True), ("lojzo", "bar", True), ("lojzo", "fero", True), ] if request.param == "release": return [ (ReleaseEvent("foo", "", "", ""), False), (ReleaseEvent("lojzo", "", "", ""), True), ] elif request.param == "pr": return [( PullRequestGithubEvent( action=PullRequestAction.opened, pr_id=1, base_repo_namespace="", base_repo_name="", target_repo_namespace=namespace, target_repo_name="", https_url="", commit_sha="", user_login=login, base_ref="", ), approved, ) for namespace, login, approved in approved_accounts] elif request.param == "pr_comment": return [( PullRequestCommentGithubEvent( action=PullRequestCommentAction.created, pr_id=1, base_repo_namespace=namespace, base_repo_name="", base_ref="", target_repo_namespace="", target_repo_name="", project_url="", user_login=login, comment="", ), approved, ) for namespace, login, approved in approved_accounts] elif request.param == "issue_comment": return [( IssueCommentEvent( action=IssueCommentAction.created, issue_id=1, repo_namespace=namespace, repo_name="", target_repo="", project_url="", user_login=login, comment="", ), approved, ) for namespace, login, approved in approved_accounts] return []
assert not whitelist.check_and_report(event, gp) def test_check_and_report_pr_comment_approve(whitelist): event = PullRequestCommentEvent(PullRequestAction["opened"], 0, "", "", "", "", "", "lojzo", "") gp = GitProject("", GitService(), "") flexmock(gp).should_receive("pr_comment").with_args( 0, "Account is not whitelisted!").never() assert whitelist.check_and_report(event, gp) @pytest.mark.parametrize( "event,should_pass", ( (ReleaseEvent("yoda", "", "", ""), True), (ReleaseEvent("vader", "", "", ""), False), ( PullRequestEvent( PullRequestAction.opened, 1, "death-star", "", "", "", "", "", "darth-criplicus", ), False, ),