发布和验证发布版本

验证暂存发布版本

qianmoQqianmoQ· 更新于 2026-10-01· 阅读 8 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录
在 MacOS 和 Linux 上,前 4 个步骤可以自动完成。详情请参阅本章之后关于工具的章节。
  • 将发布投票邮件中指定 URL 下的所有暂存构件下载到一个目录中,我们暂且称之为 download-dir。
  • 验证签名是否正确:关于如何验证下载文件的额外 Apache 教程可在此处找到](http://www.apache.org/info/verification.html)。
gpg --verify apache-plc4x-{current-full-version}-source-release.zip.asc apache-plc4x-#{current-full-version}-source-release.zip
  • 检查该检查是否成功。
  • 检查签名是否引用了 Apache 邮箱地址。
  • 验证 SHA512 哈希值:
Mac/Linux: shasum -a512 apache-plc4x-{current-full-version}-source-release.zip

Windows (PowerShell): Get-FileHash -Algorithm SHA512 .\apache-plc4x-code-generation-{current-full-version}-source-release.zip | Format-List
  • 解压归档文件:
unzip apache-plc4x-{current-full-version}-source-release.zip
  • 验证解压后的源码包中存在 LICENSE、NOTICE、README、RELEASE_NOTES 文件。
  • 验证解压后的源码包中 LICENSE、NOTICE、README、RELEASE_NOTES 文件的内容。
(如果这是本年度的首次发布,请特别注意 NOTICE 文件中的年份)
  • [RM] 验证暂存的源码 README、RELEASE_NOTE 文件与解压后的源码包中的文件一致。
  • [RM] 在外部运行 RAT,以确保没有意外问题。
java -jar apache-rat-0.13.jar apache-plc4x-{current-full-version}-source-release.zip > rat.log
  • 搜索 SNAPSHOT 引用:
find . -type f -name 'pom.xml' -exec grep -l "SNAPSHOT" {} \;
  • 搜索 Copyright 引用,如果它们出现在文件头中,请确保包含这些引用的文件已在 LICENSE 文件中列出。
  • 按照 README.md 文件中的说明构建项目。
  • [RM] 启用所有 with-xyz profile 和测试、并在空的 Maven 本地仓库下构建项目:追加 -Dmaven.repo.local=../.m2(Windows 上请使用 -D"maven.repo.local"="../.m2")。

使用 RAT

即使我们使用 RAT 来确保源文件都带有文件头,项目中仍可能存在排除规则,使某些内容躲过检查。

避免遗漏重要文件的唯一方法,是在外部运行 RAT。

如果你还没有它,请从此处下载。

另外,我也喜欢针对包含源码发布包的 zip 归档文件运行 RAT,因为这样可以避免扫描到构建产生的二进制文件的问题(如果你在构建之后运行 RAT,它会为每一个 jar 文件和每一个 class 文件发出警告)。

java -jar apache-rat-0.13.jar apache-plc4x-1.0.0-source-release.zip > rat.log

将结果通过管道输出到文本文件,可以让你更方便地检查其中的内容。

发布工具

tools/validate-release.sh 会替你完成最困难的部分:验证 Nexus 中已暂存的制品能够从暂存的源码重新构建出来。

解压你上面下载的 apache-plc4x-1.0.0-source-release.zip,然后在解压后的目录中运行它:

   ./tools/validate-release.sh

它在与构建发布版相同的 Docker 容器中构建项目,然后使用 artifact:compare 将结果与暂存仓库进行比较。它拒绝在 SNAPSHOT 版本上运行,因此不会意外地指向开发用的代码检出,并且它需要 Docker 至少有 12 GB 可用内存。

只有 Java 构件会被比较——C、.NET 和 Python 的构件要么是平台特定的,要么根本不会发布到 Maven,因此没有可供比较的暂存内容。

上述签名和哈希校验仍然是手动完成的;不再有相应的脚本。

投票邮件模板

+1/-1 (binding)

Name

[] Download all staged artifacts under the url specified in the release vote email.
[] Verify the signature is correct.
[] Check if the signature references an Apache email address.
[] Verify the SHA512 hashes.
[] Unzip the archive.
[] Verify the existence of LICENSE, NOTICE, README, RELEASE_NOTES files in the extracted source bundle.
[] Verify the content of LICENSE, NOTICE, README, RELEASE_NOTES files in the extracted source bundle.
[] [RM] Verify the staged source README, RELEASE_NOTE files correspond to those in the extracted source bundle.
[] [RM] Run RAT externally to ensure there are no surprises.
[] Search for SNAPSHOT references
[] Search for Copyright references, and if they are in headers, make sure these files containing them are mentioned in the LICENSE file.
[] Build the project according to the information in the README.md file.
[] [RM] Build the project with all with-xyz profiles and tests enabled and an empty maven local repo.

如果一切正常,我会在方括号中填入「OK」。如果存在轻微问题,我会在其中填入「MINOR」;若原因较简短,我会在该行末尾附上说明;若原因较长,我会在清单之后另起一个较长的段落进行说明。如果存在严重问题,我会在其中填入「FAIL」,并以与轻微问题相同的方式添加注释。

评论

登录后参与评论

正在加载评论…