示例#1
0
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 []
示例#2
0
    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)
示例#3
0
    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
示例#6
0
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 []
示例#7
0
    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,
        ),