-
Notifications
You must be signed in to change notification settings - Fork 4
chore: add pre-commit hooks and commitlint configuration #14
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
base: main
Are you sure you want to change the base?
Conversation
- Add comprehensive pre-commit configuration with hooks for: - Code quality checks (black, isort, codespell) - Security scanning (gitleaks) - File validation (large files, private keys, yaml syntax) - Line ending and whitespace fixes - Add commitlint configuration with conventional commit format - Configure signed-off-by trailer requirement for commits Signed-off-by: Yihuang Yu <[email protected]>
📝 WalkthroughWalkthroughAdds a pre-commit configuration with multiple hooks (formatting, linting, security, spelling, commit message validation) and introduces a comprehensive commitlint configuration module exporting rules, ignores, formatter, help URL, and interactive prompt settings. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Pre-merge checks✅ Passed checks (3 passed)
Tip 👮 Agentic pre-merge checks are now available in preview!Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.
Please see the documentation for more information. Example: reviews:
pre_merge_checks:
custom_checks:
- name: "Undocumented Breaking Changes"
mode: "warning"
instructions: |
Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal). Please share your feedback with us on this Discord post. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (4)
commitlint.config.mjs (2)
33-41
: Avoid redundant checks: pick eithersigned-off-by
ortrailer-exists
Both rules enforce the same trailer; keeping both is redundant. Prefer a single rule (usually
trailer-exists
to ensure it’s in the trailer section)."subject-full-stop": [2, "never", "."], - "signed-off-by": [2, "always", "Signed-off-by:"], + // "signed-off-by": [2, "always", "Signed-off-by:"], /* * Enable type if we need, warn it currently. */ "type-enum": [0, "always", ['ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'rfe', 'style']], "type-case": [0, "always", "lower-case"], "type-empty": [0, "never"], "trailer-exists": [2, "always", "Signed-off-by:"]Reference list of supported rules includes both entries. (commitlint.js.org)
37-37
: Comment says “warn it currently”, but severity is off (0)If you want warnings (non‑blocking), set severity to 1.
- "type-enum": [0, "always", ['ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'rfe', 'style']], + "type-enum": [1, "always", ['ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'rfe', 'style']],Committed types are enforced by
type-enum
when enabled. (commitlint.js.org).pre-commit-config.yaml (2)
15-16
: FYI:no-commit-to-branch
already protectsmain
andmaster
by defaultYou can add more branches/patterns via
args
if needed; otherwise defaults are fine.Docs for defaults and args are here. (github.com)
35-41
: Optional: pin commitlint dependencies for stricter reproducibilityYou already pin the hook revision. To avoid potential
@commitlint/*
version mismatches when adding plugins later, consider pinning versions inadditional_dependencies
(e.g.,@commitlint/[email protected]
). Not required now, just future‑proofing.Background on dependency mismatches and rules recognition. (commitlint.js.org)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.pre-commit-config.yaml
(1 hunks)commitlint.config.mjs
(1 hunks)
🔇 Additional comments (5)
commitlint.config.mjs (3)
6-11
: Config shape and ESM export look goodUsing ESM with
export default
, extending@commitlint/config-conventional
, and settingformatter: '@commitlint/format'
matches current commitlint docs. (commitlint.js.org)
49-49
: Do you want to enforce Signed-off-by on merge commits too?With
defaultIgnores: true
, commitlint skips merge commits; that meansSigned-off-by:
won’t be required on merges. If you want it enforced everywhere, setdefaultIgnores: false
(and add customignores
if needed).Docs detail
ignores
anddefaultIgnores
. (commitlint.js.org)
53-55
: Nice touch onhelpUrl
Linking to Avocado’s commit style guide matches the local policy (72 char header, no trailing period, Signed‑off‑by).
Avocado commit style guide confirms these rules. (avocado-framework.readthedocs.io)
.pre-commit-config.yaml (2)
1-1
: Correct staging setup for commitlintInstalling both
pre-commit
andcommit-msg
hook types is the recommended pattern. (github.com)
3-17
: Hook versions look currentPinned versions are recent/stable:
pre-commit-hooks v6.0.0
,gitleaks v8.28.0
,isort 6.0.1
,black 25.9.0
,codespell v2.4.1
,commitlint-pre-commit-hook v9.22.0
.Refs: pre-commit-hooks v6.0.0 usage; Gitleaks v8.28.0 release; isort 6.0.1; Black 25.9.0; Codespell 2.4.1; commitlint-pre-commit-hook v9.22.0. (github.com)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @PaulYuuu, thank you for introducing the pre-commit hooks, this will definitely be an improvement of our static-checks. I have just couple of comments:
- IIUIC this should replace the current static-checks scripts, therefore I would remove them from repo so we won't have two solutions.
- The last missing static check is lint check. Unfortunatly that is higly configurable in static-checks therefore I don't think we can use regular lint hook for it and will need to run the current script via hooks. Something like this:
- repo: local
hooks:
- id: check-lint
name: Run pylint checks
entry: static-checks/check-lint
language: system
types: [python]
pass_filenames: false
args: ['--maxkb=5120'] | ||
- id: check-ast | ||
- id: check-yaml | ||
exclude: .cirrus.yml |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The .cirrus.yml
is only related to avocado-vt. For example, on avocado file we need to exclude different files for example examples/yaml_to_mux/
. If we won't be able to have a separated exclude list for different repos then I think we will have to remove this check.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, cirrus.yml does not follow the yaml syntax, but it's vt only. So I am okay to remove it from here, if we have this requirement at specific repository, we can use another github action or static-check.
- id: isort | ||
args: ['--profile=black'] | ||
- repo: https://github.com/psf/black | ||
rev: 25.9.0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Currently, we are using black version 22.3.0, but probably we can do update with this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for your confirmation. Indeed, IIRC, 22.3.0
is to keep maintain the compatibility of python3.8, as we dropped its support, so I hope we can upgrade some toolchains to align tool's bug fix or style rules.
E.g. 22.3.0
will format multiple string line but has an issue like
# original
test = (
"foo"
"bar"
)
# 22.3.0
test = ("foo" "bar")
# 25.9.0
test = ("foobar")
We can consider which version to use, not necessarily the latest version I put here.
Hello @richtja, I did not add pylint here is because the scope of pylint is not clear for me and I am not sure if we still need it, as we already have black and isort. I can also add pylint pre-commit hook, and for each repo, link the pylintrc from static-check submodule to the repo root, then it should works. |
Summary by CodeRabbit