跳过正文
  1. Posts/

困扰社区三年的问题:我把 Hadolint 塞进 PyPI,终结手动安装的历史

·872 字·2 分钟· ·
沈显鹏
作者
沈显鹏
Engineer. Builder. Maintainer.
目录

如果你是一个对代码质量有追求的开发者,你的工具箱里一定少不了 Hadolint。作为 Dockerfile 语法检查的标杆,它能帮你写出更高质量的 Dockerfile。

但在集成到 pre-commit 工作流时,Hadolint 一直有个让人如鲠在喉的问题:它没有一个官方的、自动安装的 Binary 版本供 pre-commit 使用。

痛点回顾:消失的"自动化"最后一公里
#

如果你想在 pre-commit 里用 Hadolint,通常只有两条路:

  1. System 模式:你必须先在自己的 Mac/Linux/Windows 上手动下载 Hadolint 的二进制文件并配置好环境变量。如果团队里有 10 个人,你就得教 10 个人怎么装。
  2. Docker 模式:通过 hadolint-docker 运行。但这要求运行环境里必须装有 Docker,而且在 CI 环境下(如 GitHub Actions)套娃运行 Docker 容器,速度慢且配置复杂。

这个问题在 Hadolint GitHub 仓库上已经挂了三年之久 Issue #886


破局:让 Hadolint “伪装"成 Python 包
#

我的思路很直接:既然 pre-commit 对 Python 包的支持最完美,那我就给 Hadolint 套个 Python 的壳。

灵感来自之前打包 Gnuplot 的经历——将二进制文件直接打包成 Python 包上传到 PyPI,就能让 pre-commit 像安装任何其他 Python 工具一样安装它。

就在昨天,我正式发布了 hadolint-pyhadolint-pre-commit,解决了这个三年的老问题。具体做法分三步:

  1. 二进制封装:将 Hadolint 最新的原生二进制文件封装进 Python Wheel 包并上传到 PyPI。
  2. 零依赖安装:执行 pip install hadolint-py 时,Hadolint 可执行文件会自动落到 Python 环境的 bin/ 目录,直接可用。
  3. 无感集成:对于 pre-commit 来说,它现在就像调用 flake8black 一样简单,不再需要预装任何额外软件。

如何开始使用?
#

只需在 .pre-commit-config.yaml 中加入以下配置:

repos:
  - repo: https://github.com/shenxianpeng/hadolint-pre-commit
    rev: v2.14.0.1
    hooks:
      - id: hadolint

就这么简单。 无论本地开发还是 CI 流水线,只要有 Python 环境,Hadolint 就能即插即用。


这种方案可靠吗?
#

“二进制转 Python 包"的思路在 gnuplot-wheel 项目上已经得到验证,能极大地降低工具的准入门槛。hadolint-py 延续了同样的做法,只是把主角换成了 Hadolint。

如果你也曾被 Hadolint 的安装问题困扰过,或者正在寻找更简洁的 Dockerfile Lint 方案,欢迎试用并给个 Star。有任何问题或建议,也欢迎在 GitHub 上提 Issue 交流。

相关文章

找工作难?你可能还在用十年前的方式竞争

·1044 字·3 分钟
最近有个读者给我发私信,说现在找到工作很难,让我帮看看简历,想问问我有没有什么找工作的建议。现在的就业市场,似乎比以前更看重你可以做什么,做过什么。换句话说,学历重要,但能力更重要。

感谢 Canonical 的慷慨捐赠,让 badgepy 得以继续免费开源

·805 字·2 分钟
今天无意中发现,Canonical 已经连续四个月通过 thanks.dev 给我捐款支持 badgepy 的开发了。虽然金额不大,但这个反馈对我来说意义重大。它让我意识到,有时候我们只要坚持做对的事情,不去过多担心回报,结果可能会在一个完全意想不到的地方,以一种温暖的方式给你反馈。

别学 OpenClaw 了,它撑不过今年

·1517 字·4 分钟
OpenClaw 是一个很好的 idea,但不会是一个很好的 solution。高成本、安全隐患、大厂竞争、用户教育缺失——这四块石头压在一起,很难撑起一个长期繁荣的生态。