Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

github: automation: fixed rules for commit scope check #2286

Merged
merged 2 commits into from
Dec 19, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 17 additions & 24 deletions .github/automation/commit-msg-check.py
Original file line number Diff line number Diff line change
@@ -20,42 +20,33 @@

import argparse
import subprocess
import re

# * Ensuring the scopes end in colon and same level scopes are comma delimited.
# Ensure the scope ends in a colon and that same level scopes are
# comma delimited.
# Current implementation only checks the first level scope as ':' can be used
# in the commit description (ex: TBB::tbb or bf16:bf16).
# TODO: Limit scopes to an acceptable list of tags.
def __scopeCheck(msg: str):
status = "Message scope: "

firstLine = (msg.partition("\n")[0]).strip()

if not ":" in firstLine:
print(f"{status} FAILED: Commit message does not include scope")
if not re.match('^[a-z0-9]+(, [a-z0-9]+)*: ', msg):
print(f"{status} FAILED: Commit message must follow the format "
"<scope>:[ <scope>:] <short description>")
return False

# The last element of the split is the title, which we don't care about.
scopesArray = firstLine.split(":")[:-1]

for scopes in scopesArray:
numWords = len(scopes.split())
numCommas = scopes.count(",")

if numWords != numCommas + 1:
print(f"{status} FAILED: Same-level scopes must be comma-separated. Bad token: '{scopes}'")
return False

print(f"{status} OK")
return True

# * Ensuring a character limit for the first line.
# Ensure a character limit for the first line.
def __numCharacterCheck(msg: str):
status = "Message length:"
summary = msg.partition("\n")[0]
msgSummaryLen = len(summary)
if msgSummaryLen <= 72:
if len(msg) <= 72:
print(f"{status} OK")
return True
else:
print(f"{status} FAILED: Commit message summary must not exceed 72 characters.")
print(f"{status} FAILED: Commit message summary must not "
"exceed 72 characters.")
return False

def main():
@@ -67,7 +58,8 @@ def main():
head: str = args.head

commit_range = base + ".." + head
messages = subprocess.run(["git", "rev-list", "--format=oneline", commit_range], capture_output=True, text=True).stdout
messages = subprocess.run(["git", "rev-list", "--format=oneline",
commit_range], capture_output=True, text=True).stdout

is_ok = True
for i in messages.splitlines():
@@ -79,9 +71,10 @@ def main():
is_ok = is_ok and result

if is_ok:
print("All commmit messages are formtted correctly. ")
print("All commmit messages are formatted correctly. ")
else:
print("Some commit message checks failed. Please align commit messages with Contributing Guidelines and update the PR.")
print("Some commit message checks failed. Please align commit messages "
"with Contributing Guidelines and update the PR.")
exit(1)


Loading