]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Detect work-in-progress commits in danger CI
authorTom Krizek <tkrizek@isc.org>
Mon, 7 Nov 2022 13:18:55 +0000 (14:18 +0100)
committerTom Krizek <tkrizek@isc.org>
Tue, 8 Nov 2022 13:34:58 +0000 (14:34 +0100)
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

index c8b495785e86cc47c429d7ae678f088a3a59616f..a2b90bf0ce7ef41779eb03822d2c65174ac6d08f 100644 (file)
@@ -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: "