拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Ladybird 如何配置 pre-commit 钩子让提交前自动执行 lint 检查

Ladybird 如何配置 pre-commit 钩子让提交前自动执行 lint 检查【免费下载链接】ladybirdTruly independent web browser项目地址: https://gitcode.com/GitHub_Trending/la/ladybird在 Ladybird一个独立的 Web 浏览器项目中做代码提交时如果每次都要先手动跑一遍 CI 的 lint 脚本很容易在 push 之后才发现格式或规范问题。仓库内置的.pre-commit-config.yaml可以解决这个问题在本地 git 仓库中配置 pre-commit 钩子后每次git commit会自动执行项目的 lint 检查把 CI 会拦截的问题提前到提交这一步发现。适用的前提是你有一个 Ladybird 的本地克隆仓库并已按 pre-commit 官方文档安装好 pre-commit 工具仓库配置文件要求minimum_pre_commit_version: 3.2.0。钩子机制.pre-commit-config.yaml定义了什么仓库根目录的 .pre-commit-config.yaml 定义了两个本地钩子都通过language: system直接调用仓库内的脚本minimum_pre_commit_version: 3.2.0 repos: - repo: local hooks: - id: meta-lint-ci name: Running Meta/lint-ci.sh to ensure changes will pass linting on CI entry: bash Meta/lint-ci.sh stages: [ pre-commit ] language: system - id: meta-lint-commit name: Lint commit message to ensure it will pass the commit linting on CI entry: Meta/lint-commit.sh stages: [ commit-msg ] language: systemmeta-lint-ci挂在pre-commit阶段提交前运行 Meta/lint-ci.sh检查本次改动能否通过 CI 的代码 lintmeta-lint-commit挂在commit-msg阶段运行 Meta/lint-commit.sh检查提交信息是否符合规范。两个钩子可以只启用其中一个也可以都启用它们对应两条独立的安装命令。安装 pre-commit 工具钩子由 pre-commit 框架托管需要先在系统里安装 pre-commit 工具本身。Documentation/CodePolicy.md 的 “Commit hooks” 一节给出的指引是按 pre-commit 官方文档的 “Install” 一节完成安装再启用下述钩子。版本需满足配置文件中声明的 3.2.0 下限。启用 pre-commit 钩子主路径在 Ladybird 仓库根目录执行pre-commit install这条命令把meta-lint-ci钩子安装进.git/hooks/此后每次git commit都会先运行bash Meta/lint-ci.sh。Meta/lint-ci.sh 内部依次执行以下检查均位于 Meta/Linters/ 目录并对每一项输出[OK]或[FAIL]检查脚本用途check_debug_flags.sh检查调试宏使用check_flatpak.py检查 flatpak 相关配置check_html_doctype.py检查 HTML 文档的 doctypecheck_idl_files.py检查 IDL 文件check_libweb_realm_mentions.py检查 LibWeb 中 realm 相关引用check_newlines_at_eof.py检查文件末尾换行check_png_sizes.sh检查 PNG 尺寸check_style.py代码风格检查check_vcpkg.py检查 vcpkg 配置lint_executable_resources.sh检查可执行资源lint_prettier.sh通过 prettier 检查 JS/CSS 等文件lint_python.shPython 代码 lintlint_shell_scripts.shShell 脚本 lintlint_workflows.shCI workflow 文件 lintlint_ipc.py对所有*.ipc文件做 lint此外还有两个需要留意的步骤lint_clang_format.py --overwrite-inplace这一步会对.cpp、.h、.mm文件就地改写格式。也就是说钩子通过时工作区里的 C 文件可能已被自动格式化如果git diff仍有残留差异则该项记为[FAIL]。Rust 检查脚本先判断本次提交的文件列表里是否包含*.rs、Cargo.toml、Cargo.lock、rust-toolchain.toml、rustfmt.toml。通过钩子触发时只传入暂存的文件因此只有在改动涉及 Rust 文件时才执行cargo fmt --check和cargo clippy --release ... -- -D clippy::all否则直接打印 “No Rust files to check.”。脚本还会在未设置CARGO_TARGET_DIR时将其指向Build/release/cargo/build。验证钩子是否生效直接做一次提交来验证修改一个文件、git add后执行git commit。pre-commit 框架会先跑meta-lint-ci终端会按检查项逐项输出类似文档脚本的输出格式具体行随改动而变[OK]: Meta/Linters/check_style.py [FAIL]: Meta/Linters/lint_python.sh全部为[OK]时Meta/lint-ci.sh以 0 退出提交继续出现[FAIL]时脚本以失败项数量作为退出码钩子失败本次提交会被中止按报错修正后重新git add/git commit即可。如果不经过git commit也可以手动执行bash Meta/lint-ci.sh在仓库根目录运行来单独跑整套检查。注意不带参数手动运行时Rust 检查是无条件执行的而钩子触发时 Rust 检查只针对暂存列表中真正改动的文件。可选启用 commit-msg 钩子检查提交信息代码格式之外的另一个高频失败点是提交信息。Documentation/CodePolicy.md 要求提交标题格式为 “Category: Brief description”首词大写、72 字符换行、句尾不加句号等。要自动检查这些规则在仓库根目录执行pre-commit install --hook-type commit-msg安装后 Meta/lint-commit.sh 会在写提交信息后运行规则包括提交信息不允许包含 Windows 风格 CRLF 换行标题与正文之间必须有一个空行标题第一行必须带类别前缀如AK: ...也接受Revert 开头但拒绝Merge branch开头的合并提交类别后的第一个单词必须大写标题不能以句号结尾除单独成行的 URL 外每行不超过 72 字符正文不允许包含Signed-off-by:行。任一规则不满足时脚本会打印具体原因并回显整段提交信息提交被中止重写提交信息即可。边界与限制两个钩子都是language: system的本地脚本直接调用仓库内的Meta/lint-ci.sh和Meta/lint-commit.sh所以运行环境需要这些脚本依赖的工具如 clang-format、cargo、python、prettier 等对应 linter可用文档未逐一列出安装方式。Documentation/CodePolicy.md 原文提到钩子运行Meta/lint-ci.sh和Meta/lint-ports.py但当前 .pre-commit-config.yaml 中只定义了meta-lint-ci对应Meta/lint-ci.sh和meta-lint-commit对应Meta/lint-commit.sh两个钩子实际以配置文件内容为准。钩子失败时提交被本地中止这属于 pre-commit 框架的既有行为它只做拦截与提示不会替你修复问题--overwrite-inplace的 clang-format 改写除外。提交信息的类别命名用库或服务名、不用Libraries/Utilities这类目录名、可用组合多个类别等细则见 Documentation/CodePolicy.md 的提交信息部分钩子只负责格式层面的机械检查。完成上述配置后本地提交的失败点就与 CI 的 lint 检查对齐了提交能通过说明改动已过了Meta/lint-ci.sh的全套检查提交信息能通过说明格式符合Meta/lint-commit.sh的规则。【免费下载链接】ladybirdTruly independent web browser项目地址: https://gitcode.com/GitHub_Trending/la/ladybird创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门