发布流程

TVM 中的发布经理角色意味着您需要负责以下几件事

  • 准备发布说明

  • 准备您的设置

  • 准备发布候选版本

    • 创建发布分支

    • 通知社区发布时间

    • 在该分支中进行必要的版本更新的代码更改

  • 运行发布的投票流程

    • 创建发布候选版本

    • 发起投票和处理问题

  • 最终确定和发布正式版本

    • 更新 TVM 网站

    • 最终确定发布说明

    • 发布公告

准备发布说明

发布说明包含新功能、改进、错误修复、已知问题和弃用等。TVM 提供了每月开发报告,收集每个月的开发进度。这对编写发布说明的人员可能有所帮助。

建议在创建发布分支之前,先打开一个 Github issue 来收集关于发布说明草案的反馈。请参阅 tests/scripts/release 中的脚本,以获得一些起始点。

准备发布候选版本

在发布之前,可能需要在发布分支中进行一些代码更改。确保所有版本号都是最新的

准备 GPG 密钥

如果您已经上传了密钥,则可以跳过本节。

生成 gpg 密钥后,您需要将密钥上传到公钥服务器。请参阅 https://apache.org/dev/openpgp.html#generate-key 以获取详细信息。

如果要在另一台机器上进行发布,则可以通过 gpg --exportgpg --import 命令将 gpg 密钥传输到该机器。

最后一步是使用您的代码签名密钥更新 KEYS 文件 https://apache.org/dev/openpgp.html#export-public-key。检查对 TVM 主分支以及 ASF SVN 的更改,

# the --depth=files will avoid checkout existing folders
svn co --depth=files "https://dist.apache.org/repos/dist/dev/tvm" svn-tvm
cd svn-tvm
# edit KEYS file
svn ci --username $ASF_USERNAME --password "$ASF_PASSWORD" -m "Update KEYS"
# update downloads.apache.org (note that only PMC members can update the dist/release directory)
svn rm --username $ASF_USERNAME --password "$ASF_PASSWORD" https://dist.apache.org/repos/dist/release/tvm/KEYS -m "Update KEYS"
svn cp --username $ASF_USERNAME --password "$ASF_PASSWORD" https://dist.apache.org/repos/dist/dev/tvm/KEYS https://dist.apache.org/repos/dist/release/tvm/ -m "Update KEYS"

创建发布候选版本

要为 v0.6 版本创建发布候选分支

  • 需要在一个 pull request 中推送两个提交:第一个提交需要将版本号从 0.6.dev0 更新为 0.6.0,第二个提交在同一个 pull request 中将版本号从 0.6.0 更新为 0.7.dev0。对于此 pull request 的标题,需要指定:[Dont Squash]

  • 合并后,在第一个版本号提交上创建分支。分支应以不带补丁的基本发布版本命名。例如,要为 v0.6.0 创建候选版本,分支应为 v0.6,并将名为 v0.6.0.rc0 的标签推送到该分支的 HEAD。

git clone https://github.com/apache/tvm.git
cd tvm/

# Update version numbers of first commit
# ...
git add .
git commit -m "Bump version numbers to v0.6.0"

# Update version numbers of second commit
# ...
git add .
git commit -m "Bump version numbers to v0.7.dev0"

# After pull request merged
# cut branch on first commit
git checkout <first-commit-id>

# Replace v0.6 with the relevant version
git branch v0.6
git push --set-upstream origin v0.6

git tag v0.6.0.rc0
git push origin refs/tags/v0.6.0.rc0

