菜单

开发

相关源文件

本页面为希望为Dive项目做出贡献的开发者提供信息。它涵盖了开发环境的设置、从源代码构建工具、运行测试以及理解发布流程。有关Dive整体架构的信息,请参阅架构

设置开发环境

要为Dive贡献代码,您需要

  1. Go 1.24 或更高版本
  2. Docker (用于测试和构建容器镜像)
  3. Make (用于引导工具)

该项目使用基于工具的工作流,自动管理开发依赖项。

引导开发环境

Dive使用引导机制来安装所需的开发工具。初始引导由binny处理,然后由它管理其他工具。

来源: Makefile10-22 .binny.yaml1-64

开发工具

该项目在引导过程中会自动安装多个开发工具

工具目的
binny工具版本管理
task现代任务运行器 (Make的替代品)
golangci-lintGo linter,用于代码质量
goreleaser构建和发布自动化
chronicleChangelog 生成
bouncer许可证合规性检查
glowMarkdown渲染器
ghGitHub 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目录中。

来源: Taskfile.yaml314-342

测试

Dive使用多层级测试来确保质量

测试类型

来源: Taskfile.yaml169-189 Taskfile.yaml191-309

运行测试

单元测试的覆盖率阈值为25%,在CI中强制执行。

来源: Taskfile.yaml169-189

验收测试

该项目包含各种部署方法的验收测试

这些测试用于验证构建的产物在其预期的环境中是否正常工作。

来源: Taskfile.yaml191-309

代码质量工具

格式化和 Linting

来源: Taskfile.yaml119-151

静态分析

来源: Taskfile.yaml152-166

发布流程

发布流程通过GitHub Actions和goreleaser自动化。

来源: Taskfile.yaml356-385

创建发布

要创建新版本

  1. 确保所有更改都已提交并推送
  2. 运行 task release
  3. 按照交互式提示操作

发布流程将

  1. 使用chronicle生成变更日志
  2. 创建 GitHub 发布
  3. 构建并发布二进制文件、Docker镜像和软件包

来源: Taskfile.yaml356-364 Taskfile.yaml377-385

快照构建

用于测试预发布版本

这将创建一个完整的构建,所有产物都在./snapshot目录中,而不会发布到任何外部存储库。

来源: Taskfile.yaml327-342

CI 集成

该项目使用GitHub Actions进行持续集成。CI管道

  1. 引导开发环境
  2. 运行静态分析
  3. 运行测试
  4. 创建快照构建以供测试
  5. 执行验收测试

对于发布,CI管道还会

  1. 生成变更日志
  2. 创建 GitHub 发布
  3. 构建并发布所有产物

来源: .github/actions/bootstrap/action.yaml1-45 Taskfile.yaml367-385

可用的开发命令

命令描述
taskmake运行所有验证任务
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发布配置

来源: .gitignore1-48 Makefile1-48 Taskfile.yaml1-394