diff --git a/.gitlint b/.gitlint new file mode 100644 index 00000000..58b99494 --- /dev/null +++ b/.gitlint @@ -0,0 +1,12 @@ +[general] +ignore=body-is-missing +extra-path=./scripts/gitlint_rules/ +debug=true +verbosity=3 +contrib = contrib-body-requires-signed-off-by, contrib-title-conventional-commits + +[title-max-length] +line-length=50 + +[body-max-line-length] +line-length=72 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 073df732..f0877c22 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,6 +31,15 @@ repos: - id: flake8 args: ["--config=setup.cfg"] additional_dependencies: [flake8-isort] + + - repo: https://github.com/jorisroovers/gitlint + rev: "v0.17.0" + hooks: + - id: gitlint + language: python + entry: gitlint + stages: [commit-msg] + args: [--msg-filename] # sets up .pre-commit-ci.yaml to ensure pre-commit dependencies stay up to date ci: diff --git a/scripts/gitlint_rules/rules.py b/scripts/gitlint_rules/rules.py new file mode 100644 index 00000000..5e6790c5 --- /dev/null +++ b/scripts/gitlint_rules/rules.py @@ -0,0 +1,41 @@ +# import re + +# from gitlint.rules import CommitRule, RuleViolation + +# EXAMPLE GITLINT CONFIGURATION + +# class SignedOffBy(CommitRule): +# """This rule will enforce that each commit contains a "Signed-off-by" line.""" + +# name = "body-requires-signed-off-by" +# id = "Workflows1" + +# def validate(self, commit): +# for line in commit.message.body: +# if line.startswith("Signed-off-by"): +# return + +# msg = "Body does not contain a 'Signed-Off-By' line" +# return [RuleViolation(self.id, msg, line_nr=1)] + + +# class ApprovedSubject(CommitRule): +# """Validate subject of each commit. + +# This rule will enforce that each commit starts with a "module: text" format. +# The 'module' can be any alphanumeric word, and the message must start with a colon followed by a space. +# """ + +# name = "approved-subject-in-title" +# id = "Workflows2" + +# MODULE_PATTERN = re.compile(r"^[a-zA-Z0-9_-]+: .+") + +# def validate(self, commit): +# title = commit.message.title + +# if not self.MODULE_PATTERN.match(title): +# msg = "Subject does not follow 'module: text' format" +# return [RuleViolation(self.id, msg, line_nr=1)] + +# return