Dotbot 开发者指南:基于 Hatch 的测试、类型检查、格式化和发布工作流 开发工具【免费下载链接】dotbotA tool that bootstraps your dotfiles ⚡️项目地址https://gitcode.com/gh_mirrors/do/dotbot点击查看免费下载本指南面向希望在本地为 Dotbot 贡献代码或自行维护构建流程的开发者系统讲解这个 dotfiles 引导工具bootstrapper官方推荐的开发工作流如何用 Hatch 运行测试与覆盖率统计、执行 mypy 类型检查、用 Ruff 统一代码风格以及如何构建发布产物并理解 CI 的自动检查。读完本文你将掌握一套与 .github/workflows/ci.yml 完全一致的可复现开发命令并能理解 tests/conftest.py 如何为这个会写文件、会执行 shell 命令的项目提供安全的隔离测试环境。HatchDotbot 的官方项目管理器Dotbot 的开发流程统一建立在 Hatch 之上。Hatch 承担两件事一是根据pyproject.toml自动解析依赖二是在相互隔离的虚拟环境中运行测试、类型检查等操作避免各环节相互污染。从仓库根目录的 pyproject.toml 可以看到这一体系的落地构建后端为hatchling[build-system]段运行环境要求requires-python 3.7唯一运行时依赖是PyYAML6.0.1,7[project.scripts]将dotbot命令映射到dotbot.cli:main入口因此在 Hatch 环境或pip install dotbot之后可以直接用dotbot调用 CLI各 Hatch 环境hatch-test、types、coverage的矩阵、依赖与脚本均在此声明。使用任何 Hatch 命令前请先按官方安装指引装好 Hatch 本身pip install hatch即可。运行测试在仓库根目录执行hatch test即可在 Hatch 自动创建的隔离环境中运行全部测试。hatch test相当于把创建环境、安装依赖、执行 pytest打包成一步完成这也是 CI 中实际采用的调用方式见下文。常用选项hatch test支持若干实用选项选项作用-c测量测试覆盖率同时统计当前配置下哪些代码路径被测试覆盖-a按 Python 版本矩阵逐个版本运行测试追加测试路径参数只运行指定测试如tests/test_shell.py::test_shell_can_override_defaults其中矩阵的版本集合由 pyproject.toml 中的[[tool.hatch.envs.hatch-test.matrix]]定义python [3.7, 3.8, 3.9, 3.10, 3.11, 3.12, 3.13, pypy3.9, pypy3.10]。由于 Hatch 默认的测试依赖中coverage[toml]与 Python 3.7 不兼容pyproject.toml 还专门为py3.7覆写了依赖集合[tool.hatch.envs.hatch-test.overrides]段这是矩阵测试时值得注意的一个细节。运行单个测试Dotbot 的测试按指令类型分散在 tests 目录中如 test_shell.py、test_link.py、test_clean.py 等。当只想验证某一条逻辑时可以附加 pytest 的文件::测试函数定位语法hatch test tests/test_shell.py::test_shell_can_override_defaults以该测试为例它在配置中先设置defaults: {shell: {stdout: True}}再写一条显式stdout: False的 shell 指令最后断言命令输出没有被打印——验证指令级配置可以覆盖 defaults 默认值这一行为。对照 shell 插件实现 可以看到stdin/stdout/stderr/quiet都遵循指令字典取值优先否则回退到 defaults的取值顺序。测试隔离为什么 Dotbot 的测试需要特殊处理Dotbot 的核心职责是执行 shell 命令、读写文件系统、创建符号链接因此它的测试必须极其小心绝不能误伤开发机上的真实目录。仓库通过 tests/conftest.py 做了三层防护强制绝对路径与限定根目录rootfixtureconftest.py#L122-L226为每个测试创建独立临时目录并用unittest.mock.patch包装os.mkdir、os.symlink、shutil.rmtree、builtins.open等大量文件操作函数凡传入非绝对路径、或路径不在临时根目录之内的调用都会触发断言失败隔离 HOMEhomefixture 在 *nix 上 mockHOME环境变量、在 Windows 上 mockUSERPROFILE让测试里出现的~一律指向测试专属目录而不会碰到真实家目录跨平台路径标准化standardize_tmpfixture 处理 macOS 上/var是/private/var符号链接、Windows CI 上临时目录可能是短路径如RUNNER~1等问题确保路径比较在三个平台上行为一致。此外run_dotbotfixture 通过 mocksys.argv后直接调用dotbot.cli.main()入口见 src/dotbot/cli.py使测试无需真正启动子进程即可覆盖完整的 CLI 解析、配置读取与指令分发链路。在 Docker 容器中隔离运行如果你希望把测试彻底关进容器官方提供了现成方案在仓库根目录启动一个 Python 3.13 的 bookworm 容器并把当前目录挂载为/dotbotdocker run -it --rm -v ${PWD}:/dotbot -w /dotbot python:3.13-bookworm /bin/bash进入容器后先安装 Hatch再按上文方式运行测试pip install hatch hatch test类型检查Dotbot 源码从 1.21.0 版本起全面使用类型标注并用 mypy 做严格静态检查。运行hatch run types:check该命令的执行体定义在 pyproject.toml 的[tool.hatch.envs.types]段[tool.hatch.envs.types] extra-dependencies [mypy1.0.0, pytest] [tool.hatch.envs.types.scripts] check mypy --strict --install-types --non-interactive {args:src tests}可以看到types环境额外安装mypy1.0.0与pytest因为测试代码也在检查范围内并采用--strict严格模式同时覆盖src与tests两个目录。{args:...}语法允许你追加额外参数例如只检查单个文件。格式化与代码检查代码风格统一交给 Ruff——它同时承担 formatter格式化与 linter规则检查两个角色。运行hatch fmt该命令会自动应用安全修复safe fixes即那些不会改变程序语义、可放心自动改写的修复项例如删除多余空格、调整导入顺序等。如果你只希望检查而不改动文件则使用hatch fmt --check这也是 CI 中格式检查 job 使用的命令见下文。Ruff 的相关配置同样位于 pyproject.toml 的[tool.ruff]段例如extend-exclude [lib/*.py]表示跳过仓库内捆绑的 PyYAML 副本目录lint.ignore [FA100]关闭了一条对内置插件场景不适用的规则。打包与发布Hatch 同时管理构建与发布。构建产物命令为hatch build它会在dist/下产出两类标准的 Python 分发产物sdistSource Distribution源代码分发包含构建所需的源码与元数据wheelBuilt Distribution构建后的轮子包便于 pip 直接安装。构建目标配置在 pyproject.toml 的[tool.hatch.build.targets.sdist]段其中exclude [lib/]明确将仓库内捆绑的lib/pyyaml排除在 sdist 之外运行时依赖声明为PyYAML6.0.1,7后安装时由 pip 自动解决该依赖。发布命令为hatch publish它负责把构建好的产物发布到 PyPI。值得注意的是作为零安装、零外部依赖设计的工具Dotbot 通常以 git submodule/subrepo 的方式内嵌进用户的 dotfiles 仓库PyPI 发布pip install dotbot后以dotbot -c 配置路径调用只是官方提供的另一种使用形态参见仓库根目录的 README.md。持续集成CI 中的自动检查测试、类型检查、格式化/检查三项流程都已在 CI 中落地配置见 .github/workflows/ci.yml。整个工作流由三个 job 组成Job平台与版本执行的命令testubuntu-20.04、macos-latest 全 Python 矩阵3.73.13 及 pypy3.9/pypy3.10windows-latest 部分版本hatch test -v --cover --include python$(...) tests随后hatch run coverage:xml并上传 Codecovtypecheckubuntu-24.04 Python 3.13hatch run types:checkfmtubuntu-24.04 Python 3.13hatch fmt --check其中--cover即-c覆盖率的长选项形式--include python...用于把 CI 矩阵中的 Python 版本名映射给 Hatch 测试矩阵测试 job 还通过schedule: cron每周定时触发一次确保对上游依赖变动保持敏感。这意味着只要你在本地依次跑通hatch test、hatch run types:check、hatch fmt --check就等价于完整通过了 CI 的全部关卡。常用命令速查目的命令运行全部测试hatch test测试并统计覆盖率hatch test -c按 Python 版本矩阵测试hatch test -a运行单个测试hatch test tests/test_shell.py::test_shell_can_override_defaults容器内运行测试docker run -it --rm -v ${PWD}:/dotbot -w /dotbot python:3.13-bookworm /bin/bash后pip install hatch hatch testmypy 类型检查hatch run types:check格式化 lint自动安全修复hatch fmt仅检查格式不改动文件hatch fmt --check构建 sdist 与 wheelhatch build发布到 PyPIhatch publish综上Dotbot 的开发工作流是一条完全由 Hatch 编排、并被 CI 强制约束的流水线hatch test验证行为正确性配合 conftest 的强隔离机制保证测试安全、hatch run types:check用 mypy--strict守护类型、hatch fmt/hatch fmt --check统一代码风格、hatch build/hatch publish完成分发。照此流程开发你的本地改动将天然与仓库 CI 对齐也能更顺畅地参与 Dotbot 的后续贡献。赞分享开发工具【免费下载链接】dotbotA tool that bootstraps your dotfiles ⚡️项目地址https://gitcode.com/gh_mirrors/do/dotbot点击查看免费下载相关推荐Hatch 类型检查配置指南基于 Pyrefly 的 hatch check types 深入解析Hatch 类型检查配置指南基于 Pyrefly 的 hatch check types 深入解析 Hatch 内置的 hatch check types 命开发工具构建工具tinygrad 开发者工作流指南并行测试、类型检查、Lint 与 VIZ 性能剖析实战tinygrad 开发者工作流指南并行测试、类型检查、Lint 与 VIZ 性能剖析实战 本指南面向希望在 tinygrad 仓库内进行开发、调试与性能分析的人工智能深度学习大模型Elvish 仓库开发工作流指南格式化、测试、检查与 pre-push 钩子全解析Elvish 仓库开发工作流指南格式化、测试、检查与 pre push 钩子全解析 本文档面向希望在 Elvish 仓库中进行代码贡献的开发者系统讲解该项目CLI编程语言开发工具上一篇Elasticvue终极Elasticsearch可视化界面让数据管理变得如此简单下一篇Onekey终极Steam清单下载器免费解锁游戏资源管理新境界创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考