Skip to content

Gitleaks hook 的 Go / Python 依赖及后续处理讨论 #306

Description

@ooooo-create

在验证 PR #305 时,注意到 Gitleaks hook 的环境依赖与这次调整的两个本地 hook 有所不同,单独记录一下现状,方便后续讨论。

当前配置与依赖

- repo: https://github.com/gitleaks/gitleaks
  rev: v8.24.2
  hooks:
    - id: gitleaks
      entry: python .pre-commit-hooks/gitleaks_tracked.py
      always_run: true
      pass_filenames: false

这里虽然将 entry 覆盖成了本地 Python 脚本,但没有覆盖上游的 language: golang,所以仍有两层依赖:

  • 安装 Gitleaks 需要 Go。 pre-commit 仍会按 Go hook 的方式,通过 go install ./... 安装 Gitleaks。缺少 Go 时,pre-commit 3.0.0 及以上支持自动准备 Go 工具链;已有合适的 Go 或缓存环境时可以复用,并非每次运行都会重新安装。参见上游 hook 配置pre-commit 文档
  • 运行包装脚本需要 Python。 Go hook 环境不会为这个脚本创建 Python 虚拟环境,entry: python ... 仍要求 PATH 中存在 python。在未激活 Python 虚拟环境、系统仅提供 python3 命令时,即使 pre-commit 本身能运行,这个入口也会因找不到 python 而失败。激活提供 python 的虚拟环境可以满足这一依赖,但当前 hook 配置本身并未管理该解释器。

本地验证情况

本次使用 pre-commit 4.6.2,在未激活 Python 虚拟环境时运行检查;此时本机 PATH 中有 python3,但没有 python

pre-commit run --all-files --show-diff-on-failure

两个已调整的本地 hook 通过,Gitleaks 的输出如下:

check-conflict-markers...................................................Passed
format-ascii-boxes.......................................................Passed
Detect hardcoded secrets.................................................Failed
- hook id: gitleaks
- exit code: 1

Executable `python` not found

将已有 pre-commit Python 环境的 bin 目录加入 PATH 后,全量检查通过。也就是说,这里的 python 入口仍有与此前两个本地 hook 相同的命令可用性依赖。

本次没有清空缓存验证 Go 的首次安装,也没有遇到 Go 安装失败;上面的 Go 依赖说明依据上游配置和 pre-commit 的安装机制。本次只验证了本地 pre-commit,尚未验证 CI 使用的 prek 是否有相同表现。

PR #305 的范围与后续讨论

PR #305 目前只将以下两个本地 hook 改为 language: python,并指定 language_version: python3

  • check-conflict-markers
  • format-ascii-boxes

Gitleaks 配置在该 PR 中保持不变。它的包装脚本还需要调用 gitleaks 程序,因此不能只照搬上述两个 hook 的语言配置,还需要一起考虑扫描器的安装方式。

期望后续通过发布 Python 包的方式,结合 language: python 解决这部分环境依赖:由 Python 包封装扫描入口,并提供或管理所需的 Gitleaks 可执行程序,让 pre-commit 在独立的 Python 环境中安装和运行,避免依赖外部 PATH 中的 python,同时免去本地 Go 工具链的准备。调整时需要保留当前包装脚本对 Git 跟踪文件工作区快照的扫描行为。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions