blob: 8b2be68ec9865e407d3d3766b58afbc231b89f7f [file]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
load("./common.star", "cipd_platform_name", "get_fuchsia_dir", "os_exec")
def _check_commit_message(ctx):
"""Lints Git commit messages on the current branch against style guidelines."""
commits = ctx.scm.commits()
if not commits:
return
fuchsia_dir = get_fuchsia_dir(ctx)
python_bin = "%s/prebuilt/third_party/python3/%s/bin/python3" % (
fuchsia_dir,
cipd_platform_name(ctx),
)
checker_path = "%s/scripts/shac/commit_msg_checker.py" % fuchsia_dir
for commit in commits:
msg_file = ctx.io.tempfile(commit.message, name = "commit_message.txt")
res = os_exec(
ctx,
[python_bin, checker_path, "--message-file", msg_file, "--json"],
raise_on_failure = False,
).wait()
if not res.stdout or not res.stdout.strip().startswith("["):
continue
findings = json.decode(res.stdout)
for finding in findings:
msg = finding.get("message", "")
kwargs = {
"level": finding.get("level", "warning"),
"commit": commit,
}
if finding.get("line"):
kwargs["line"] = finding["line"]
ctx.emit.commit_message_finding(message = msg, **kwargs)
def register_commit_msg_checks():
shac.register_check(shac.check(_check_commit_message, name = "commit_msg"))