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
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 )