pre-commit-hooks:基于 pre-commit 的本地钩子集合项目

用户可借助此项目在提交代码前进行自动化检查与修复,保障代码质量。项目提供多种实用钩子,仅依赖 Python 标准库,支持离线运行且启动快速。【此简介由AI生成】

分支3Tags9
当前项目代码仓暂无内容

openubmc-pre-commit-hooks

面向 openUBMC 的 pre-commit 钩子集合。本仓库只提供 openUBMC 专属、官方 pre-commit 生态中没有 的钩子;通用的代码卫生类钩子请直接引用官方仓库(见下文「推荐的官方 hooks」)。

所有钩子仅依赖 Python 标准库,零网络依赖、完全离线运行;采用 language: script 直接执行脚本,无需为钩子创建虚拟环境,启动更快。

特性

  • 零依赖:仅使用 Python 标准库,无需安装任何第三方包
  • 离线运行:首次克隆源码到本地缓存后,执行钩子不再联网
  • 轻量快速language: script 直接执行,不构建虚拟环境
  • 跨平台:纯 Python 实现,Windows / macOS / Linux 均可运行

提供的钩子

ID 作用 阶段 自动修复
conventional-commit 校验提交信息符合 Conventional Commits 规范 commit-msg
add-signoff-and-change-id 在 commit message 末尾追加 Signed-off-by 和 Change-Id commit-msg
check-sr 校验 .sr 文件语法(支持 C 风格注释) pre-commit

快速开始

1. 安装 pre-commit

pip3 install --user pre-commit

2. 在仓库根目录创建 .pre-commit-config.yaml

repos:
  - repo: https://gitcode.com/Polaris404/pre-commit-hooks
    rev: 0.1.0                        # 按需锁定到具体版本
    hooks:
      - id: conventional-commit
      - id: add-signoff-and-change-id

完整的推荐组合(含官方代码卫生 / clang-format / ruff)见仓库根目录的 .pre-commit-config.yaml 示例文件。

3. 安装 git 钩子

本仓库的两个钩子都在 commit-msg 阶段运行:

pre-commit install --hook-type commit-msg

如同时启用通用代码卫生类钩子(pre-commit 阶段),还需执行 pre-commit install

4. 验证

pre-commit run --all-files
pre-commit run --hook-stage commit-msg --commit-msg-filename .git/COMMIT_EDITMSG

钩子详解

conventional-commit

强制提交信息遵循 Conventional Commits 规范。格式:

type(scope)!: 简短描述
  • type(必填):feat / fix / docs / style / refactor / perf / test / build / ci / chore / revert
  • scope(可选):影响范围
  • !(可选):表示不兼容变更
  • 允许 GitCode MR 编号前缀,如 !123 feat: xxx

可通过参数限定允许的 type:

- id: conventional-commit
  args: [feat, fix, docs, refactor]

add-signoff-and-change-id

在 commit message 末尾自动追加两个 trailer(幂等,已存在则跳过):

  1. Signed-off-by: <name> <email> — 取自 git config user.name / user.email
    • 若两者任一为空,打印警告并跳过此 trailer(不阻断提交)。
    • 若最后非空行已是 trailer(Co-Authored-By / Signed-off-by / Change-Id / Reviewed-by / Tested-by / Acked-by),直接紧随其后;否则在正文与 trailer 之间插入一个空行分隔符。
  2. Change-Id: I<40 位十六进制> — 取 20 字节随机数据的 SHA-1,前缀 I

执行后效果示例:

feat(parser): 支持 CSR-058 字段

补全解析器对 CSR-058 的处理,覆盖读写两条路径。

Signed-off-by: Alice <alice@example.com>
Change-Id: Ia1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0

check-sr

校验 .sr 文件(openUBMC CSR 组件自描述 / PSR 产品自描述记录)的语法。.sr 的实质是 JSONC:标准 JSON + C 风格注释。参考 CSR 文档

工作流程:

  1. utf-8-sig 读取(自动剥除 BOM)。
  2. 用 6 状态有限状态机剥离 // 行注释与 /* */ 块注释,正确跳过字符串字面量内部的注释标记(例如 {"url": "https://example.com"} 中的 // 不会被误删)。
  3. 用标准库 json.loads 解析。

特性与约束:

  • 纯标准库实现,无 json5 / jsonc 等第三方依赖,执行环境无关。
  • 严格模式:仅容忍注释。剥离注释后必须是标准 JSON,不支持尾逗号、单引号字符串、裸 key、十六进制数字。
  • 失败时打印 <filepath>: <json 错误消息>(自带行列号),不做位置重映射。
  • pre-commit 通过 files: '\.sr$' 过滤,仅把暂存的 .sr 文件传给本钩子。

推荐的官方 hooks

通用能力请直接引用官方仓库,无需在本仓库重新实现:

用途 仓库 推荐 rev hook id
代码卫生(行尾空格 / EOF / 大文件 / JSON / YAML / 私钥 / 大小写冲突 / 合并冲突标记) https://github.com/pre-commit/pre-commit-hooks v6.0.0 trailing-whitespaceend-of-file-fixercheck-merge-conflictcheck-added-large-filescheck-case-conflictcheck-jsoncheck-yamldetect-private-key
C/C++ 格式化 https://github.com/pre-commit/mirrors-clang-format v22.1.5 clang-format
Python 静态检查 + 格式化 https://github.com/astral-sh/ruff-pre-commit v0.15.17 ruff-checkruff-format

为什么推荐 Ruff:单一工具同时替代 flake8 + pylint + isort + black,速度比传统组合快 10–100 倍,自带安全自动修复,配置最简。仓库根目录的 .pre-commit-config.yaml 已给出可直接复制的组合示例。

新开发机一次性配置(推荐)

pre-commit install 需要每个仓库单独执行。如果同时维护多个仓库、不想每次 clone 后都手动安装,可以配置 git 模板目录,让此后所有新 clone / init 的仓库自动带上钩子:

# 1. 指定 git 模板目录
git config --global init.templateDir ~/.git-template

# 2. 把 pre-commit 钩子写入模板目录
pre-commit init-templatedir ~/.git-template
pre-commit init-templatedir --hook-type commit-msg ~/.git-template

完成后再 git clone 任何 openUBMC 仓库,钩子会自动生效,无需再手动 pre-commit install

说明:

  • 对没有 .pre-commit-config.yaml 的仓库(如非 openUBMC 项目),pre-commit 会自动跳过、不报错,不影响正常提交。
  • 仅对此后新 clone / init 的仓库生效;此前已存在的仓库仍需手动 pre-commit install
  • pre-commit 工具本身仍需先 pip3 install --user pre-commit 安装。

团队协作

.pre-commit-config.yaml 随仓库分发后,新成员只需:

pip3 install --user pre-commit
pre-commit install
pre-commit install --hook-type commit-msg

环境要求

  • pre-commit >= 3.0.0
  • Python >= 3.9

项目介绍

用户可借助此项目在提交代码前进行自动化检查与修复,保障代码质量。项目提供多种实用钩子,仅依赖 Python 标准库,支持离线运行且启动快速。【此简介由AI生成】

定制我的领域