菜单

发布流程

相关源文件

本文档详细介绍了 dive 的自动化发布流程,解释了新版本如何被标记、构建和发布到各种分发渠道。有关在本地构建 dive 的信息,请参阅 构建系统

概述

dive 项目使用 GitHub Actions 来自动化发布,确保软件的分发一致且可重现。发布流程管理着

  • Git 中的版本标记
  • 跨多个平台的二进制编译
  • 软件包创建(RPM、DEB)
  • Docker 镜像发布
  • Homebrew 公式更新

发布工作流

Dive 使用受控的发布流程和质量门,以确保只发布经过充分验证的代码。

发布流程图

来源:.github/workflows/release.yaml1-131

启动发布

通过 GitHub 的 workflow_dispatch 机制触发发布

  1. 仓库维护者导航到 GitHub 的 Actions 标签页
  2. 选择“Release”工作流
  3. 使用版本参数(例如:v1.0.0)触发工作流

版本必须

  • 以“v”前缀开头
  • 不与现有标签冲突

工作流首先进行版本验证

来源:.github/workflows/release.yaml9-76

产出生成

Dive 使用 GoReleaser 构建和发布发布产物。配置位于 .goreleaser.yaml

二进制产物

为以下平台编译二进制文件:

操作系统架构
Linuxamd64, arm64, ppc64le
macOSamd64, arm64
Windowsamd64

所有二进制文件都使用以下方式编译:

  • 静态链接 (CGO_ENABLED=0)
  • 嵌入版本信息
    • 版本号
    • Git 提交
    • 构建日期

来源:.goreleaser.yaml16-36

软件包产物

发布流程创建:

  • 面向 Red Hat 系发行版的 RPM 软件包
  • 面向 Debian 系发行版的 DEB 软件包

来源:.goreleaser.yaml52-59

Docker 镜像

Docker 镜像被构建并推送到

  1. Docker Hub:docker.io/wagoodman/dive
  2. GitHub Container Registry:ghcr.io/wagoodman/dive

镜像支持多架构,支持

  • amd64
  • arm64

对于每个注册表,都会创建以下标签:

  • 最新版
  • vX(主版本)
  • vX.Y(主版本.次版本)
  • vX.Y.Z(完整版本)

来源:.goreleaser.yaml61-148 Dockerfile1-12 .github/workflows/release.yaml94-112

Homebrew 公式

发布流程会更新 wagoodman/homebrew-dive 仓库中的 Homebrew 公式,使用户可以通过 Homebrew 安装 dive。

来源:.goreleaser.yaml38-44

质量验证

发布流程包含多个验证步骤:

  1. 发布前验证:检查静态分析、单元测试和验收测试是否已通过。
  2. 冒烟测试:测试已发布的 Docker 镜像功能。

这确保所有产物在公开可用之前都功能正常。

来源:.github/workflows/release.yaml10-76 .github/workflows/release.yaml127-130

实现细节

Docker 镜像构建

Docker 镜像基于 Alpine Linux 并包含:

  • Docker CLI(版本由构建参数指定)
  • Dive 二进制文件

该镜像旨在做到最小化,同时提供分析 Docker 镜像所需的所有功能。

来源:Dockerfile1-12

身份验证流程

工作流处理以下平台的身份验证:

  • GitHub(用于创建发布和更新 Homebrew 公式)
  • Docker Hub(用于发布 Docker 镜像)
  • GitHub Container Registry(用于发布 Docker 镜像)

这通过 GitHub Actions secret 进行管理。

来源:.github/workflows/release.yaml94-112 .github/workflows/release.yaml123-127

结论

dive 的发布流程高度自动化,确保了跨多个平台和分发渠道的可重现和一致的发布。该流程提供了质量门,以防止发布未经所有验证的代码,同时自动化了多平台发布的繁琐方面。