确保源代码中的版本号正确(示例:https://github.com/apache/tvm/pull/14300)。运行 python3 version.py 以更新版本。版本号应在发布候选分支推送后立即更新。

转到 GitHub 仓库的 “releases” 选项卡,然后单击 “Draft a new release”,

  • 通过检查版本号并确保 TVM 可以构建并运行单元测试来验证发布。

  • v1.0.0.rc0 的形式提供发布标签,其中 0 表示它是第一个发布候选版本。标签必须完全匹配此模式 v[0-9]+\.[0-9]+\.[0-9]+\.rc[0-9]

  • 通过单击 Target: branch > Recent commits > $commit_hash 选择提交

  • 将发布说明草案复制并粘贴到描述框中

  • 选择 “This is a pre-release”

  • 单击 “Publish release”

请注意,在创建分支后仍然可以对分支应用更改,而标签是固定的。如果此版本需要任何更改,则必须创建新标签。

删除之前的发布候选版本(如果已应用),

git push --delete origin v0.6.0.rc1

创建源代码工件,

# Replace v0.6.0 with the relevant version
git clone git@github.com:apache/tvm.git apache-tvm-src-v0.6.0
cd apache-tvm-src-v0.6.0
git checkout v0.6
git submodule update --init --recursive
git checkout v0.6.0.rc0
rm -rf .DS_Store
find . -name ".git*" -print0 | xargs -0 rm -rf
cd ..
brew install gnu-tar
gtar -czvf apache-tvm-src-v0.6.0.rc0.tar.gz apache-tvm-src-v0.6.0

使用您的 GPG 密钥对创建的工件进行签名。首先确保您的 GPG 设置为使用正确的私钥,

$ cat ~/.gnupg/gpg.conf
default-key F42xxxxxxxxxxxxxxx

创建 GPG 签名以及文件的哈希值,

gpg --armor --output apache-tvm-src-v0.6.0.rc0.tar.gz.asc --detach-sig apache-tvm-src-v0.6.0.rc0.tar.gz
shasum -a 512 apache-tvm-src-v0.6.0.rc0.tar.gz > apache-tvm-src-v0.6.0.rc0.tar.gz.sha512

更新 main 分支上的 TVM 版本

创建发布候选版本后,请确保更新整个 main 分支中的版本号。例如,如果我们发布 v0.10.0,我们希望将整个代码库中的版本号从 v0.10.dev0 提升到 v0.11.dev0。此处提供了一个如何执行此操作的示例:https://github.com/apache/tvm/pull/12190。在 main 分支上,紧跟在发布分支中包含的最后一个提交之后,使用 dev 标签(例如 v0.11.dev0)标记下一个版本的提交。此标签是必要的,以便从 main 构建的每晚构建包具有正确的版本号。

上传发布候选版本

编辑 Github 上的发布页面,并上传之前步骤创建的工件。

发布经理还需要将工件上传到 ASF SVN,

# the --depth=files will avoid checkout existing folders
svn co --depth=files "https://dist.apache.org/repos/dist/dev/tvm" svn-tvm
cd svn-tvm
mkdir tvm-v0.6.0-rc0
# copy files into it
svn add tvm-0.6.0-rc0
svn ci --username $ASF_USERNAME --password "$ASF_PASSWORD" -m "Add RC"

Cherry-Picking(代码拣选)

在发布分支创建后但在发布投票通过之前,发布经理可以从 main 中拣选提交。由于发布分支在 GitHub 上受到保护,为了将这些修复合并到发布分支(例如 v0.11)中,发布经理必须提交一个 PR,其中包含针对发布分支拣选的更改。PR 应该大致匹配 main 中的原始 PR,并包含有关为何拣选提交的额外详细信息。然后,社区将对这些 PR 进行正常的审查和合并过程。请注意,针对发布分支的这些 PR 必须是签名的

对发布候选版本发起投票

第一次投票在 Apache TVM 开发者列表 (dev@tvm.apache.org) 上进行。为了获得更多关注,可以创建一个以 “[VOTE]” 开头的 GitHub issue,它将自动镜像到 dev@。查看过去的投票主题,了解此过程的进行方式。电子邮件应遵循此格式。

  • 在电子邮件中提供发布说明草案的链接

  • 提供发布候选版本工件的链接

  • 确保电子邮件为文本格式,并且链接正确

对于 dev@ 投票,必须至少有 3 个具有约束力的 +1 票,并且 +1 票多于 -1 票。投票结束后,您还应该发送一封包含总票数的摘要电子邮件,主题类似于 [VOTE][RESULT] …。

在 ASF 中,投票至少开放 72 小时(3 天)。如果您在规定时间内没有获得足够数量的约束性投票,则无法结束投票截止日期。您需要延长它。

如果投票失败,社区需要相应地修改发布:创建新的发布候选版本并重新运行投票过程。

发布正式版本

投票通过后,要将二进制文件上传到 Apache 镜像,您需要将二进制文件从 dev 目录(这应该是它们被投票的位置)移动到 release 目录。这种“移动”是将内容添加到实际发布目录的唯一方法。(注意:只有 PMC 可以移动到 release 目录)

export SVN_EDITOR=vim
svn mkdir https://dist.apache.org/repos/dist/release/tvm
svn mv https://dist.apache.org/repos/dist/dev/tvm/tvm-v0.6.0-rc2 https://dist.apache.org/repos/dist/release/tvm/tvm-v0.6.0

# If you've added your signing key to the KEYS file, also update the release copy.
svn co --depth=files "https://dist.apache.org/repos/dist/release/tvm" svn-tvm
curl "https://dist.apache.org/repos/dist/dev/tvm/KEYS" > svn-tvm/KEYS
(cd svn-tvm && svn ci --username $ASF_USERNAME --password "$ASF_PASSWORD" -m"Update KEYS")

请记住在 Github 上创建一个新的发布 TAG(在本例中为 v0.6.0),并删除预发布候选版本 TAG。

git push --delete origin v0.6.0.rc2

更新 TVM 网站

网站仓库位于 https://github.com/apache/tvm-site。修改下载页面以包含发布工件以及 GPG 签名和 SHA 哈希值。由于 TVM 的文档不断更新,因此请上传发布文档的固定版本。如果 CI 在您更新网站时删除了发布文档,您可以重新启动 Jenkins 上发布分支的 CI 构建。请参阅下面的示例代码以获得一个起始点。

git clone https://github.com/apache/tvm-site.git
pushd tvm-site
git checkout asf-site
pushd docs

# make release docs directory
mkdir v0.9.0
pushd v0.9.0

# download the release docs from CI
# find this URL by inspecting the CI logs for the most recent build of the release branch
curl -LO https://tvm-jenkins-artifacts-prod.s3.us-west-2.amazonaws.com/tvm/v0.9.0/1/docs/docs.tgz
tar xf docs.tgz
rm docs.tgz

# add the docs and push
git add .
git commit -m "Add v0.9.0 docs"
git push

之后,修改 下载页面 以支持最新版本。此处提供了一个如何执行此操作的示例:here

发布公告

announce@apache.orgdev@tvm.apache.org 发送公告电子邮件。公告应包含发布说明和下载页面的链接。

补丁版本发布

补丁版本应保留用于关键错误修复。补丁版本的发布过程必须与正常版本相同,但发布经理可以酌情缩短发布候选版本的投票窗口至 24 小时,以确保快速交付修复程序。每个补丁版本都应增加发布基本分支(例如 v0.11)上的版本号,并为发布候选版本创建标签(例如 v0.11.1.rc0)。