本页面为希望为Dive项目做出贡献的开发者提供信息。它涵盖了开发环境的设置、从源代码构建工具、运行测试以及理解发布流程。有关Dive整体架构的信息,请参阅架构。
要为Dive贡献代码,您需要
该项目使用基于工具的工作流,自动管理开发依赖项。
Dive使用引导机制来安装所需的开发工具。初始引导由binny处理,然后由它管理其他工具。
来源: Makefile10-22 .binny.yaml1-64
该项目在引导过程中会自动安装多个开发工具
| 工具 | 目的 |
|---|---|
| binny | 工具版本管理 |
| task | 现代任务运行器 (Make的替代品) |
| golangci-lint | Go linter,用于代码质量 |
| goreleaser | 构建和发布自动化 |
| chronicle | Changelog 生成 |
| bouncer | 许可证合规性检查 |
| glow | Markdown渲染器 |
| gh | GitHub CLI,用于发布 |
来源: .binny.yaml1-64 Taskfile.yaml12-18
该项目使用基于任务的构建系统,确保本地开发和CI环境之间的一致性。
来源: Taskfile.yaml40-65 .github/actions/bootstrap/action.yaml1-45
该项目使用binny来管理带有版本固定的开发工具。
来源: Makefile12-18 .binny.yaml1-64 Taskfile.yaml67-105
构建Dive源代码
构建系统使用goreleaser为多个平台创建二进制文件。构建的产物将位于./snapshot目录中。
Dive使用多层级测试来确保质量
来源: Taskfile.yaml169-189 Taskfile.yaml191-309
单元测试的覆盖率阈值为25%,在CI中强制执行。
该项目包含各种部署方法的验收测试
这些测试用于验证构建的产物在其预期的环境中是否正常工作。
发布流程通过GitHub Actions和goreleaser自动化。
要创建新版本
task release发布流程将
chronicle生成变更日志来源: Taskfile.yaml356-364 Taskfile.yaml377-385
用于测试预发布版本
这将创建一个完整的构建,所有产物都在./snapshot目录中,而不会发布到任何外部存储库。
该项目使用GitHub Actions进行持续集成。CI管道
对于发布,CI管道还会
来源: .github/actions/bootstrap/action.yaml1-45 Taskfile.yaml367-385
| 命令 | 描述 |
|---|---|
task 或 make | 运行所有验证任务 |
task tools | 安装开发工具 |
task format | 自动格式化源代码 |
task lint | 运行 linters |
task static-analysis | 运行所有静态分析 |
task test | 运行所有测试 |
task unit | 运行单元测试 |
task cli | 运行 CLI 测试 |
task build | 构建开发二进制文件 |
task snapshot | 创建快照发布 |
task release | 创建新发布 |
来源: Taskfile.yaml40-65 Makefile1-48
开发的关键目录和文件
| 路径 | 目的 |
|---|---|
.binny.yaml | 工具依赖配置 |
.github/ | GitHub Actions CI 工作流 |
.gitignore | 从版本控制中排除的文件 |
Makefile | 引导 make 目标 |
Taskfile.yaml | 开发任务 |
.goreleaser.yaml | 发布配置 |