Skip to content

Commit c45d95e

Browse files
authored
Added check for incorrect titles (#57)
1 parent 246ec02 commit c45d95e

5 files changed

Lines changed: 45 additions & 3 deletions

File tree

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
v1.10.0
1+
v1.11.0

comment_bodies.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"automerge_donotmerge": [
1717
"`DO NOT MERGE` ou `automerge` ? Je sais pas quoi faire là !",
1818
"Décidez-vous les gars, `DO NOT MERGE` ou `automerge` ?"
19-
2019
],
2120
"automerge_approved": [
2221
"Dès que les tests passent, je merge ! Merci @$AUTHOR @$REVIEWERS !",
@@ -34,5 +33,12 @@
3433
],
3534
"greetings": [
3635
"Hello @$AUTHOR ! Bienvenue dans le monde merveilleux de la traduction de la documentation de Python !\nJe suis PyDocTeur, le robot amical qui s'occupe d'automatiser certaines tâches.\nSi tu as des questions, n'hésite pas à ping @JulienPalard ou @Seluj78"
36+
],
37+
"unmergeable": [
38+
"Ping @$AUTHOR & @$REVIEWERS !\nIl m'est actuellement impossible de merge cette pull request.\n\nL'état actuel de merge la PR est `@$MERGEABLE_STATE`.\n\nMerci de rebase ou de résoudre les conflits !"
39+
],
40+
"incorrect_title":
41+
[
42+
"Hello @$AUTHOR ! Désolé, mais ton titre de pull request me semble invalide par rapport à ce que je suis programmé d'accepter.\nMerci de le corriger ou d'ajouter le label `meta` si c'est une PR spéciale."
3743
]
3844
}

pydocteur/actions.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def replace_body_variables(pr: PullRequest, body: str):
5454
reviewers_login.discard(author)
5555
reviewers = ", @".join(reviewers_login)
5656
new_body = new_body.replace("@$REVIEWERS", "@" + reviewers)
57+
new_body = new_body.replace("@$MERGEABLE_STATE", pr.mergeable_state)
5758
return new_body
5859

5960

@@ -82,9 +83,17 @@ def merge_and_thank_contributors(pr: PullRequest, state: str):
8283
contributor_usernames = [u.login for u in repo.get_collaborators()]
8384
reviewer_usernames = [i.user.login for i in pr.get_reviews()]
8485
if not any(x in reviewer_usernames for x in contributor_usernames):
85-
logging.info("PR not reviewed by a contributor, not merginf.")
86+
logging.info("PR not reviewed by a contributor, not merging.")
8687
return
8788

89+
logger.info(f"Testing if PR #{pr.number} can be merged")
90+
if not pr.mergeable or pr.mergeable_state != "clean":
91+
logger.warning(f"PR #{pr.number} cannot be merged. mergeable_state={pr.mergeable_state}")
92+
unmergeable_comments = get_comment_bodies("unmergeable")
93+
body = random.choice(unmergeable_comments)
94+
body = replace_body_variables(pr, body)
95+
pr.create_issue_comment(body + END_OF_BODY.format(state=state, version=VERSION))
96+
return
8897
logger.info(f"PR #{pr.number}: About to merge")
8998
warnings = get_comment_bodies("automerge_approved_testok")
9099
thanks = get_comment_bodies("automerge_approved_testok-done")
@@ -114,3 +123,11 @@ def maybe_greet_user(pr: PullRequest):
114123
body = replace_body_variables(pr, body)
115124
logger.info(f"PR #{pr.number}: Greeting {pr.user.login}")
116125
pr.create_issue_comment(body + END_OF_BODY.format(state="greetings", version=VERSION))
126+
127+
128+
def comment_about_title(pr: PullRequest):
129+
bodies = get_comment_bodies("incorrect_title")
130+
body = random.choice(bodies)
131+
body = replace_body_variables(pr, body)
132+
logger.info(f"PR #{pr.number}: Sending incorrect title message")
133+
pr.create_issue_comment(body + END_OF_BODY.format(state="incorrect_title", version=VERSION))

pydocteur/app.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@
55
from flask import jsonify
66
from flask import request
77

8+
from pydocteur.actions import comment_about_title
89
from pydocteur.actions import comment_pr
910
from pydocteur.actions import maybe_greet_user
1011
from pydocteur.actions import merge_and_thank_contributors
1112
from pydocteur.github_api import get_pull_request
1213
from pydocteur.github_api import has_pr_number
1314
from pydocteur.pr_status import get_pr_state
15+
from pydocteur.pr_status import is_title_ok
1416
from pydocteur.settings import VERSION
1517

1618
application = Flask(__name__)
@@ -61,6 +63,11 @@ def process_incoming_payload():
6163
logger.info(f"State of PR #{pr.number} hasn't changed, ignoring. (state: {state})")
6264
return "OK", 200
6365

66+
if not is_title_ok(pr):
67+
logging.info(f"Title of PR #{pr.number} is incorrect, sending message")
68+
comment_about_title(pr)
69+
return "OK", 200
70+
6471
state_dict = {
6572
"automerge_approved_testok": merge_and_thank_contributors,
6673
# ...

pydocteur/pr_status.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import logging
22
import os
3+
import re
34
from itertools import groupby
45

56
from pydocteur.github_api import get_graphql_api
@@ -84,6 +85,17 @@ def is_already_greeted(pr):
8485
return any("(state: greetings)" in my_comment for my_comment in my_comments)
8586

8687

88+
def is_title_ok(pr):
89+
if is_label_set(pr, "meta"):
90+
return True
91+
if pr.title.startswith(("traduction de", "Traduction de", "Fix fuzzies in", "Fix fuzzies dans")) or re.findall(
92+
r"\\.po", pr.title
93+
):
94+
return True
95+
else:
96+
return False
97+
98+
8799
def state_name(**kwargs):
88100
SIMPLIFICATIONS = {
89101
"testok": "",

0 commit comments

Comments
 (0)