Apache bRPC 发布全流程实战指南从 Release Notes 到正式发布的分步操作手册【免费下载链接】brpcbrpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. brpc means better RPC.项目地址: https://gitcode.com/GitHub_Trending/brpc/brpcApache bRPC即 brpc一个工业级 C RPC 框架作为 Apache 顶级项目其每个版本的发布都必须遵循 Apache 基金会规定的源码发布 签名校验 社区投票完整流程。本文以仓库内 community/release_en.md 为骨架结合仓库中的版本文件、构建配置与社区校验脚本系统讲解从确认 Release Notes、配置 GPG 签名密钥到制作源码包、发布至 Apache SVN、社区投票直至最终正式发布与公告的每一步操作读完即可独立担任一次 Apache bRPC Release Manager完成一个完整版本的发布。一、发布准备Preparation发布准备阶段通常耗时约1 周核心目标是确认发布内容并备好签名工具链。1.1 确认 Release Notes在正式动工前需要确认本次发布将要携带的Release Notes内容要求本次发布计划包含的变更没有遗漏对照 release 分支上已合并的 PR每条变更的描述清晰明确便于 PMC 与用户理解计划纳入本次版本的 PR 可以按时合并完成。官方推荐的 Release Notes 模板如下[Release Notes] Feature: - ... Bugfix: - ... Enhancement: - ... Other: - ...建议将 Feature / Bugfix / Enhancement / Other 分类填写这份 Notes 会同时用于后续投票邮件与最终 ANNOUNCE 公告邮件因此值得在此阶段仔细打磨。1.2 配置 GPG 签名密钥首次发布者必读Apache 要求所有发布制品必须有加密签名与校验和因此 GPGGnuPG是发布流程的地基。如果你不是第一次发布可以跳过本节。1.2.1 安装 GPG主流 Linux 发行版通常已预装 GnuPG。macOS 用户可用 Homebrew 安装brew install gnupg也可以从 GnuPG 官网下载安装包。注意 GnuPG 1.x 与 2.x 的命令略有差异本文示例基于GnuPG-2.3.1macOS。安装完成后检查版本号gpg --version1.2.2 创建密钥执行以下命令创建密钥gpg --full-gen-key按提示完成选择。邮箱必须使用 Apache 邮箱地址如xxxapache.orgReal Name可使用 Apache ID 或 GitHub ID。一次典型的交互过程如下Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) *default* (10) ECC (sign only) (14) Existing key from card Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (3072) 4096 Requested keysize is 4096 bits Please specify how long the key should be valid. 0 key does not expire n key expires in n days nw key expires in n weeks nm key expires in n months ny key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: LorinLee Email address: lorinleeapache.org Comment: lorinlees key You selected this USER-ID: LorinLee (lorinlees key) lorinleeapache.org Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O You need a Passphrase to protect your secret key. # 输入密码生成过程中系统会提示你敲击键盘、移动鼠标等以收集随机熵。完成后输出示例gpg: key 92E18A11B6585834 marked as ultimately trusted gpg: revocation certificate stored as /Users/lilei/.gnupg/openpgp-revocs.d/C30F211F071894258497F46392E18A11B6585834.rev public and secret key created and signed. pub rsa4096 2021-10-17 [SC] C30F211F071894258497F46392E18A11B6585834 uid LorinLee (lorinlees key) lorinleeapache.org sub rsa4096 2021-10-17 [E]其中C30F211F071894258497F46392E18A11B6585834就是你的公钥 ID92E18A11B6585834是短 ID。请务必妥善保管撤销证书revocation certificate与私钥口令。1.2.3 检查生成的密钥gpg --list-keys输出示例gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u /Users/lilei/.gnupg/pubring.kbx ---------------------------------- pub rsa4096 2021-10-17 [SC] C30F211F071894258497F46392E18A11B6585834 uid [ultimate] LorinLee (lorinlees key) lorinleeapache.org sub rsa4096 2021-10-17 [E]注意C30F211F071894258497F46392E18A11B6585834是完整的公钥 ID。1.2.4 将公钥发布到密钥服务器gpg --keyserver hkps://pgp.mit.edu --send-key C30F211F071894258497F46392E18A11B6585834密钥服务器也可以选用hkps://keys.openpgp.org或hkps://keyserver.ubuntu.com这两个提供网页查看密钥的功能。1.2.5 生成指纹并上传到 Apache 用户资料由于公钥服务器没有验证机制任何人都可以冒名上传公钥因此通常还需要在自己的网站/资料页公布公钥指纹供他人比对下载到的公钥是否可信。查看指纹gpg --fingerprint lorinlee # user id输出示例/Users/lilei/.gnupg/pubring.kbx ---------------------------------- pub rsa4096 2021-10-17 [SC] C30F 211F 0718 9425 8497 F463 92E1 8A11 B658 5834 uid [ultimate] LorinLee (lorinlees key) lorinleeapache.org sub rsa4096 2021-10-17 [E]把指纹C30F 211F 0718 9425 8497 F463 92E1 8A11 B658 5834粘贴到 Apache 用户信息id.apache.org的OpenPGP Public Key Primary Fingerprint:字段中保存。此后任何人在校验发布签名时都可以拿这个指纹与你公布的信息交叉核对。二、制作发布Make the release2.1 创建 release 分支分支策略取决于版本类型发布新的 MAJOR/MINOR 版本如1.0.0需要从 master 创建新分支release-1.0在既有 MINOR 版本上发布 PATCH 版本如1.0.1只需在已有的release-1.0分支上修改并追加本次要发布的内容。发布期间的所有代码修改都应在 release 分支如release-1.0上进行发布完成后需将 release 分支合并回 master。2.2 更新 NOTICE 文件检查并更新仓库根目录NOTICE文件中的YEAR年份字段。以当前仓库为例NOTICE 文件内容为Apache bRPC Copyright 2018-2026 The Apache Software Foundation年份应覆盖到发布当年如发布跨年需要把最新的年份补进区间。此外若本次发布引入了携带 NOTICE 的第三方依赖其 NOTICE 声明也需要按 Apache 规则并入发布版 NOTICE见后文检查发布内容。2.3 更新源码中的版本号Apache bRPC 的版本号分散在多个构建文件中发布时必须逐一同步更新并提交。以1.0.0为例更新RELEASE_VERSION文件编辑仓库根目录的 RELEASE_VERSION 文件更新版本号并提交。当前仓库该文件内容为1.17.0更新CMakeLists.txt编辑仓库根目录的 CMakeLists.txt更新BRPC_VERSION变量并提交。当前仓库第 45 行为set(BRPC_VERSION 1.17.0)该变量会被 CMake 构建系统用于生成BRPC_VERSION宏及安装包元信息是 C 源码层版本号的唯一来源。更新package/rpm/brpc.spec编辑 package/rpm/brpc.spec更新Version字段并提交。当前仓库该文件第 20-21 行为Name: brpc Version: 1.17.0同时该文件中的Source0也指向https://downloads.apache.org/brpc/%{version}/apache-brpc-%{version}-src.tar.gz说明 RPM 打包直接依赖正式发布目录中的源码包因此版本号必须与最终发布的制品严格一致。更新MODULE.bazel编辑仓库根目录的 MODULE.bazel更新module(...)中的version字段并提交。当前仓库第 18-22 行为module( name brpc, version 1.17.0, compatibility_level 1, )Bazel BCRBazel Central Registry依赖解析会以此版本号区分不同模块版本同样不能遗漏。小结一个版本号需要同步维护在RELEASE_VERSION、CMakeLists.txt、package/rpm/brpc.spec、MODULE.bazel四处当前仓库均为1.17.0发布时请逐一核对避免 CMake/Bazel/RPM 三套构建体系版本不一致。2.4 创建发布 tag将 release 分支拉到本地并打 annotated tag附注标签包含标签作者与信息git clone -b release-1.0 gitgithub.com:apache/brpc.git ~/brpc cd ~/brpc git tag -a 1.0.0 -m release 1.0.0 git push origin --tags使用-a创建附注标签而非轻量标签是 Apache 发布审计的常见要求便于追溯发布点。2.5 生成发布源码包使用git archive从 tag 生成带统一前缀的源码包两种写法等价git archive --formattar 1.0.0 --prefixapache-brpc-1.0.0-src/ | gzip apache-brpc-1.0.0-src.tar.gz或git archive --formattar.gz 1.0.0 --prefixapache-brpc-1.0.0-src/ --outputapache-brpc-1.0.0-src.tar.gz--prefix参数保证解包后所有文件位于apache-brpc-1.0.0-src/目录下这是 Apache 发布包的标准目录命名apache-项目-版本-src。2.6 生成 GPG 签名对源码包做分离式 ASCII 签名detached ASCII-armored signaturegpg -u lorinleeapache.org --armor --output apache-brpc-1.0.0-src.tar.gz.asc --detach-sign apache-brpc-1.0.0-src.tar.gz然后立即自验一次gpg --verify apache-brpc-1.0.0-src.tar.gz.asc apache-brpc-1.0.0-src.tar.gz-u指定签名使用的 key当本地存在多个 key 时尤其重要--armor输出文本格式便于在网页/邮件中展示。2.7 生成 SHA512 校验和sha512sum apache-brpc-1.0.0-src.tar.gz apache-brpc-1.0.0-src.tar.gz.sha512 sha512sum --check apache-brpc-1.0.0-src.tar.gz.sha512此时发布目录应包含三件套源码包apache-brpc-1.0.0-src.tar.gz、GPG 签名.asc、SHA512 校验和.sha512。三、发布到 Apache SVN 仓库Publish to Apache SVN repository3.1 Checkout dist/dev/brpc 目录Apache 的候选发布Release Candidate统一放在dist/dev目录。先创建本地工作目录并 checkout--username使用你自己的 Apache LDAP 用户名mkdir -p ~/brpc_svn/dev/ cd ~/brpc_svn/dev/ svn --usernamelorinlee co https://dist.apache.org/repos/dist/dev/brpc/ cd ~/brpc_svn/dev/brpc3.2 添加 GPG 公钥到 KEYS 文件新任 Release Manager 首次发布时必须把自己的公钥追加进KEYS文件该文件位于 SVN 仓库根目录供验证者下载导入(gpg --list-sigs lorinlee gpg -a --export lorinlee) KEYS如果本地有多个使用同一名字的 key应显式指定 key。按邮箱指定(gpg --list-sigs lorinleeapache.org gpg -a --export lorinleeapache.org) KEYS按指纹指定(gpg --list-sigs C30F211F071894258497F46392E18A11B6585834 gpg -a --export C30F211F071894258497F46392E18A11B6585834) KEYS3.3 将发布包放入 SVN 目录mkdir -p ~/brpc_svn/dev/brpc/1.0.0 cd ~/brpc_svn/dev/brpc/1.0.0 cp ~/brpc/apache-brpc-1.0.0-src.tar.gz ~/brpc_svn/dev/brpc/1.0.0 cp ~/brpc/apache-brpc-1.0.0-src.tar.gz.asc ~/brpc_svn/dev/brpc/1.0.0 cp ~/brpc/apache-brpc-1.0.0-src.tar.gz.sha512 ~/brpc_svn/dev/brpc/1.0.03.4 提交 SVN回到父目录用 Apache LDAP 账号提交cd ~/brpc_svn/dev/brpc svn add * svn --usernamelorinlee commit -m release 1.0.0提交后候选版本即可通过https://dist.apache.org/repos/dist/dev/brpc/1.0.0/被所有验证者访问。四、验证发布Verify release此环节是 Apache 发布流程中**验证者而非发布者**最常执行的步骤。仓库社区目录中还提供了配套的自动化校验脚本 community/apache-package-validator.sh 与检查清单 community/releasecheck.md可与下面的手工步骤互补。验证前进入候选版本目录cd ~/brpc_svn/dev/brpc/1.0.04.1 验证 SHA512 校验和sha512sum --check apache-brpc-1.0.0-src.tar.gz.sha5124.2 验证 GPG 签名首先导入发布者的公钥发布者本人可跳过验证者必须导入。从 SVN 仓库拉取KEYS并导入curl https://dist.apache.org/repos/dist/dev/brpc/KEYS KEYS gpg --import KEYS然后信任发布者的签名。用发布者的用户名进入编辑界面gpg --edit-key lorinlee交互过程gpg trust Please decide how far you trust this user to correctly verify other users keys (by looking at passports, checking fingerprints from different sources, etc.) 1 I dont know or wont say 2 I do NOT trust 3 I trust marginally 4 I trust fully 5 I trust ultimately m back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y gpg save最后验证签名gpg --verify apache-brpc-1.0.0-src.tar.gz.asc apache-brpc-1.0.0-src.tar.gz4.3 检查发布内容4.3.1 与 GitHub tag 源码包做差异对比应使用tar.gz格式的 tag 包进行对比curl -Lo tag-1.0.0.tar.gz https://github.com/apache/brpc/archive/refs/tags/1.0.0.tar.gz tar xvzf tag-1.0.0.tar.gz tar xvzf apache-brpc-1.0.0-src.tar.gz diff -r brpc-1.0.0 apache-brpc-1.0.0-srcdiff -r无输出即说明候选源码包与 tag 完全一致。4.3.2 文件内容合规检查对照 Apache 的 Source Release 验证要求与常见否决原因见下图逐项检查源码包中是否包含多余文件导致 tarball 过大LICENSE与NOTICE文件是否存在对应仓库根目录 LICENSE 与 NOTICENOTICE文件中的年份是否正确只应包含文本文件不应包含二进制文件如.jar、.o、编译产物等所有文件开头是否有 ASF 许可头Apache License header源码能否正确编译、单元测试能否通过是否存在冗余文件/文件夹如空目录第三方依赖许可证检查第三方依赖许可证与 Apache License 是否兼容所有第三方依赖的许可证是否已在LICENSE文件中声明依赖许可证的完整版本是否位于 license 目录若第三方依赖为 Apache License 且带有 NOTICE 文件其 NOTICE 内容也需并入发布版 NOTICE。社区维护的 community/releasecheck.md 与 community/apache-package-validator.sh 正是围绕上两图所列检查项实现的自动化工具发布者与验证者都可以直接复用。五、在 Apache bRPC 社区发起投票Vote in the Apache bRPC community投票阶段预计耗时3 天以上。5.1 投票流程向devbrpc.apache.org发送投票邮件。PMC 成员需根据本文档核对版本正确性后投票。至少经过 72 小时且获得 3 个 PMC 成员的 1 票方可进入下一阶段公布投票结果并将投票结果邮件发送至devbrpc.apache.org。5.2 投票邮件模板1Apache bRPC 社区投票邮件模板标题[VOTE] Release Apache bRPC 1.0.0内容注意Release Commit ID填写当前 release 分支最后一个提交的 commit IDHi Apache bRPC Community, This is a call for vote to release Apache bRPC version 1.0.0 [Release Note] - xxx The release candidates: https://dist.apache.org/repos/dist/dev/brpc/1.0.0/ Git tag for the release: https://github.com/apache/brpc/releases/tag/1.0.0 Release Commit ID: https://github.com/apache/brpc/commit/xxx Keys to verify the Release Candidate: https://dist.apache.org/repos/dist/dev/brpc/KEYS The vote will be open for at least 72 hours or until the necessary number of votes are reached. Please vote accordingly: [ ] 1 approve [ ] 0 no opinion [ ] -1 disapprove with the reason PMC vote is 1 binding, all others are 1 non-binding. Checklist for reference: [ ] Download links are valid. [ ] Checksums and PGP signatures are valid. [ ] Source code distributions have correct names matching the current release. [ ] LICENSE and NOTICE files are correct for each brpc repo. [ ] All files have license headers if necessary. [ ] No compiled archives bundled in source archive. Regards, LorinLee其中投票选项的含义为1赞同、0无意见、-1反对并需附理由PMC 的 1 为 binding有约束力票其他人为 non-binding无约束力票。2投票结果公布邮件模板标题[Result] [VOTE] Release Apache bRPC 1.0.0内容Hi all, The vote to release Apache bRPC 1.0.0 has passed. The vote PASSED with 3 binding 1, 3 non binding 1 and no -1 votes: Binding votes: - xxx - yyy - zzz Non-binding votes: - aaa - bbb - ccc Vote thread: xxx (vote email link in https://lists.apache.org/) Thank you to all the above members to help us to verify and vote for the 1.0.0 release. I will process to publish the release and send ANNOUNCE. Regards, LorinLee5.3 投票未通过如果社区投票未通过需要修改 release 分支代码重新打包、重新发起投票。此时应仔细阅读 -1 票附带的理由常见原因见 community/releasefail.png 所列项修正后走完新一轮验证与投票流程。六、完成发布Finish the release6.1 将发布包从 dist/dev 移动到 dist/release仅限 PMC 成员操作若KEYS有变动也会一并同步svn mv https://dist.apache.org/repos/dist/dev/brpc/1.0.0 https://dist.apache.org/repos/dist/release/brpc/1.0.0 -m release brpc 1.0.06.2 创建 GitHub Release在 GitHub Releases 页面找到对应版本 tag点击创建新 Release编辑版本号与版本描述点击Publish release。6.3 更新下载页面等待并确认新版本同步到 Apache 镜像之后更新 brpc 官网下载页面通过修改 brpc-website 仓库的代码实现中英文页面都需要更新。下载链接前缀规则GPG 签名文件与哈希校验文件使用前缀https://downloads.apache.org/brpc/源码包下载链接使用前缀https://dlcdn.apache.org/brpc/。6.4 发送发布完成公告邮件向devbrpc.apache.org和announceapache.org发送公告邮件。注意事项邮箱账号必须使用个人 Apache 邮箱邮件内容必须是纯文本格式plain text mode发送到announceapache.org的邮件会经过人工审核发送后请耐心等待通常一天内通过。公告邮件模板标题[ANNOUNCE] Apache bRPC 1.0.0 released内容Brief notes of this release只需列出本次发布的主要变更不必列出贡献者与 PR 编号建议参考上一次公告邮件Hi all, The Apache bRPC community is glad to announce the new release of Apache bRPC 1.0.0. Apache bRPC is an Industrial-grade RPC framework using C Language, which is often used in high performance systems such as Search, Storage, Machine learning, Advertisement, Recommendation etc. Brief notes of this release: - xxx - yyy - zzz More details regarding Apache brpc can be found at: https://brpc.apache.org/ The release is available for download at: https://brpc.apache.org/download/ The release notes can be found here: https://github.com/apache/brpc/releases/tag/1.0.0 Website: https://brpc.apache.org/ Apache bRPC Resources: - Issue: https://github.com/apache/brpc/issues/ - Mailing list: devbrpc.apache.org - Documents: https://brpc.apache.org/docs/ We would like to thank all contributors of the Apache bRPC community who made this release possible! Best Regards, Apache bRPC Community6.5 发布微信公众号公告参考历史公告样式在 bRPC 官方微信公众号同步发布本次版本发布消息。6.6 更新 master 分支发布完成后将 release 分支合并回master分支确保主干代码与发布版本保持一致并保留版本号更新记录。七、发布全流程速查阶段关键动作产物/出口准备确认 Release Notes配置 GPG 密钥并上传指纹签名密钥、Notes 草稿制作建 release 分支更新 NOTICE、RELEASE_VERSION、CMakeLists.txt、package/rpm/brpc.spec、MODULE.bazel打 tagtag、apache-brpc-ver-src.tar.gz.asc.sha512发布到 SVN上传至 dist/dev 并提交追加 KEYSdist/dev 候选目录验证SHA512 校验、GPG 签名验证、与 tag 对比、合规检查验证通过结论投票dev 邮件投票≥72h 且 ≥3 个 binding 1投票结果邮件完成svn mv 至 dist/releaseGitHub Release更新下载页ANNOUNCE 邮件合并 master正式版本整个流程中最容易被忽略的两个细节是版本号在四份构建文件中必须同步更新当前仓库版本为1.17.0分别见 RELEASE_VERSION、CMakeLists.txt、package/rpm/brpc.spec、MODULE.bazel以及验证阶段对第三方许可证的逐项核对——这两处一旦出错轻则导致构建产物版本不一致重则直接收获 -1 否决票。按照本文步骤逐项执行即可顺利完成一次合规的 Apache bRPC 版本发布。【免费下载链接】brpcbrpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recommendation etc. brpc means better RPC.项目地址: https://gitcode.com/GitHub_Trending/brpc/brpc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考