| <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Apache Dubbo – Committer Guidelines</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/</link><description>Recent content in Committer Guidelines on Apache Dubbo</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://dubbo.apache.org/en/latest/contribution-guidelines/committer/index.xml" rel="self" type="application/rss+xml"/><item><title>Latest: Apache 提交者注册流程</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/new-committer-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/new-committer-guide_dev/</guid><description> |
| <h2 id="一apache-提交者的产生">一、Apache 提交者的产生</h2> |
| <h3 id="项目孵化初始化提交者">项目孵化初始化提交者</h3> |
| <p>项目孵化阶段,在孵化项目提案中,会有初始化提交者列表这一选项。确认你是初始化提交者的一员。项目在 apache 孵化器社区投票通过后,提交者可以开始准备注册账户了。可以参看<a href="https://wiki.apache.org/incubator/">孵化器 wiki</a></p> |
| <h3 id="活跃的贡献者被选举为提交者">活跃的贡献者被选举为提交者</h3> |
| <p>在后期的开发过程中,活跃的贡献者可以被选举为提交者。见<a href="https://www.apache.org/dev/new-committers-guide.html#becoming-a-committer">如何成为 committer</a></p> |
| <h2 id="二个人开发者提交-icla">二、个人开发者提交 ICLA</h2> |
| <h3 id="1选择-apache-id">1、选择 apache id</h3> |
| <p>在<a href="http://people.apache.org/committer-index.html"> apache 提交者列表页</a>查看已经注册过的 apache id,</p> |
| <h3 id="2个人提交者授权协议icla">2、个人提交者授权协议(ICLA):</h3> |
| <p>下载<a href="https://www.apache.org/licenses/icla.pdf"> ICLA 模板</a>,查找可用的 id。将 icla.pdf 个人信息填写正确后打印,签名、扫描、并当做附件发送邮件给秘书 <a href="mailto:secretary@apache.org">secretary@apache.org</a>,秘书会帮忙创建 apache 用户 id。同时会创建一个 <a href="mailto:your_id@apache.org">your_id@apache.org</a> 的邮箱,可以在<a href="http://people.apache.org/committer-index.html"> apache 提交者列表页</a>查看查找用户是否已经创建。</p> |
| <h3 id="3导师帮助提交用户id创建请求">3、导师帮助提交用户id创建请求</h3> |
| <p>导师将帮助提交 apache 账户创建请求给 root 邮件组,会有人帮助建立 id。一般需要2天时间账户会建立,请等待并在<a href="http://people.apache.org/committer-index.html"> apache 提交者列表页</a>查看查找用户是否已经创建。</p> |
| <h2 id="三加入apache开发者组">三、加入apache开发者组</h2> |
| <ol> |
| <li>登陆 <a href="https://id.apache.org/">Apache 账户工具</a>,在登陆页面点击&quot;忘记密码&quot;设置始化密码,会有一封密码重置邮件发送到 forward 邮箱(在孵化项目提案中提交的开发者邮件)</li> |
| <li>关于 apache 邮箱:apache.org 邮箱并没有自己的邮件内容存储服务器。它需要借用其他邮件提供商的邮件内容存储、分发功能。在很多投票环节是建议使用 apache 邮箱的。 |
| 这里就有一个问题,怎么在其它邮箱里面配置 apache.org 邮箱转发功能: |
| <ul> |
| <li>收件箱:收取发送到 apache.org 的邮件。这个在第一步配置好 Apache 账户工具的 forward 邮箱就可以用 forward 邮箱收取邮件了</li> |
| <li>发件箱:将发出的邮件显示发件邮箱为 apache.org 邮箱。请参考:<a href="https://reference.apache.org/committer/email">设置 apache 邮箱指南</a>和<a href="https://support.google.com/mail/answer/22370"> gmail 邮箱设置方式</a>。 其他邮箱服务的设置方式不方便找到,gmail 的最方便,建议换成 gmail 邮箱(不是广告)。</li> |
| </ul> |
| </li> |
| <li>修改编辑页面的 homepage url,<a href="http://people.apache.org/committer-index.html">apache 提交者列表页</a>中你的账户能加主页链接。</li> |
| <li>修改编辑页面的 github 账户(username),提交确认后两个小时内会有邮件邀请你加入 github.com/apache-committers 组。这期间可以阅读<a href="http://www.apache.org/foundation/how-it-works.html#developers"> ASF 工作方式</a>以对 ASF 开发做一些基本了解。</li> |
| </ol> |
| <h2 id="四提交者获得对项目的写权限">四、提交者获得对项目的写权限</h2> |
| <p><a href="https://gitbox.apache.org/setup/">GitBox 账户链接工具</a>的操作</p> |
| <h3 id="apache账户授权">Apache账户授权</h3> |
| <p>按照提示授权对 Apache 账户的 OAuth 协议登入</p> |
| <h3 id="github账户授权">Github账户授权</h3> |
| <p>按照提示授权对 github 账户的 OAuth 协议登入</p> |
| <h3 id="在-githubcom-设置-github-账户两因素授权2fa">在 github.com 设置 github 账户两因素授权(2FA)</h3> |
| <p>按照<a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication">授权 GitHub 2FA wiki</a> 操作如下:</p> |
| <ul> |
| <li> |
| <p>在手机安装 “google 身份验证器” app</p> |
| </li> |
| <li> |
| <p>按照<a href="https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication">授权 GitHub 2FA wiki</a> 一步一步操作。</p> |
| <p>在<a href="https://github.com/settings/security">两因素授权验证</a>界面,不建议选择用手机扫描二维码,因为有些手机会扫描不出来。 |
| 请打开手机 “google 身份验证器” app,点“+”选择“输入提供的秘钥”: 在“账户名” input 框写入 github 账户。在“您的秘钥” input 框写入:打开的网页中 &ldquo;enter this text code&rdquo; 链接里面的文本。在 app 中点击&quot;添加&quot; 后,将为此账户生成6位数字动态。将此6位数字写入网页中的文本框,然后点 “Enable”。这样 2FA 就设置成功了。</p> |
| </li> |
| <li> |
| <p>退出并重新登陆 github,输入用户名、密码后会多一步动态密码的填写,该动态密码就是 google 身份验证器上面的动态密码</p> |
| </li> |
| <li> |
| <p>大概需要半个小时,会有邮件通知你已经加入了 xx project-committers 开发者组。你也可以进入 <a href="https://github.com/orgs/apache/teams">apache teams</a> 页面查看。</p> |
| </li> |
| <li> |
| <p>2FA 提交后,你已经 clone 的项目会有权限校验问题,解决方法为下面二选一:</p> |
| <ul> |
| <li>申请 Access Token: |
| 在 github 上生成 access token 后,指令行需要密码的地方就粘贴token。 |
| 参考官网<a href="https://docs.github.com/cn/repositories/creating-and-managing-repositories/troubleshooting-cloning-errors#provide-access-token-if-2fa-enabled">帮助链接一</a>和<a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token">帮助链接二</a></li> |
| <li>改用 ssh: |
| 在命令行执行 ssh-keygen 命令, 然后把pub文件中的内容粘贴到 github 上</li> |
| </ul> |
| </li> |
| <li> |
| <p>注意:一定要保证 github 的 2FA 为 &ldquo;enable&rdquo; 状态。当你将 2FA 设置为 &ldquo;off&rdquo; 时候,将会被对应的 apache committer 写权限组除名,直到你再次设置成功为止。</p> |
| </li> |
| </ul> |
| <h2 id="五其他">五、其他</h2> |
| <h3 id="the-apache-way">The Apache Way</h3> |
| <p>详情请参考 <a href="http://apache.org/foundation/governance/">wiki</a></p> |
| <p>社区重于代码,如果某问题或者方案没有在社区(邮件列表)讨论过,就当没有发生过</p> |
| <h3 id="小福利">小福利</h3> |
| <p>Jetbrains 给 apache 提交者一个小福利,就是可以免费使用 idea 的全产品系列。具体注册地址为:https://www.jetbrains.com/shop/eform/apache?product=ALL</p> |
| <h3 id="相关-wiki">相关 wiki</h3> |
| <p><a href="https://www.apache.org/dev/new-committers-guide.html">https://www.apache.org/dev/new-committers-guide.html</a></p></description></item><item><title>Latest: 如何准备 Apache Release</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/release-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/release-guide_dev/</guid><description> |
| <h2 id="理解-apache-发布的内容和流程">理解 Apache 发布的内容和流程</h2> |
| <p>总的来说,Source Release 是 Apache 关注的重点,也是发布的必须内容;而 Binary Release 是可选项,Dubbo 可以选择是否发布二进制包到 Apache 仓库或者发布到 Maven 中央仓库。</p> |
| <p>请参考以下链接,找到更多关于 ASF 的发布指南:</p> |
| <ul> |
| <li><a href="http://www.apache.org/dev/release-publishing">Apache Release Guide</a></li> |
| <li><a href="http://www.apache.org/dev/release.html">Apache Release Policy</a></li> |
| <li><a href="http://www.apache.org/dev/publishing-maven-artifacts.html">Maven Release Info</a></li> |
| </ul> |
| <h2 id="本地构建环境准备">本地构建环境准备</h2> |
| <p>主要包括签名工具、Maven 仓库认证相关准备</p> |
| <h3 id="安装gpg">安装GPG</h3> |
| <p>详细文档请参见<a href="https://www.gnupg.org/download/index.html">这里</a>, Mac OS 下配置如下</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ brew install gpg |
| </span></span><span style="display:flex;"><span>$ gpg --version <span style="color:#586e75">#检查版本,应该为2.x</span> |
| </span></span></code></pre></div><h3 id="用gpg生成key">用gpg生成key</h3> |
| <p>根据提示,生成 key</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ gpg --full-gen-key |
| </span></span><span style="display:flex;"><span>gpg <span style="color:#719e07">(</span>GnuPG<span style="color:#719e07">)</span> 2.0.12; Copyright <span style="color:#719e07">(</span>C<span style="color:#719e07">)</span> <span style="color:#2aa198">2009</span> Free Software Foundation, Inc. |
| </span></span><span style="display:flex;"><span>This is free software: you are free to change and redistribute it. |
| </span></span><span style="display:flex;"><span>There is NO WARRANTY, to the extent permitted by law. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Please <span style="color:#719e07">select</span> what kind of key you want: |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">(</span>1<span style="color:#719e07">)</span> RSA and RSA <span style="color:#719e07">(</span>default<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">(</span>2<span style="color:#719e07">)</span> DSA and Elgamal |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">(</span>3<span style="color:#719e07">)</span> DSA <span style="color:#719e07">(</span>sign only<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#719e07">(</span>4<span style="color:#719e07">)</span> RSA <span style="color:#719e07">(</span>sign only<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span>Your selection? <span style="color:#2aa198">1</span> |
| </span></span><span style="display:flex;"><span>RSA keys may be between <span style="color:#2aa198">1024</span> and <span style="color:#2aa198">4096</span> bits long. |
| </span></span><span style="display:flex;"><span>What keysize <span style="color:#719e07">do</span> you want? <span style="color:#719e07">(</span>2048<span style="color:#719e07">)</span> <span style="color:#2aa198">4096</span> |
| </span></span><span style="display:flex;"><span>Requested keysize is <span style="color:#2aa198">4096</span> bits |
| </span></span><span style="display:flex;"><span>Please specify how long the key should be valid. |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">0</span> <span style="color:#719e07">=</span> key does not expire |
| </span></span><span style="display:flex;"><span> &lt;n&gt; <span style="color:#719e07">=</span> key expires in n days |
| </span></span><span style="display:flex;"><span> &lt;n&gt;w <span style="color:#719e07">=</span> key expires in n weeks |
| </span></span><span style="display:flex;"><span> &lt;n&gt;m <span style="color:#719e07">=</span> key expires in n months |
| </span></span><span style="display:flex;"><span> &lt;n&gt;y <span style="color:#719e07">=</span> key expires in n years |
| </span></span><span style="display:flex;"><span>Key is valid <span style="color:#719e07">for</span>? <span style="color:#719e07">(</span>0<span style="color:#719e07">)</span> |
| </span></span><span style="display:flex;"><span>Key does not expire at all |
| </span></span><span style="display:flex;"><span>Is this correct? <span style="color:#719e07">(</span>y/N<span style="color:#719e07">)</span> y |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>GnuPG needs to construct a user ID to identify your key. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Real name: Robert Burrell Donkin |
| </span></span><span style="display:flex;"><span>Email address: rdonkin@apache.org |
| </span></span><span style="display:flex;"><span>Comment: CODE SIGNING KEY |
| </span></span><span style="display:flex;"><span>You selected this USER-ID: |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">&#34;Robert Burrell Donkin (CODE SIGNING KEY) &lt;rdonkin@apache.org&gt;&#34;</span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Change <span style="color:#719e07">(</span>N<span style="color:#719e07">)</span>ame, <span style="color:#719e07">(</span>C<span style="color:#719e07">)</span>omment, <span style="color:#719e07">(</span>E<span style="color:#719e07">)</span>mail or <span style="color:#719e07">(</span>O<span style="color:#719e07">)</span>kay/<span style="color:#719e07">(</span>Q<span style="color:#719e07">)</span>uit? O |
| </span></span><span style="display:flex;"><span>You need a Passphrase to protect your secret key. <span style="color:#586e75"># 填入密码,以后打包过程中会经常用到</span> |
| </span></span></code></pre></div><h3 id="查看-key-id">查看 key id</h3> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ gpg --list-keys |
| </span></span><span style="display:flex;"><span>pub rsa4096/28681CB1 2018-04-26 <span style="color:#586e75"># 28681CB1就是key id</span> |
| </span></span><span style="display:flex;"><span>uid <span style="color:#719e07">[</span>ultimate<span style="color:#719e07">]</span> liujun <span style="color:#719e07">(</span>apache-dubbo<span style="color:#719e07">)</span> &lt;liujun@apache.org&gt; |
| </span></span><span style="display:flex;"><span>sub rsa4096/D3D6984B 2018-04-26 |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 通过key id发送public key到keyserver</span> |
| </span></span><span style="display:flex;"><span>$ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1 |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 其中,pgpkeys.mit.edu为随意挑选的keyserver,keyserver列表为:https://sks-keyservers.net/status/,为相互之间是自动同步的,选任意一个都可以。</span> |
| </span></span></code></pre></div><p>如果有多个 public key,设置默认 key。修改<code>~/.gnupg/gpg.conf</code></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#586e75"># If you have more than 1 secret key in your keyring, you may want to</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># uncomment the following option and set your preferred keyid.</span> |
| </span></span><span style="display:flex;"><span>default-key 28681CB1 |
| </span></span></code></pre></div><p>如果有多个 public key, 也可以删除无用的 key:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#586e75">### 先删除私钥,再删除公钥</span> |
| </span></span><span style="display:flex;"><span>$ gpg --yes --delete-secret-keys shenglicao2@gmail.com <span style="color:#586e75">###老的私钥,指明邮箱即可</span> |
| </span></span><span style="display:flex;"><span>$ gpg --delete-keys 1808C6444C781C0AEA0AAD4C4D6A8007D20DB8A4 |
| </span></span></code></pre></div><blockquote> |
| <p>PS: 最新版本经过实测,本地没有gpg.conf这个文件,因此如果在执行过程中遇到签名失败,可以参考这个文章:https://blog.csdn.net/wenbo20182/article/details/72850810 或 <a href="https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors">https://d.sb/2016/11/gpg-inappropriate-ioctl-for-device-errors</a></p> |
| </blockquote> |
| <p>由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。 |
| 通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span><span style="color:#586e75"># fingerprint参数生成公钥指纹:</span> |
| </span></span><span style="display:flex;"><span>$ gpg --fingerprint liujun |
| </span></span><span style="display:flex;"><span>pub rsa4096 2019-10-17 <span style="color:#719e07">[</span>SC<span style="color:#719e07">]</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#2aa198">1376</span> A2FF 67E4 C477 <span style="color:#2aa198">5739</span> 09BD 7DB6 <span style="color:#2aa198">8550</span> D366 E4C0 |
| </span></span><span style="display:flex;"><span>uid <span style="color:#719e07">[</span>ultimate<span style="color:#719e07">]</span> liujun <span style="color:#719e07">(</span>CODE SIGNING KEY<span style="color:#719e07">)</span> &lt;liujun@apache.org&gt; |
| </span></span><span style="display:flex;"><span>sub rsa4096 2019-10-17 <span style="color:#719e07">[</span>E<span style="color:#719e07">]</span> |
| </span></span></code></pre></div><p>登录 <a href="https://id.apache.org">https://id.apache.org</a>, 将上面的 fingerprint (即 1376 A2FF 67E4 C477 5739 09BD 7DB6 8550 D366 E4C0) |
| 粘贴到自己的用户信息中 OpenPGP Public Key Primary Fingerprint</p> |
| <h3 id="设置-apache-中央仓库">设置 Apache 中央仓库</h3> |
| <p>Dubbo 项目的父 pom 为 Apache pom(2.7.0 以上版本需要,2.6.x 发布版本不需要此操作)</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;parent&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;groupId&gt;</span>org.apache<span style="color:#268bd2">&lt;/groupId&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;artifactId&gt;</span>apache<span style="color:#268bd2">&lt;/artifactId&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;version&gt;</span>19<span style="color:#268bd2">&lt;/version&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/parent&gt;</span> |
| </span></span></code></pre></div><p>添加以下内容到 .m2/settings.xml |
| 所有密码请使用 <a href="http://maven.apache.org/guides/mini/guide-encryption.html">maven-encryption-plugin</a>加密后再填入</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#268bd2">&lt;settings&gt;</span> |
| </span></span><span style="display:flex;"><span>... |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;servers&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- To publish a snapshot of some part of Maven --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;server&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;id&gt;</span>apache.snapshots.https<span style="color:#268bd2">&lt;/id&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;username&gt;</span> <span style="color:#586e75">&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style="color:#268bd2">&lt;/username&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;password&gt;</span> <span style="color:#586e75">&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style="color:#268bd2">&lt;/password&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/server&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- To stage a release of some part of Maven --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;server&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;id&gt;</span>apache.releases.https<span style="color:#268bd2">&lt;/id&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;username&gt;</span> <span style="color:#586e75">&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style="color:#268bd2">&lt;/username&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;password&gt;</span> <span style="color:#586e75">&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style="color:#268bd2">&lt;/password&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/server&gt;</span> |
| </span></span><span style="display:flex;"><span> ... |
| </span></span><span style="display:flex;"><span> <span style="color:#586e75">&lt;!-- gpg passphrase used when generate key --&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;server&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;id&gt;</span>gpg.passphrase<span style="color:#268bd2">&lt;/id&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;passphrase&gt;</span><span style="color:#586e75">&lt;!-- yourKeyPassword --&gt;</span><span style="color:#268bd2">&lt;/passphrase&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/server&gt;</span> |
| </span></span><span style="display:flex;"><span> <span style="color:#268bd2">&lt;/servers&gt;</span> |
| </span></span><span style="display:flex;"><span><span style="color:#268bd2">&lt;/settings&gt;</span> |
| </span></span></code></pre></div><h2 id="打包上传">打包&amp;上传</h2> |
| <h3 id="准备分支">准备分支</h3> |
| <p>从主干分支拉取新分支作为发布分支,如现在要发布$<code>{release_version}</code>版本,则从2.6.x拉出新分支<code>${release_version}-release</code>,此后<code>${release_version}</code> Release Candidates涉及的修改及打标签等都在<code>${release_version}-release</code>分支进行,最终发布完成后合入主干分支。</p> |
| <h3 id="编译打包">编译打包</h3> |
| <p>首先,在<code>${release_version}-release</code>分支验证maven组件打包、source源码打包、签名等是否都正常工作。<strong>2.6.x记得要使用1.6进行编译打包</strong></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mvn clean install -Prelease |
| </span></span><span style="display:flex;"><span>$ mvn deploy |
| </span></span></code></pre></div><p>上述命令将snapshot包推送到maven中央仓库</p> |
| <h3 id="用maven-release-plugin发布-废弃参考后一步"><del>用maven-release-plugin发布</del> (<code>废弃</code>,参考后一步)</h3> |
| <p><del>先用dryRun验证是否ok</del></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mvn release:prepare -Prelease -Darguments<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#719e07">=</span><span style="color:#b58900">true</span> -Dusername<span style="color:#719e07">=</span>YOUR GITHUB ID-DdryRun<span style="color:#719e07">=</span><span style="color:#b58900">true</span> |
| </span></span></code></pre></div><p><del>验证通过后,执行release:prepare</del></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mvn release:clean |
| </span></span><span style="display:flex;"><span>$ mvn release:prepare -Prelease -Darguments<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#719e07">=</span><span style="color:#b58900">true</span> -Dusername<span style="color:#719e07">=</span>YOUR GITHUB ID -DpushChanges<span style="color:#719e07">=</span><span style="color:#b58900">false</span> |
| </span></span></code></pre></div><blockquote> |
| <p>执行release插件时,如果指定了<code>-DpushChanges=true</code>, 插件会自动提交到远端的GitHub仓库中,此时就需要输入GitHub的密码,注意不是输入web页面的登录密码,而是一个<code>Personal access tokens</code>,获取方式详见<a href="https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token">这里</a></p> |
| </blockquote> |
| <blockquote> |
| <p>这里有一点要注意的是tag, 在执行过程中,需要选择发布的artifactId, 下一个版本artifactId以及发布版本的tag, tag默认的是dubbo-parent-xxxx,需要改成dubbo-xxxx</p> |
| </blockquote> |
| <p>执行完上述步骤后,你会发现:</p> |
| <ol> |
| <li><code>source-release.zip</code> 和 <code>bin-release.zip</code>包已经生成在<code>dubbo-distribution</code>目录下,请解压并检查文件是否完整</li> |
| <li>本地已经打出相应的tag,同时新增一个commit,名叫<code>[maven-release-plugin] prepare release dubbo-x.x.x</code></li> |
| <li>分支版本自动升级为<code>${release_version+1}-SNAPSHOT</code>,同时新增一个commit,名叫<code>[[maven-release-plugin] prepare for next development iteration</code></li> |
| </ol> |
| <blockquote> |
| <p>如果指定了<code>-DpushChanges=true</code>, 则本地提交会自动推送到远端的GitHub仓库。根据经验,建议不要指定为true,请设置为false,待本地检查通过之后再手动提交</p> |
| </blockquote> |
| <p><del>执行release:perform,做staging发布</del></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mvn -Prelease release:perform -Darguments<span style="color:#719e07">=</span><span style="color:#2aa198">&#34;-DskipTests&#34;</span> -DautoVersionSubmodules<span style="color:#719e07">=</span><span style="color:#b58900">true</span> -Dusername<span style="color:#719e07">=</span>YOUR GITHUB ID |
| </span></span></code></pre></div><p>此时插件会自动下载远端的tag对应的源码,编译后,将所有Artifacts发布到配置的远程<a href="http://repository.apache.org">maven仓库</a>,处于staging状态。</p> |
| <h3 id="使用mvn-deploy进行deploy">使用mvn deploy进行deploy</h3> |
| <blockquote> |
| <p>要求:maven 3.5+</p> |
| </blockquote> |
| <p>修改pom文件中的版本号,从2.7.x-SNAPSHOT改为2.7.x, 目前有3个地方需要修改。建议全文搜索。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ mvn clean install -Prelease |
| </span></span><span style="display:flex;"><span>$ mvn deploy -Prelease -DskipTests |
| </span></span></code></pre></div><p>所有被deploy到远程<a href="http://repository.apache.org">maven仓库</a>的Artifacts都会处于staging状态</p> |
| <h4 id="注意点">注意点</h4> |
| <ul> |
| <li>在deploy执行过程中,有可能因为网络等原因被中断,如果是这样,可以重新开始执行。</li> |
| <li>deploy执行到maven仓库的时候,请确认下包的总量是否正确。多次出现了包丢失的情况,特别是dubbo-parent包。</li> |
| </ul> |
| <h2 id="准备apache发布">准备Apache发布</h2> |
| <ol> |
| <li> |
| <p>准备svn本机环境(Apache使用svn托管项目的发布内容)</p> |
| </li> |
| <li> |
| <p>将dubbo checkout到本地目录</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ svn checkout https://dist.apache.org/repos/dist/dev/dubbo |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># 假定本地目录为 ~/apache/dubbo</span> |
| </span></span></code></pre></div></li> |
| <li> |
| <p>当前发布版本为${release_version},新建目录</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ <span style="color:#b58900">cd</span> ~/apache/dubbo <span style="color:#586e75"># dubbo svn根目录</span> |
| </span></span><span style="display:flex;"><span>$ mkdir <span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span> |
| </span></span></code></pre></div></li> |
| <li> |
| <p>添加public key到<a href="https://dist.apache.org/repos/dist/dev/dubbo/KEYS">KEYS</a>文件并提交到SVN仓库(第一次做发布的人需要做这个操作,具体操作参考KEYS文件里的说明)。KEYS主要是让参与投票的人在本地导入,用来校验sign的正确性</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ <span style="color:#719e07">(</span>gpg --list-sigs &lt;your name&gt; <span style="color:#719e07">&amp;&amp;</span> gpg --armor --export &lt;your name&gt;<span style="color:#719e07">)</span> &gt;&gt; KEYS |
| </span></span></code></pre></div></li> |
| <li> |
| <p>拷贝<code>dubbo-distribution/dubbo-apache-release/target</code>下的source相关的包到svn本地仓库<code>dubbo/${release_version}</code></p> |
| </li> |
| <li> |
| <p>生成sha512签名</p> |
| <p>针对<code>src.zip</code></p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ shasum -a <span style="color:#2aa198">512</span> apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-src.zip &gt;&gt; apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-src.zip.sha512 |
| </span></span></code></pre></div><p>针对<code>bin-release.zip</code>,需要增加<code>-b</code>参数,表明是一个二进制文件</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ shasum -b -a <span style="color:#2aa198">512</span> apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-bin.zip &gt;&gt; apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-bin.zip.sha512 |
| </span></span></code></pre></div></li> |
| <li> |
| <p>如果有binary release要同时发布</p> |
| <p>在<code>dubbo-distribution/dubbo-apache-release/target</code>目录下,拷贝<code>bin.zip</code>以及<code>bin.zip.asc</code>到svn本地仓库<code>dubbo/${release_version}</code>,参考第6步,生成sha512签名。</p> |
| </li> |
| <li> |
| <p>提交到Apache svn</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ svn status |
| </span></span><span style="display:flex;"><span>$ svn commit -m <span style="color:#2aa198">&#39;prepare for ${release_version} RC1&#39;</span> |
| </span></span></code></pre></div></li> |
| <li> |
| <p>关闭Maven的staging仓库</p> |
| <p>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的<code>Staging repositories</code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Close按钮,这个过程会进行一系列检查,检查通过以后,在下方的Summary标签页上出现一个连接,请保存好这个链接,需要放在接下来的投票邮件当中。链接应该是类似这样的: <code>https://repository.apache.org/content/repositories/orgapachedubbo-1015</code></p> |
| <blockquote> |
| <p>请注意点击Close可能会出现失败,通常是网络原因,只要重试几次就可以了。可以点击Summary旁边的Activity标签来确认。</p> |
| </blockquote> |
| </li> |
| </ol> |
| <h2 id="验证release-candidates">验证Release Candidates</h2> |
| <p>详细的检查列表请参考官方的<a href="https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist">check list</a></p> |
| <p>首先,从一下地址下载要发布的Release Candidate到本地环境:</p> |
| <pre> |
| https://dist.apache.org/repos/dist/dev/dubbo/${release_version}/ |
| </pre> |
| <p>然后,开始验证环节,验证包含但不限于以下内容和形式</p> |
| <h3 id="检查签名和hash等信息">检查签名和hash等信息</h3> |
| <h4 id="检查sha512哈希">检查sha512哈希</h4> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>$ shasum -c apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-src.zip.sha512 |
| </span></span><span style="display:flex;"><span>$ shasum -c apache-dubbo-<span style="color:#2aa198">${</span><span style="color:#268bd2">release_version</span><span style="color:#2aa198">}</span>-bin.zip.sha512 |
| </span></span></code></pre></div><h4 id="检查gpg签名">检查gpg签名</h4> |
| <p>如果是第一次检查,需要首先导入公钥。</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span> $ curl https://dist.apache.org/repos/dist/dev/dubbo/KEYS &gt;&gt; KEYS <span style="color:#586e75"># download public keys to local directory</span> |
| </span></span><span style="display:flex;"><span> $ gpg --import KEYS <span style="color:#586e75"># import keys</span> |
| </span></span><span style="display:flex;"><span> $ gpg —-edit-key liujun |
| </span></span><span style="display:flex;"><span> &gt; trust <span style="color:#586e75"># type trust command</span> |
| </span></span></code></pre></div><p>然后使用如下命令检查签名</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>gpg --verify apache-dubbo-3.0.4-src.zip.asc apache-dubbo-3.0.4-src.zip |
| </span></span><span style="display:flex;"><span>gpg --verify apache-dubbo-3.0.4-bin.zip.asc apache-dubbo-3.0.4-bin.zip |
| </span></span></code></pre></div><h3 id="检查源码包的文件内容">检查源码包的文件内容</h3> |
| <p>解压缩<code>apache-dubbo-${release_version}-src.zip</code>,进行如下检查:</p> |
| <ul> |
| <li>DISCLAIMER exists</li> |
| <li>LICENSE and NOTICE exists and contents are good</li> |
| <li>All files and no binary files exist</li> |
| <li>All files has standard ASF License header</li> |
| <li>Can compile from source</li> |
| <li>All unit tests can pass |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>mvn clean <span style="color:#b58900">test</span> <span style="color:#586e75"># This will run all unit tests</span> |
| </span></span><span style="display:flex;"><span><span style="color:#586e75"># you can also open rat and style plugin to check if every file meets requirements.</span> |
| </span></span><span style="display:flex;"><span>mvn clean <span style="color:#b58900">test</span> -Drat.skip<span style="color:#719e07">=</span><span style="color:#b58900">false</span> -Dcheckstyle.skip<span style="color:#719e07">=</span><span style="color:#b58900">false</span> |
| </span></span></code></pre></div></li> |
| <li>Release candidates match with corresponding tags, you can find tag link and hash in vote email. |
| <ul> |
| <li>check the version number in pom.xml are the same</li> |
| <li>check there are no extra files or directories in the source package, for example, no empty directories or useless log files,这里需要注意换行符是否一致<br> |
| <code>diff -r a rc_dir tag_dir</code></li> |
| <li>check the top n tag commits, dive into the related files and check if the source package has the same changes</li> |
| </ul> |
| </li> |
| </ul> |
| <h3 id="检查三方依赖的合规性">检查三方依赖的合规性</h3> |
| <p>按照Apache基金会合规性规定,源码或者是二进制分发包中均不能包含Category X的依赖,其中就常见的是包含了GPL/LGPL的依赖,即使是传递依赖也不行。因此在发版的时候需要通过以下的命令进行检查:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>mvn license:add-third-party -Dlicense.useMissingFile |
| </span></span><span style="display:flex;"><span>find . -name THIRD-PARTY.txt | xargs grep -E <span style="color:#2aa198">&#39;GPL|General Public License&#39;</span> | grep -v Apache | grep -v MIT | grep -v CDDL |
| </span></span></code></pre></div><p>如果一个依赖提供了双协议或多重协议,可以选择与Apache最兼容的一个协议。</p> |
| <p>你可以参考此文章:<a href="https://apache.org/legal/resolved.html">ASF第三方许可证策</a></p> |
| <h3 id="检查二进制包的文件内容">检查二进制包的文件内容</h3> |
| <p>解压缩<code>apache-dubbo-${release_version}-bin.zip</code>,进行如下检查:</p> |
| <ul> |
| <li>Check signatures are good</li> |
| <li>LICENSE and NOTICE exists and contents are good</li> |
| </ul> |
| <p>注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache 2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件</p> |
| <h2 id="进入投票">进入投票</h2> |
| <p>dubbo毕业之后,投票分只需要一次:</p> |
| <ol> |
| <li>Dubbo社区投票,发起投票邮件到dev@dubbo.apache.org。在社区开发者Review,经过至少72小时并统计到3个同意发版的binding票后(只有PMC的票才是binding),即可进入下一阶段的投票。</li> |
| </ol> |
| <p>Dubbo社区投票邮件模板:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Hello Dubbo Community, |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>This is a call for vote to release Apache Dubbo version 2.7.2. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>The release candidates: |
| </span></span><span style="display:flex;"><span>https://dist.apache.org/repos/dist/dev/dubbo/2.7.2/ |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>The staging repo: |
| </span></span><span style="display:flex;"><span>https://repository.apache.org/content/repositories/orgapachedubbo-1005 |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Git tag for the release: |
| </span></span><span style="display:flex;"><span>https://github.com/apache/dubbo/tree/dubbo-2.7.2 |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Hash for the release tag: |
| </span></span><span style="display:flex;"><span>afab04c53edab38d52275d2a198ea1aff7a4f41e |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Release Notes: |
| </span></span><span style="display:flex;"><span>https://github.com/apache/dubbo/releases/tag/untagged-4775c0a22c60fca55118 |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>The artifacts have been signed with Key : 28681CB1, which can be found in the keys file: |
| </span></span><span style="display:flex;"><span>https://dist.apache.org/repos/dist/dev/dubbo/KEYS |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>The vote will be open for at least 72 hours or until necessary number of votes are reached. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Please vote accordingly: |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>[ ] +1 approve |
| </span></span><span style="display:flex;"><span>[ ] +0 no opinion |
| </span></span><span style="display:flex;"><span>[ ] -1 disapprove with the reason |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Thanks, |
| </span></span><span style="display:flex;"><span>The Apache Dubbo Team |
| </span></span></code></pre></div><p>宣布投票结果模板:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>We’ve received 3 +1 binding votes and one +1 non-binding vote: |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>+1 binding, Ian Luo |
| </span></span><span style="display:flex;"><span>+1 binding, Huxing Zhang |
| </span></span><span style="display:flex;"><span>+1 binding, Jun Liu |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>+1 non-binding, Jerrick |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>I will start to release today. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Best regards, |
| </span></span><span style="display:flex;"><span>The Apache Dubbo Team |
| </span></span></code></pre></div><h2 id="正式发布">正式发布</h2> |
| <ol> |
| <li>将<a href="https://dist.apache.org/repos/dist/dev/dubbo">dev</a>目录下的发布包添加到<a href="https://dist.apache.org/repos/dist/release/dubbo">release</a>目录下,KEYS有更新的,也需要同步更新。</li> |
| <li>删除<a href="https://dist.apache.org/repos/dist/dev/dubbo">dev</a>目录下的发布包</li> |
| <li>删除<a href="https://dist.apache.org/repos/dist/release/dubbo">release</a>目录下上一个版本的发布包,这些包会被自动保存在<a href="https://archive.apache.org/dist/dubbo">这里</a></li> |
| <li>此步骤为发布2.7.0及以上版本必须要的步骤。在此之前请先确保所有的artifact都是ok的。登录http://repository.apache.org,点击左侧的<code>Staging repositories</code>,然后搜索Dubbo关键字,会出现一系列的仓库,选择你最近上传的仓库,然后点击上方的Release按钮.</li> |
| <li>发布GitHub上的<a href="https://github.com/apache/dubbo/releases">release notes</a></li> |
| <li>修改GitHub的Readme文件,将版本号更新到最新发布的版本</li> |
| <li>在官网下载<a href="https://dubbo.apache.org/en/blog/2020/05/18/past-releases/">页面</a>上添加最新版本的下载链接。最新的下载链接应该类似<a href="https://www.apache.org/dyn/closer.cgi?path=dubbo/$VERSION/apache-dubbo-$VERSION-source-release.zip">这样</a>. 同时更新以前版本的下载链接,改为类似<code>https://archive.apache.org/dist/dubbo/$VERSION/apache-dubbo-$VERSION-bin-release.zip</code>. 具体可以参考过往的<a href="https://dubbo.apache.org/en/blog/2020/05/18/past-releases/">下载链接</a> [可以参考] (<a href="https://github.com/apache/dubbo-website/pull/887">https://github.com/apache/dubbo-website/pull/887</a>)</li> |
| <li>合并<code>${release-version}-release</code>分支到对应的主干分支, 然后删除相应的release分支,例如: <code>git push origin --delete 2.7.0-release</code></li> |
| <li>发邮件到 <code>dev@dubbo.apache.org</code> |
| 宣布release邮件模板:</li> |
| </ol> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>Hello Community, |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>The Apache Dubbo team is pleased to announce that the |
| </span></span><span style="display:flex;"><span>2.6.6 has just been released. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Apache Dubbo™ is a high-performance, java based, open source |
| </span></span><span style="display:flex;"><span>RPC framework. Dubbo offers three key functionalities, which include |
| </span></span><span style="display:flex;"><span>interface based remote call, fault tolerance &amp; load balancing, and |
| </span></span><span style="display:flex;"><span>automatic service registration &amp; discovery. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>Both the source release[1] and the maven binary release[2] are available |
| </span></span><span style="display:flex;"><span>now, you can also find the detailed release notes here[3]. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>If you have any usage questions, or have problems when upgrading or find |
| </span></span><span style="display:flex;"><span>any problems about enhancements included in this release, please don’t |
| </span></span><span style="display:flex;"><span>hesitate to let us know by sending feedback to this mailing list or filing |
| </span></span><span style="display:flex;"><span>an issue on GitHub[4]. |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span> |
| </span></span><span style="display:flex;"><span>[1] https://dubbo.apache.org/en/blog/2020/05/18/past-releases/ |
| </span></span><span style="display:flex;"><span>[2] https://repo1.maven.org/maven2/org/apache/dubbo/dubbo |
| </span></span><span style="display:flex;"><span>[3] https://github.com/apache/dubbo/releases |
| </span></span><span style="display:flex;"><span>[4] https://github.com/apache/dubbo/issues |
| </span></span></code></pre></div><h2 id="完成maven-convenient-binary发布可选">完成Maven Convenient Binary发布(可选)</h2> |
| <p><strong>repository.apache.org</strong> nexus仓库的权限已经申请,参见<a href="https://issues.apache.org/jira/browse/INFRA-16451">jira</a></p> |
| <p>发布jar包到maven仓库,首先访问<a href="https://repository.apache.org">repository.apache.org</a>, 选择<code>staging repository</code>, 点击<code>release</code>按钮。等待一段时间之后,在<a href="https://repository.apache.org/content/repositories/releases/org/apache/dubbo/">这里</a>确认完整性和正确性. 发布到Maven中央仓库则还需要等待一段时间。可以在<a href="https://repo.maven.apache.org/maven2/org/apache/dubbo">这里</a>进行确认。</p> |
| <h2 id="faq">FAQ</h2> |
| <h4 id="gpg-signing-failed-inappropriate-ioctl-for-device">gpg: signing failed: Inappropriate ioctl for device</h4> |
| <p>If you&rsquo;ve encountered this error, try the following commands:</p> |
| <div class="highlight"><pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-gdscript3" data-lang="gdscript3"><span style="display:flex;"><span><span style="color:#719e07">export</span> GPG_TTY<span style="color:#719e07">=$</span>(tty) |
| </span></span></code></pre></div></description></item><item><title>Latest: 网站向导</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/website-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/website-guide_dev/</guid><description> |
| <ol> |
| <li>Apache Dubbo 的网站仓库是 <a href="https://github.com/apache/dubbo-website">https://github.com/apache/dubbo-website</a></li> |
| <li>网站构建完毕后,它会被自动发布到 dubbo.apache.org,您也可以通过 <a href="https://selfserve.apache.org">https://selfserve.apache.org</a> 手动触发(需要使用 Apache 账号登陆)</li> |
| </ol></description></item><item><title>Latest: 给问题打标签</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/label-an-issue-guide_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/label-an-issue-guide_dev/</guid><description> |
| <p>如果您正在处理一个问题,请记得<strong>给这个问题标记一个或者多个您认为有意义的标签</strong>。有了标签,其他开发人员就会很轻松地识别出问题,以便对其进行分类并跟踪进度。</p> |
| <p>对于需要编码和发版修复的 issues 和 pull requests,需要您<strong>将其标记为 <a href="https://github.com/apache/dubbo/milestones">milestone</a></strong>。</p> |
| <p>一些常用的标签:</p> |
| <ul> |
| <li>请求帮助 |
| <ul> |
| <li>help wanted</li> |
| <li>good first issue</li> |
| </ul> |
| </li> |
| <li>优先级 |
| <ul> |
| <li>priority/blocker</li> |
| <li>priority/high</li> |
| <li>priority/low</li> |
| <li>priority/normal</li> |
| </ul> |
| </li> |
| <li>状态 |
| <ul> |
| <li>status/need-triage</li> |
| <li>status/DO-NOT-MERGE</li> |
| <li>status/READY-TO-MERGE</li> |
| <li>status/invalid</li> |
| <li>status/wontfix</li> |
| </ul> |
| </li> |
| <li>类型 |
| <ul> |
| <li>type/bug</li> |
| <li>type/documentation</li> |
| <li>type/enhancement</li> |
| <li>type/feature</li> |
| </ul> |
| </li> |
| </ul></description></item><item><title>Latest: 官方 Dubbo 主页的维护</title><link>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/apache-dubbo-page_dev/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://dubbo.apache.org/en/latest/contribution-guidelines/committer/apache-dubbo-page_dev/</guid><description> |
| <p>Apache 有一个官方的网站,用来维护所有的孵化项目的信息。每一个孵化项目在这个网站下都有一个信息页。 |
| Dubbo 的信息页地址是 <a href="https://incubator.apache.org/projects/dubbo.html">https://incubator.apache.org/projects/dubbo.html</a>。</p> |
| <p>当项目发生比较大的变化,比如新的 committer 的加入,新的 PMC 的当选,或是新版本的 Release 等,都需要将这些更新信息维护到这个页面。</p> |
| <p>这个官方网站的项目地址是<a href="https://svn.apache.org/repos/asf/incubator/public/trunk">https://svn.apache.org/repos/asf/incubator/public/trunk</a>。</p> |
| <p>维护这个页面的方法如下:</p> |
| <p>1.安装 SVN。若是 Mac OS X 系统或是 Linux 系统,则自带了 SVN。若是 Windows 系统,则请首先自行安装 SVN。</p> |
| <p>2.用 SVN 将这个<a href="https://svn.apache.org/repos/asf/incubator/public/trunk">项目</a> checkout 下来 。</p> |
| <p>3.修改 content/projects/dubbo.xml 文件,并保存。</p> |
| <p>4.安装 ANT。执行 trunk 目录下的 build.sh 或者 build.bat 脚本构建项目。</p> |
| <p>5.构建完成后,可以用浏览器打开 target/site/projects/dubbo.html 文件,预览修改是否生效。</p> |
| <p>6.用 SVN 的 commit 命令将 dubbo.xml 文件提交到服务器,并且不要提交 dubbo.html 文件(因为服务器端会定时自动构建)。 |
| 此过程会要求输入Apache id和密码。</p> |
| <p>参考:</p> |
| <ol> |
| <li><a href="http://incubator.apache.org/guides/website.html">http://incubator.apache.org/guides/website.html</a></li> |
| <li><a href="https://svn.apache.org/repos/asf/incubator/public/trunk/README.txt">https://svn.apache.org/repos/asf/incubator/public/trunk/README.txt</a></li> |
| </ol></description></item></channel></rss> |