Beispiel #1
0
def _is_pull_request_ready_for_automerge(pull_request: PullRequest) -> bool:
    # autofail if not enabled or pull request isn't open
    if (
        not SGTM_FEATURE__AUTOMERGE_ENABLED
        or pull_request.closed()
        or pull_request.merged()
    ):
        return False

    # if there are multiple labels, we use the most permissive to define automerge behavior
    if pull_request_has_label(pull_request, AutomergeLabel.IMMEDIATELY.value):
        return pull_request.mergeable() in (
            MergeableState.MERGEABLE,
            MergeableState.UNKNOWN,
        )

    if pull_request_has_label(pull_request, AutomergeLabel.AFTER_TESTS.value):
        return pull_request.is_build_successful() and pull_request.is_mergeable()

    if pull_request_has_label(
        pull_request, AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value
    ):
        return (
            pull_request.is_build_successful()
            and pull_request.is_mergeable()
            and pull_request.is_approved()
        )

    if pull_request_has_label(pull_request, AutomergeLabel.AFTER_APPROVAL.value):
        return pull_request.is_mergeable() and pull_request.is_approved()

    return False
Beispiel #2
0
def maybe_add_automerge_warning_comment(pull_request: PullRequest):
    """Adds comment warnings if automerge label is enabled"""

    if SGTM_FEATURE__AUTOMERGE_ENABLED:
        owner = pull_request.repository_owner_handle()
        repo_name = pull_request.repository_name()
        pr_number = pull_request.number()

        # if a PR has an automerge label and doesn't contain a comment warning, we want to maybe add a warning comment
        # only add warning comment if it's set to auto-merge after approval and hasn't yet been approved to limit noise

        if (
            (
                pull_request_has_label(
                    pull_request, AutomergeLabel.AFTER_TESTS_AND_APPROVAL.value
                )
                or pull_request_has_label(
                    pull_request, AutomergeLabel.AFTER_APPROVAL.value
                )
            )
            and not _pull_request_has_automerge_comment(pull_request)
            and not pull_request.is_approved()
        ):

            github_client.add_pr_comment(
                owner, repo_name, pr_number, AUTOMERGE_COMMENT_WARNING
            )