From 402b11431c1ea417ffcd586c547f303c127b655e Mon Sep 17 00:00:00 2001 From: Tom Krizek Date: Mon, 7 Nov 2022 14:18:55 +0100 Subject: [PATCH] Detect work-in-progress commits in danger CI To avoid accidentally merging unfinished work, detect prohibited keywords at the start of the subject line. If the first word is any of the following, fail the check: WIP, wip, DROP, drop, TODO, todo The only slightly controversial is the lowercase "drop" which might have a legitimate use - seems like four commits in the history used it as a start of a sentence. However, since people commonly use "drop" to indicate a commit should be dropped before merging, let's prohibit it as well. In case of false-positive, "Drop" with a capitalized first letter can always be used. --- dangerfile.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dangerfile.py b/dangerfile.py index c8b495785e..a2b90bf0ce 100644 --- a/dangerfile.py +++ b/dangerfile.py @@ -62,6 +62,9 @@ mr = proj.mergerequests.get(os.environ["CI_MERGE_REQUEST_IID"]) # # * The subject line starts with "fixup!" or "Apply suggestion". # +# * The subject line starts with a prohibited word indicating a work in +# progress commit (e.g. "WIP"). +# # * The subject line contains a trailing dot. # # * There is no empty line between the subject line and the log message. @@ -87,6 +90,9 @@ mr = proj.mergerequests.get(os.environ["CI_MERGE_REQUEST_IID"]) # "[2]", etc.) which allows e.g. long URLs to be included in the # commit log message. +PROHIBITED_WORDS_RE = re.compile( + "^(WIP|wip|DROP|drop|DROPME|checkpoint|experiment|TODO|todo)[^a-zA-Z]" +) fixup_error_logged = False for commit in danger.git.commits: message_lines = commit.message.splitlines() @@ -99,6 +105,12 @@ for commit in danger.git.commits: "Please squash them before merging." ) fixup_error_logged = True + match = PROHIBITED_WORDS_RE.search(subject) + if match: + fail( + f"Prohibited keyword `{match.groups()[0]}` detected " + f"at the start of a subject line in commit {commit.sha}." + ) if len(subject) > 72 and not subject.startswith("Merge branch "): warn( f"Subject line for commit {commit.sha} is too long: "