| <a href="https://cwiki.apache.org/confluence/display/SUBMARINE/Submarine+Release+Guidelines" target="_blank" rel="noopener noreferrer">Submarine Release Guidelines</a></p><h2 class="anchor anchorWithStickyNavbar_mojV" id="1-add-gpg-key">1. Add GPG KEY<a class="hash-link" href="#1-add-gpg-key" title="Direct link to heading">โ</a></h2><blockquote><p>Main references in this chapter:<a href="https://infra.apache.org/openpgp.html" target="_blank" rel="noopener noreferrer">https://infra.apache.org/openpgp.html</a> > <strong>This chapter is only needed for the first release manager of the project.</strong></p></blockquote><h3 class="anchor anchorWithStickyNavbar_mojV" id="11-install-gpg">1.1 Install gpg<a class="hash-link" href="#11-install-gpg" title="Direct link to heading">โ</a></h3><p>Detailed installation documents can refer to <a href="https://www.gnupg.org/download/index.html" target="_blank" rel="noopener noreferrer">tutorial</a>, The environment configuration of Mac OS is as follows:</p><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ brew </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> gpg</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ gpg --version </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">#Check the version๏ผshould be 2.x</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="12-generate-gpg-key">1.2 generate gpg Key<a class="hash-link" href="#12-generate-gpg-key" title="Direct link to heading">โ</a></h3><h4 class="anchor anchorWithStickyNavbar_mojV" id="need-to-pay-attention-to-the-following-points">Need to pay attention to the following points๏ผ<a class="hash-link" href="#need-to-pay-attention-to-the-following-points" title="Direct link to heading">โ</a></h4><ul><li>When entering the name, it is better to be consistent with the Full name registered in Apache</li><li>The mailbox used should be apache mailbox</li><li>Itโs better to use pinyin or English for the name, otherwise there will be garbled characters</li></ul><h4 class="anchor anchorWithStickyNavbar_mojV" id="follow-the-hintgenerate-a-key">Follow the hint๏ผgenerate a key<a class="hash-link" href="#follow-the-hintgenerate-a-key" title="Direct link to heading">โ</a></h4><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ gpg --full-gen-key</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gpg </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">GnuPG</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2.2</span><span class="token plain">.20</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> Copyright </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">C</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">2020</span><span class="token plain"> Free Software Foundation, Inc.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">This is </span><span class="token function" style="color:rgb(130, 170, 255)">free</span><span class="token plain"> software: you are </span><span class="token function" style="color:rgb(130, 170, 255)">free</span><span class="token plain"> to change and redistribute it.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">There is NO WARRANTY, to the extent permitted by law.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Please </span><span class="token keyword" style="font-style:italic">select</span><span class="token plain"> what kind of key you want:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> RSA and RSA </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">default</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> DSA and Elgamal</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">3</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> DSA </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">sign only</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">4</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> RSA </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">sign only</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">14</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> Existing key from card</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Your selection? </span><span class="token number" style="color:rgb(247, 140, 108)">1</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter 1 here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">RSA keys may be between </span><span class="token number" style="color:rgb(247, 140, 108)">1024</span><span class="token plain"> and </span><span class="token number" style="color:rgb(247, 140, 108)">4096</span><span class="token plain"> bits long.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">What keysize </span><span class="token keyword" style="font-style:italic">do</span><span class="token plain"> you want? </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">2048</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">4096</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter 4096 here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Requested keysize is </span><span class="token number" style="color:rgb(247, 140, 108)">4096</span><span class="token plain"> bits</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Please specify how long the key should be valid.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> key does not expire</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> key expires </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> n days</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain">w </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> key expires </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> n weeks</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain">m </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> key expires </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> n months</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain">y </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> key expires </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> n years</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Key is valid for? </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token number" style="color:rgb(247, 140, 108)">0</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter 0 here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Key does not expire at all</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Is this correct? </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">y/N</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> y </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter y here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GnuPG needs to construct a user ID to identify your key.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Real name: Guangxu Cheng </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter your name here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Email address: gxcheng@apache.org </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter your mailbox here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Comment: </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># enter some comment here (Optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">You selected this </span><span class="token environment constant" style="color:rgb(130, 170, 255)">USER</span><span class="token plain">-ID:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">"Guangxu Cheng <gxcheng@apache.org>"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Change </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">N</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">ame, </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">C</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">omment, </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">E</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">mail or </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">O</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">kay/</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">Q</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain">uit? O </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">#enter O here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">We need to generate a lot of random bytes. It is a good idea to perform</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">some other action </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">type on the keyboard, move the mouse, utilize the</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">disks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> during the prime generation</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> this gives the random number</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">generator a better chance to gain enough entropy.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">We need to generate a lot of random bytes. It is a good idea to perform</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">some other action </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">type on the keyboard, move the mouse, utilize the</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">disks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> during the prime generation</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> this gives the random number</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">generator a better chance to gain enough entropy.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># A dialog box will pop up, asking you to enter the key for this gpg.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ Please enter this passphrase โ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ โ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ Passphrase: _______________________________ โ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ โ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">OK</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">Cancel</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"> โ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># After entering the secret key, it will be created. And it will output the following information.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gpg: key 2DD587E7B10F3B1F marked as ultimately trusted</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">gpg: revocation certificate stored as </span><span class="token string" style="color:rgb(195, 232, 141)">'/Users/cheng/.gnupg/openpgp-revocs.d/41936314E25F402D5F7D73152DD587E7B10F3B1F.rev'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">public and secret key created and signed.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">pub rsa4096 </span><span class="token number" style="color:rgb(247, 140, 108)">2020</span><span class="token plain">-05-19 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">SC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> 41936314E25F402D5F7D73152DD587E7B10F3B1F</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">uid Guangxu Cheng </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">gxcheng@apache.org</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sub rsa4096 </span><span class="token number" style="color:rgb(247, 140, 108)">2020</span><span class="token plain">-05-19 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">E</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="13-upload-the-generated-key-to-the-public-server">1.3 Upload the generated key to the public server<a class="hash-link" href="#13-upload-the-generated-key-to-the-public-server" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ gpg --list-keys</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">-------------------------------</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">pub rsa4096 </span><span class="token number" style="color:rgb(247, 140, 108)">2020</span><span class="token plain">-05-18 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">SC</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> 5931F8CFD04B37A325E4465D8C0D31C4149B3A87</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">uid </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">ultimate</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"> Guangxu Cheng </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">gxcheng@apache.org</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">sub rsa4096 </span><span class="token number" style="color:rgb(247, 140, 108)">2020</span><span class="token plain">-05-18 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">[</span><span class="token plain">E</span><span class="token punctuation" style="color:rgb(199, 146, 234)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Send public key to keyserver via key id</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ gpg --keyserver pgpkeys.mit.edu --send-key </span><span class="token operator" style="color:rgb(137, 221, 255)"><</span><span class="token plain">key id</span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Among them, pgpkeys.mit.edu is a randomly selected keyserver, and the keyserver list is: https://sks-keyservers.net/status/, which is automatically synchronized with each other, you can choose any one.</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="14-check-whether-the-key-is-created-successfully">1.4 Check whether the key is created successfully<a class="hash-link" href="#14-check-whether-the-key-is-created-successfully" title="Direct link to heading">โ</a></h3><p>Through the following URL, use the email to check whether the upload is successful or not. It will take about a minute to find out. When searching, check the show full-key hashes under advance on <a href="http://keys.gnupg.net" target="_blank" rel="noopener noreferrer">http://keys.gnupg.net</a>.</p><p>The query results are as follows:</p><h3 class="anchor anchorWithStickyNavbar_mojV" id="15-add-your-gpg-public-key-to-the-keys-file">1.5 Add your gpg public key to the KEYS file<a class="hash-link" href="#15-add-your-gpg-public-key-to-the-keys-file" title="Direct link to heading">โ</a></h3><blockquote><p>SVN is required for this step</p></blockquote><p>The svn library of the DEV branch is <a href="https://dist.apache.org/repos/dist/dev/submarine" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/dev/submarine</a></p><p>The SVN library of the Release branch is <a href="https://dist.apache.org/repos/dist/release/submarine" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/release/submarine</a></p><h4 class="anchor anchorWithStickyNavbar_mojV" id="151-add-the-public-key-to-keys-in-the-dev-branch-to-release-the-rc-version">1.5.1 Add the public key to KEYS in the dev branch to release the RC version<a class="hash-link" href="#151-add-the-public-key-to-keys-in-the-dev-branch-to-release-the-rc-version" title="Direct link to heading">โ</a></h4><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ svn co https://dist.apache.org/repos/dist/dev/submarine /tmp/submarine-dist-dev</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># This step is relatively slow, and all versions will be copied. If the network is disconnected, use svn cleanup to delete the lock and re-execute it, and the transfer will be resumed.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> submarine-dist-dev</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-dev ~ </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">gpg --list-sigs YOUR_NAME@apache.org </span><span class="token operator" style="color:rgb(137, 221, 255)">&&</span><span class="token plain"> gpg --export --armor YOUR_NAME@apache.org</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">>></span><span class="token plain"> KEYS </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Append the KEY you generated to the file KEYS, it is best to check if it is correct after appending.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-dev ~ svn </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">.</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># If there is a KEYS file before, it is not needed.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-dev ~ svn ci -m </span><span class="token string" style="color:rgb(195, 232, 141)">"add gpg key for YOUR_NAME"</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Next, you will be asked to enter a username and password, just use your apache username and password.</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h4 class="anchor anchorWithStickyNavbar_mojV" id="152-add-the-public-key-to-keys-in-the-release-branch-to-release-the-official-version">1.5.2 Add the public key to KEYS in the release branch to release the official version<a class="hash-link" href="#152-add-the-public-key-to-keys-in-the-release-branch-to-release-the-official-version" title="Direct link to heading">โ</a></h4><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ svn co https://dist.apache.org/repos/dist/release/submarine /tmp/submarine-dist-release</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ ~ </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> submarine-dist-release</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-release ~ </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">gpg --list-sigs YOUR_NAME@apache.org </span><span class="token operator" style="color:rgb(137, 221, 255)">&&</span><span class="token plain"> gpg --export --armor YOUR_NAME@apache.org</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">>></span><span class="token plain"> KEYS </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Append the KEY you generated to the file KEYS, it is best to check if it is correct after appending.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-release ~ svn </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">.</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># If there is a KEYS file before, it is not needed.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">โ submarine-dist-release ~ svn ci -m </span><span class="token string" style="color:rgb(195, 232, 141)">"add gpg key for YOUR_NAME"</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Next, you will be asked to enter a username and password, just use your apache username and password.</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="16-upload-gpg-public-key-to-github-account">1.6 Upload GPG public key to Github account<a class="hash-link" href="#16-upload-gpg-public-key-to-github-account" title="Direct link to heading">โ</a></h3><ol><li>Go to <a href="https://github.com/settings/keys" target="_blank" rel="noopener noreferrer">https://github.com/settings/keys</a> and add GPG KEYS.</li><li>If you find "unverified" is written after the key after adding it, remember to bind the mailbox used in the GPG key to your github account (<a href="https://github.com/settings/emails" target="_blank" rel="noopener noreferrer">https://github.com/settings/emails</a>).</li></ol><h2 class="anchor anchorWithStickyNavbar_mojV" id="2-set-maven-settings">2. Set maven settings<a class="hash-link" href="#2-set-maven-settings" title="Direct link to heading">โ</a></h2><p><strong>Skip if it has already been set</strong></p><p>In the maven configuration file ~/.m2/settings.xml, add the following <code><server></code> item</p><div class="codeBlockContainer_I0IT language-xml theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-xml codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">settings</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name namespace" style="color:rgb(178, 204, 214)">xsi:</span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">schemaLocation</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">xmlns</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">http://maven.apache.org/SETTINGS/1.1.0</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag" style="color:rgb(255, 85, 114)"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token tag" style="color:rgb(255, 85, 114)"> </span><span class="token tag attr-name namespace" style="color:rgb(178, 204, 214)">xmlns:</span><span class="token tag attr-name" style="color:rgb(255, 203, 107)">xsi</span><span class="token tag attr-value punctuation attr-equals" style="color:rgb(199, 146, 234)">=</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag attr-value" style="color:rgb(255, 85, 114)">http://www.w3.org/2001/XMLSchema-instance</span><span class="token tag attr-value punctuation" style="color:rgb(199, 146, 234)">"</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">servers</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"><!-- Apache Repo Settings --></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">apache.snapshots.https</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">{user-id}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">{user-pass}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">apache.releases.https</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">{user-id}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">{user-pass}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">servers</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">profiles</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">profile</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">apache-release</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">properties</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.keyname</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">Your KEYID</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.keyname</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"><!-- Your GPG Keyname here --></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"><!-- Use an agent: Prevents being asked for the password during the build --></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.useagent</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">true</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.useagent</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"><</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.passphrase</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain">Your password of the private key</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">gpg.passphrase</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">properties</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> </span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">profile</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">profiles</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token tag punctuation" style="color:rgb(199, 146, 234)"></</span><span class="token tag" style="color:rgb(255, 85, 114)">settings</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">></span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h2 class="anchor anchorWithStickyNavbar_mojV" id="3-compile-and-package">3. Compile and package<a class="hash-link" href="#3-compile-and-package" title="Direct link to heading">โ</a></h2><h3 class="anchor anchorWithStickyNavbar_mojV" id="31-prepare-a-branch">3.1 Prepare a branch<a class="hash-link" href="#31-prepare-a-branch" title="Direct link to heading">โ</a></h3><ul><li><p>Pull the new branch from the main branch as a release branch, release-${release_version}</p></li><li><p>Update <code>CHANGES.md</code></p></li><li><p>Check whether the code is normal, including successful compilation, all unit tests, successful RAT check, etc.</p><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># build check</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ mvn clean package -Dmaven.javadoc.skip</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">true</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># RAT check</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ mvn apache-rat:check</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></li><li><p>Change the version number</p></li></ul><h3 class="anchor anchorWithStickyNavbar_mojV" id="32-create-the-tag">3.2 Create the tag<a class="hash-link" href="#32-create-the-tag" title="Direct link to heading">โ</a></h3><blockquote><p>Before creating the tag, make sure that the code has been checked for errors, including: successful compilation, all unit tests, and successful RAT checks, etc.</p></blockquote><p><strong>Create a tag with signature</strong></p><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ </span><span class="token assign-left variable" style="color:rgb(191, 199, 213)">git_tag</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ </span><span class="token function" style="color:rgb(130, 170, 255)">git</span><span class="token plain"> tag -s </span><span class="token variable" style="color:rgb(191, 199, 213)">$git_tag</span><span class="token plain"> -m </span><span class="token string" style="color:rgb(195, 232, 141)">"Tagging the </span><span class="token string variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token string" style="color:rgb(195, 232, 141)"> first Releae Candidate (Candidates start at zero)"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># If a error happened like gpg: signing failed: secret key not available, set the private key first.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">$ </span><span class="token function" style="color:rgb(130, 170, 255)">git</span><span class="token plain"> config user.signingkey </span><span class="token variable" style="color:rgb(191, 199, 213)">${KEY_ID}</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="33-package-the-source-code">3.3 Package the source code<a class="hash-link" href="#33-package-the-source-code" title="Direct link to heading">โ</a></h3><blockquote><p>After the tag is successfully created, the tag source code should be packaged into a tar package.</p></blockquote><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">mkdir</span><span class="token plain"> /tmp/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">git</span><span class="token plain"> archive --format</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">tar.gz --output</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"/tmp/apache-submarine-</span><span class="token string variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token string" style="color:rgb(195, 232, 141)">-</span><span class="token string variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token string" style="color:rgb(195, 232, 141)">/apache-submarine-</span><span class="token string variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token string" style="color:rgb(195, 232, 141)">-src.tar.gz"</span><span class="token plain"> --prefix</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">"apache-submarine-</span><span class="token string variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token string" style="color:rgb(195, 232, 141)">/"</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">$git_tag</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="34-packaged-binary-package">3.4 Packaged binary package<a class="hash-link" href="#34-packaged-binary-package" title="Direct link to heading">โ</a></h3><blockquote><p>Compile the source code packaged in the previous step</p></blockquote><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> /tmp/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Enter the source package directory.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">tar</span><span class="token plain"> xzvf apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-src.tar.gz </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Unzip the source package.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Enter the source directory.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">mvn compile clean </span><span class="token function" style="color:rgb(130, 170, 255)">install</span><span class="token plain"> package -DskipTests </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Compile.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">cp</span><span class="token plain"> ./submarine-distribution/target/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-bin.tar.gz /tmp/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain">/ </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Copy the binary package to the source package directory to facilitate signing the package in the next step.</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="35-sign-the-source-packagebinary-packagesha512">3.5 Sign the source package/binary package/sha512<a class="hash-link" href="#35-sign-the-source-packagebinary-packagesha512" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token for-or-select variable" style="color:rgb(191, 199, 213)">i</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> *.tar.gz</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">do</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">echo</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> gpg --print-md SHA512 </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">></span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain">.sha512 </span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">done</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Calculate SHA512</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token for-or-select variable" style="color:rgb(191, 199, 213)">i</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> *.tar.gz</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">do</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">echo</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> gpg --armor --output </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain">.asc --detach-sig </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">done</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Calculate the signature</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="36-check-whether-the-generated-signaturesha512-is-correct">3.6 Check whether the generated signature/sha512 is correct<a class="hash-link" href="#36-check-whether-the-generated-signaturesha512-is-correct" title="Direct link to heading">โ</a></h3><p>For example, verify that the signature is correct as follows:</p><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">for</span><span class="token plain"> </span><span class="token for-or-select variable" style="color:rgb(191, 199, 213)">i</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">in</span><span class="token plain"> *.tar.gz</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">do</span><span class="token plain"> </span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">echo</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> gpg --verify </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain">.asc </span><span class="token variable" style="color:rgb(191, 199, 213)">$i</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">;</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">done</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h2 class="anchor anchorWithStickyNavbar_mojV" id="4-prepare-for-apache-release">4. Prepare for Apache release<a class="hash-link" href="#4-prepare-for-apache-release" title="Direct link to heading">โ</a></h2><h3 class="anchor anchorWithStickyNavbar_mojV" id="41-publish-the-jar-package-to-the-apache-nexus-repository">4.1 Publish the jar package to the Apache Nexus repository<a class="hash-link" href="#41-publish-the-jar-package-to-the-apache-nexus-repository" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> /tmp/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Enter the source package directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">tar</span><span class="token plain"> xzvf apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-src.tar.gz </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Unzip the source package</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">mvn -DskipTests deploy -Papache-release -Dmaven.javadoc.skip</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain">true </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Start upload</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="42-upload-the-tag-to-git-repository">4.2 Upload the tag to git repository<a class="hash-link" href="#42-upload-the-tag-to-git-repository" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">git</span><span class="token plain"> push origin </span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="43-upload-the-compiled-file-to-dist">4.3 Upload the compiled file to dist<a class="hash-link" href="#43-upload-the-compiled-file-to-dist" title="Direct link to heading">โ</a></h3><blockquote><p>This step requires the use of SVN, the svn library of the DEV branch is <a href="https://dist.apache.org/repos/dist/dev/submarine" target="_blank" rel="noopener noreferrer">https://dist.apache.org/repos/dist/dev/submarine</a></p></blockquote><h3 class="anchor anchorWithStickyNavbar_mojV" id="431-checkout-submarine-to-a-local-directory">4.3.1 Checkout Submarine to a local directory<a class="hash-link" href="#431-checkout-submarine-to-a-local-directory" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># This step may be slow, and all versions will be tested. If the network is broken, use svn cleanup to delete the lock and re-execute it, and the upload will be resumed.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">svn co https://dist.apache.org/repos/dist/dev/submarine /tmp/submarine-dist-dev</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="432-add-the-public-key-to-the-keys-file-and-submit-it-to-the-svn-repository">4.3.2 Add the public key to the KEYS file and submit it to the SVN repository<a class="hash-link" href="#432-add-the-public-key-to-the-keys-file-and-submit-it-to-the-svn-repository" title="Direct link to heading">โ</a></h3><div class="codeBlockContainer_I0IT language-shell theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-shell codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token builtin class-name" style="color:rgb(255, 203, 107)">cd</span><span class="token plain"> /tmp/submarine-dist-dev</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">mkdir</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Create version directory</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Copy the source code package and signed package here.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">cp</span><span class="token plain"> /tmp/apache-submarine-</span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain">/*tar.gz* </span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain">/</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">svn status </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Check svn status.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">svn </span><span class="token function" style="color:rgb(130, 170, 255)">add</span><span class="token plain"> </span><span class="token variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token plain">-</span><span class="token variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Add to svn version.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">svn status </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Check svn status.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">svn commit -m </span><span class="token string" style="color:rgb(195, 232, 141)">"prepare for </span><span class="token string variable" style="color:rgb(191, 199, 213)">${release_version}</span><span class="token string" style="color:rgb(195, 232, 141)"> </span><span class="token string variable" style="color:rgb(191, 199, 213)">${rc_version}</span><span class="token string" style="color:rgb(195, 232, 141)">"</span><span class="token plain"> </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic"># Submit to svn remote server.</span><br></span></code></pre><button type="button" aria-label="Copy code to clipboard" title="Copy" class="copyButton_eDfN clean-btn"><span class="copyButtonIcons_W9eQ" aria-hidden="true"><svg class="copyButtonIcon_XEyF" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_i9w9" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div><h3 class="anchor anchorWithStickyNavbar_mojV" id="44-shut-down-the-apache-staging-repository">4.4 Shut down the Apache Staging repository<a class="hash-link" href="#44-shut-down-the-apache-staging-repository" title="Direct link to heading">โ</a></h3><blockquote><p>Please make sure all artifacts are fine.</p></blockquote><ol><li><strong>Log in</strong> <a href="http://repository.apache.org" target="_blank" rel="noopener noreferrer">http://repository.apache.org</a> , with Apache account</li><li>Click on Staging repositories on the left.</li><li>Search for Submarine keywords and select the repository you uploaded recently.</li><li>Click the Close button above, and a series of checks will be performed during this process.</li><li>After the check is passed, a link will appear on the Summary tab below. Please save this link and put it in the next voting email. |