blob: 31629e3b019a55c6a44fc013dbd0b94e28441252 [file] [log] [blame]
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-devDocs/HowToRelease">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Docusaurus v2.0.0-beta.18">
<title data-rh="true">How to Release | Apache Submarine</title><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://submarine.apache.org//docs/next/devDocs/HowToRelease"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="How to Release | Apache Submarine"><meta data-rh="true" name="description" content="&lt;!--"><meta data-rh="true" property="og:description" content="&lt;!--"><link data-rh="true" rel="icon" href="/img/submarine.ico"><link data-rh="true" rel="canonical" href="https://submarine.apache.org//docs/next/devDocs/HowToRelease"><link data-rh="true" rel="alternate" href="https://submarine.apache.org//docs/next/devDocs/HowToRelease" hreflang="en"><link data-rh="true" rel="alternate" href="https://submarine.apache.org//docs/next/devDocs/HowToRelease" hreflang="x-default"><link rel="stylesheet" href="/assets/css/styles.80258812.css">
<link rel="preload" href="/assets/js/runtime~main.c55a74e9.js" as="script">
<link rel="preload" href="/assets/js/main.47923baa.js" as="script">
</head>
<body class="navigation-with-keyboard">
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
<div role="region"><a href="#" class="skipToContent_ZgBM">Skip to main content</a></div><nav class="navbar navbar--fixed-top"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Navigation bar toggle" class="navbar__toggle clean-btn" type="button" tabindex="0"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_W2Cr themedImage--light_TfLj"><img src="/img/icons/128.png" alt="Apache Submarine Site Logo" class="themedImage_W2Cr themedImage--dark_oUvU"></div><b class="navbar__title">Apache Submarine</b></a><a class="navbar__item navbar__link navbar__link--active" href="/docs/next/gettingStarted/quickstart">Docs</a><a class="navbar__item navbar__link" href="/docs/next/api/environment">API</a><a class="navbar__item navbar__link" href="/docs/next/download">Download</a></div><div class="navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class="navbar__link" aria-haspopup="true" aria-expanded="false" role="button" href="/docs/next/gettingStarted/quickstart">master ๐Ÿƒ</a><ul class="dropdown__menu"><li><a aria-current="page" class="dropdown__link dropdown__link--active" href="/docs/next/devDocs/HowToRelease">master ๐Ÿƒ</a></li><li><a class="dropdown__link" href="/docs/gettingStarted/quickstart">0.6.0</a></li><li><a class="dropdown__link" href="/versions">All versions</a></li></ul></div><a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href="#" aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link">Apache</a><ul class="dropdown__menu"><li><a href="https://www.apache.org/foundation/how-it-works.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Apache Software Foundation<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/events/current-event" target="_blank" rel="noopener noreferrer" class="dropdown__link">Events<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/licenses/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Apache License<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Thanks<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/security/" target="_blank" rel="noopener noreferrer" class="dropdown__link">Security<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li><a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener noreferrer" class="dropdown__link">Sponsorship<svg width="12" height="12" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="toggle_S7eR colorModeToggle_vKtC"><button class="clean-btn toggleButton_rCf9 toggleButtonDisabled_Pu9x" type="button" disabled="" title="Switch between dark and light mode (currently light mode)" aria-label="Switch between dark and light mode (currently light mode)"><svg viewBox="0 0 24 24" width="24" height="24" class="lightToggleIcon_v35p"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" class="darkToggleIcon_nQuB"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg></button></div><div class="navbar__search"><span aria-label="expand searchbar" role="button" class="search-icon" tabindex="0"></span><input type="search" id="search_input_react" placeholder="Search" aria-label="Search" class="navbar__search-input search-bar"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div class="main-wrapper"><div class="docPage_P2Lg"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_RiI4" type="button"></button><aside class="theme-doc-sidebar-container docSidebarContainer_rKC_"><div class="sidebar_RiAD"><nav class="menu thin-scrollbar menu_izAj"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/next/gettingStarted/quickstart">Getting Started</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/next/userDocs/submarine-sdk/experiment-client">User Docs</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/docs/next/devDocs/">Developer Docs</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/">Project Architecture</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/Dependencies">Dependencies for Submarine</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/BuildFromCode">How to Build Submarine</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/Development">Development Guide</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/IntegrationTestK8s">How to Run Integration K8s Test</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/IntegrationTestE2E">How to Run Frontend Integration Test</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/next/devDocs/HowToRelease">How to Release</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/next/devDocs/HowToVerify">How to Verify</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/next/community/">Community</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/docs/next/designDocs/architecture-and-requirements">Design Docs</a></div></li></ul></nav></div></aside><main class="docMainContainer_TCnq"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_DM6M"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role="alert"><div>This is unreleased documentation for <!-- -->Apache Submarine<!-- --> <b>master ๐Ÿƒ</b> version.</div><div class="margin-top--md">For up-to-date documentation, see the <b><a href="/docs/gettingStarted/quickstart">latest version</a></b> (<!-- -->0.6.0<!-- -->).</div></div><div class="docItemContainer_vinB"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Xlws" aria-label="breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/">๐Ÿ </a></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item"><span class="breadcrumbs__link" itemprop="item name">Developer Docs</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="item name">How to Release</span><meta itemprop="position" content="2"></li></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: master ๐Ÿƒ</span><div class="tocCollapsible_jdIR theme-doc-toc-mobile tocMobile_TmEX"><button type="button" class="clean-btn tocCollapsibleButton_Fzxq">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>How to Release</h1></header><blockquote><p>This article mainly introduces how the Release Manager releases a specific version of the project according to the Apache process.</p></blockquote><h2 class="anchor anchorWithStickyNavbar_mojV" id="0-preface">0. Preface<a class="hash-link" href="#0-preface" title="Direct link to heading">โ€‹</a></h2><p>Source Release is the focus of Apacheโ€™s attention and it is also a required content for release. Binary Release is optional, Submarine can choose whether to release the binary package to the Apache warehouse or to the Maven central warehouse.</p><p>Please refer to the following link to find more details about release guidelines:</p><p><a href="https://cwiki.apache.org/confluence/display/SUBMARINE/How+to+release" target="_blank" rel="noopener noreferrer">How to Release</a><br>
<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> &gt; <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)">&lt;</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&lt;</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&lt;</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&lt;</span><span class="token plain">n</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&quot;Guangxu Cheng &lt;gxcheng@apache.org&gt;&quot;</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)">&lt;</span><span class="token plain">OK</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</span><span class="token plain"> </span><span class="token operator" style="color:rgb(137, 221, 255)">&lt;</span><span class="token plain">Cancel</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&#x27;/Users/cheng/.gnupg/openpgp-revocs.d/41936314E25F402D5F7D73152DD587E7B10F3B1F.rev&#x27;</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)">&lt;</span><span class="token plain">gxcheng@apache.org</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&lt;</span><span class="token plain">gxcheng@apache.org</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&lt;</span><span class="token plain">key id</span><span class="token operator" style="color:rgb(137, 221, 255)">&gt;</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)">&amp;&amp;</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)">&gt;&gt;</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)">&quot;add gpg key for YOUR_NAME&quot;</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)">&amp;&amp;</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)">&gt;&gt;</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)">&quot;add gpg key for YOUR_NAME&quot;</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 &quot;unverified&quot; 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>&lt;server&gt;</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">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</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)">&lt;</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)">&quot;</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)">&quot;</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)">&quot;</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)">&quot;</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)">&quot;</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)">&quot;</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">servers</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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">&lt;!-- Apache Repo Settings --&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">apache.snapshots.https</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{user-id}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{user-pass}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">apache.releases.https</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{user-id}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">username</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">{user-pass}</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">password</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">server</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">servers</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">profiles</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">profile</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</span><span class="token plain">apache-release</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">id</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</span><span class="token tag" style="color:rgb(255, 85, 114)">properties</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;</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)">&gt;</span><span class="token plain">Your KEYID</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</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)">&gt;</span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">&lt;!-- Your GPG Keyname here --&gt;</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">&lt;!-- Use an agent: Prevents being asked for the password during the build --&gt;</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)">&lt;</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)">&gt;</span><span class="token plain">true</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</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)">&gt;</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)">&lt;</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)">&gt;</span><span class="token plain">Your password of the private key</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&lt;/</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)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">properties</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">profile</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">profiles</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&lt;/</span><span class="token tag" style="color:rgb(255, 85, 114)">settings</span><span class="token tag punctuation" style="color:rgb(199, 146, 234)">&gt;</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)">&quot;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)&quot;</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)">&quot;/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&quot;</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)">&quot;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)">/&quot;</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)">&gt;</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)">&quot;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)">&quot;</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.
The link should look like: <code>https://repository.apache.org/content/repositories/orgapachesubmarine-xxxx</code></li></ol><p>WARN: Please note that clicking Close may fail, please check the reason for the failure and deal with it.</p><h2 class="anchor anchorWithStickyNavbar_mojV" id="5-enter-voting">5. Enter voting<a class="hash-link" href="#5-enter-voting" title="Direct link to heading">โ€‹</a></h2><blockquote><p>To vote in the Submarine community, send an email to:<code>dev@submarine.apache.org</code></p></blockquote><h3 class="anchor anchorWithStickyNavbar_mojV" id="vote-in-the-submarine-community">Vote in the Submarine community<a class="hash-link" href="#vote-in-the-submarine-community" title="Direct link to heading">โ€‹</a></h3><h4 class="anchor anchorWithStickyNavbar_mojV" id="voting-template">Voting template<a class="hash-link" href="#voting-template" title="Direct link to heading">โ€‹</a></h4><div class="codeBlockContainer_I0IT theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-text codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">Title๏ผš[VOTE] Submarine-${release_version}-${rc_version} is ready for a vote!</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">Content๏ผš</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">Hi folks,</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">Thanks to everyone&#x27;s help on this release.</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">I&#x27;ve created a release candidate (${rc_version}) for submarine ${release_version}. The</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">highlighted features are as follows:</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">1. AAA</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">2. BBB</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">3. CCC</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">The mini-submarine image is here:</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">docker pull apache/submarine:mini-${release_version}-${rc_version}</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">The RC tag in git is here:</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">https://github.com/apache/submarine/releases/tag/release-${release_version}-${rc_version}</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">The RC release artifacts are available at:</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">http://home.apache.org/~pingsutw/submarine-${release_version}-${rc_version}</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">The Maven staging repository is here:</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">https://repository.apache.org/content/repositories/orgapachesubmarine-1030</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">My public key is here:</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">https://dist.apache.org/repos/dist/release/submarine/KEYS</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">*This vote will run for 7 days, ending on DDDD/EE/FF at 11:59 pm PST.*</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">For the testing, I have verified the</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">1. Build from source, Install Submarine on minikube</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">2. Workbench UI (Experiment / Notebook / Template / Environment)</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">3. Experiment / Notebook / Template / Environment REST API</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" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">My +1 to start. Thanks!</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">BR,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">XXX</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></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="announce-voting-results-template">Announce voting results template<a class="hash-link" href="#announce-voting-results-template" title="Direct link to heading">โ€‹</a></h4><div class="codeBlockContainer_I0IT theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-text codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">Title๏ผš[RESULT][VOTE] Release Apache Submarine ${release_version} ${rc_version}</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">Content๏ผš</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">Hello Apache Submarine PMC and Community,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> The vote closes now as 72hr have passed. The vote PASSES with</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> xx (+1 non-binding) votes from the PMC,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> xx (+1 non-binding) vote from the rest of the developer community,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"> and no further 0 or -1 votes.</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"> The vote thread:{vote_mail_address}</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">Thank you for your support.</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Your Submarine Release Manager</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="6-officially-released">6. Officially released<a class="hash-link" href="#6-officially-released" title="Direct link to heading">โ€‹</a></h2><h3 class="anchor anchorWithStickyNavbar_mojV" id="61-merge-the-changes-from-the-release-release_version-branch-to-the-master-branch">6.1 Merge the changes from the release-${release_version} branch to the master branch<a class="hash-link" href="#61-merge-the-changes-from-the-release-release_version-branch-to-the-master-branch" title="Direct link to heading">โ€‹</a></h3><h3 class="anchor anchorWithStickyNavbar_mojV" id="62-release-the-version-in-the-apache-staging-repository">6.2 Release the version in the Apache Staging repository<a class="hash-link" href="#62-release-the-version-in-the-apache-staging-repository" title="Direct link to heading">โ€‹</a></h3><blockquote><p>Please make sure all artifacts are fine.</p></blockquote><ol><li>Log in to <a href="http://repository.apache.org" target="_blank" rel="noopener noreferrer">http://repository.apache.org</a> with your Apache account.</li><li>Click on Staging repositories on the left.</li><li>Search for Submarine keywords, select your recently uploaded repository, the repository specified in the voting email.</li><li>Click the <code>Release</code> button above, and a series of checks will be carried out during this process.
<strong>It usually takes 24 hours to wait for the repository to synchronize to other data sources</strong></li></ol><h3 class="anchor anchorWithStickyNavbar_mojV" id="63-update-official-website-link">6.3 Update official website link<a class="hash-link" href="#63-update-official-website-link" title="Direct link to heading">โ€‹</a></h3><h3 class="anchor anchorWithStickyNavbar_mojV" id="64-send-an-email-todevsubmarineapacheorg">6.4. Send an email to<code>dev@submarine.apache.org</code><a class="hash-link" href="#64-send-an-email-todevsubmarineapacheorg" title="Direct link to heading">โ€‹</a></h3><p><strong>Please make sure that the repository in 6.4 has been successfully released, generally the email is sent 24 hours after 6.4</strong></p><p>Announce release email template:</p><div class="codeBlockContainer_I0IT theme-code-block"><div class="codeBlockContent_wNvx" style="color:#bfc7d5;background-color:#292d3e"><pre tabindex="0" class="prism-code language-text codeBlock_jd64 thin-scrollbar"><code class="codeBlockLines_mRuA"><span class="token-line" style="color:#bfc7d5"><span class="token plain">Title๏ผš [ANNOUNCE] Apache Submarine ${release_version} release!</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Content๏ผš</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Hi folks, It&#x27;s a great honor for me to announce that the Apache Submarine Community</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">has released Apache Submarine ${release_version}!</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">The highlighted features are:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">1. AAA</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">2. BBB</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">3. CCC</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">Tons of thanks to our contributors and community!</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">Let&#x27;s keep fighting! *Apache Submarine ${release_version} released*:</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">https://submarine.apache.org/docs/next/releases/submarine-release-${release_version}</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">BR,</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">XXXX</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></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="theme-doc-footer-edit-meta-row row"><div class="col"><a href="https://github.com/apache/submarine/edit/master/website/docs/devDocs/HowToRelease.md" target="_blank" rel="noreferrer noopener" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_dcUD" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_foO9"></div></div></footer></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><div class="pagination-nav__item"><a class="pagination-nav__link" href="/docs/next/devDocs/IntegrationTestE2E"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">How to Run Frontend Integration Test</div></a></div><div class="pagination-nav__item pagination-nav__item--next"><a class="pagination-nav__link" href="/docs/next/devDocs/HowToVerify"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">How to Verify</div></a></div></nav></div></div><div class="col col--3"><div class="tableOfContents_cNA8 thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#0-preface" class="table-of-contents__link toc-highlight">0. Preface</a></li><li><a href="#1-add-gpg-key" class="table-of-contents__link toc-highlight">1. Add GPG KEY</a><ul><li><a href="#11-install-gpg" class="table-of-contents__link toc-highlight">1.1 Install gpg</a></li><li><a href="#12-generate-gpg-key" class="table-of-contents__link toc-highlight">1.2 generate gpg Key</a></li><li><a href="#13-upload-the-generated-key-to-the-public-server" class="table-of-contents__link toc-highlight">1.3 Upload the generated key to the public server</a></li><li><a href="#14-check-whether-the-key-is-created-successfully" class="table-of-contents__link toc-highlight">1.4 Check whether the key is created successfully</a></li><li><a href="#15-add-your-gpg-public-key-to-the-keys-file" class="table-of-contents__link toc-highlight">1.5 Add your gpg public key to the KEYS file</a></li><li><a href="#16-upload-gpg-public-key-to-github-account" class="table-of-contents__link toc-highlight">1.6 Upload GPG public key to Github account</a></li></ul></li><li><a href="#2-set-maven-settings" class="table-of-contents__link toc-highlight">2. Set maven settings</a></li><li><a href="#3-compile-and-package" class="table-of-contents__link toc-highlight">3. Compile and package</a><ul><li><a href="#31-prepare-a-branch" class="table-of-contents__link toc-highlight">3.1 Prepare a branch</a></li><li><a href="#32-create-the-tag" class="table-of-contents__link toc-highlight">3.2 Create the tag</a></li><li><a href="#33-package-the-source-code" class="table-of-contents__link toc-highlight">3.3 Package the source code</a></li><li><a href="#34-packaged-binary-package" class="table-of-contents__link toc-highlight">3.4 Packaged binary package</a></li><li><a href="#35-sign-the-source-packagebinary-packagesha512" class="table-of-contents__link toc-highlight">3.5 Sign the source package/binary package/sha512</a></li><li><a href="#36-check-whether-the-generated-signaturesha512-is-correct" class="table-of-contents__link toc-highlight">3.6 Check whether the generated signature/sha512 is correct</a></li></ul></li><li><a href="#4-prepare-for-apache-release" class="table-of-contents__link toc-highlight">4. Prepare for Apache release</a><ul><li><a href="#41-publish-the-jar-package-to-the-apache-nexus-repository" class="table-of-contents__link toc-highlight">4.1 Publish the jar package to the Apache Nexus repository</a></li><li><a href="#42-upload-the-tag-to-git-repository" class="table-of-contents__link toc-highlight">4.2 Upload the tag to git repository</a></li><li><a href="#43-upload-the-compiled-file-to-dist" class="table-of-contents__link toc-highlight">4.3 Upload the compiled file to dist</a></li><li><a href="#431-checkout-submarine-to-a-local-directory" class="table-of-contents__link toc-highlight">4.3.1 Checkout Submarine to a local directory</a></li><li><a href="#432-add-the-public-key-to-the-keys-file-and-submit-it-to-the-svn-repository" class="table-of-contents__link toc-highlight">4.3.2 Add the public key to the KEYS file and submit it to the SVN repository</a></li><li><a href="#44-shut-down-the-apache-staging-repository" class="table-of-contents__link toc-highlight">4.4 Shut down the Apache Staging repository</a></li></ul></li><li><a href="#5-enter-voting" class="table-of-contents__link toc-highlight">5. Enter voting</a><ul><li><a href="#vote-in-the-submarine-community" class="table-of-contents__link toc-highlight">Vote in the Submarine community</a></li></ul></li><li><a href="#6-officially-released" class="table-of-contents__link toc-highlight">6. Officially released</a><ul><li><a href="#61-merge-the-changes-from-the-release-release_version-branch-to-the-master-branch" class="table-of-contents__link toc-highlight">6.1 Merge the changes from the release-${release_version} branch to the master branch</a></li><li><a href="#62-release-the-version-in-the-apache-staging-repository" class="table-of-contents__link toc-highlight">6.2 Release the version in the Apache Staging repository</a></li><li><a href="#63-update-official-website-link" class="table-of-contents__link toc-highlight">6.3 Update official website link</a></li><li><a href="#64-send-an-email-todevsubmarineapacheorg" class="table-of-contents__link toc-highlight">6.4. Send an email to<code>dev@submarine.apache.org</code></a></li></ul></li></ul></div></div></div></div></main></div></div><footer class="footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="col footer__col"><div class="footer__title">Docs</div><ul class="footer__items"><li class="footer__item"><a class="footer__link-item" href="/docs/gettingStarted/quickstart">Getting Started</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/api/environment">API docs</a></li></ul></div><div class="col footer__col"><div class="footer__title">Community</div><ul class="footer__items"><li class="footer__item"><a href="https://stackoverflow.com/questions/tagged/apache-submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">Stack Overflow<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li><li class="footer__item"><a href="https://s.apache.org/slack-invite" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div><div class="col footer__col"><div class="footer__title">More</div><ul class="footer__items"><li class="footer__item"><a href="https://medium.com/@apache.submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">Blog</a></li><li class="footer__item"><a href="https://github.com/apache/submarine" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_I5OW"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="margin-bottom--sm"><a href="https://www.apache.org/" target="_blank" rel="noopener noreferrer" class="footerLogoLink_gHmE"><img src="https://hadoop.apache.org/asf_logo_wide.png" alt="Apache Open Source Logo" class="themedImage_W2Cr themedImage--light_TfLj footer__logo"><img src="https://hadoop.apache.org/asf_logo_wide.png" alt="Apache Open Source Logo" class="themedImage_W2Cr themedImage--dark_oUvU footer__logo"></a></div><div class="footer__copyright">Apache Submarine, Submarine, Apache, the Apache feather logo, and the Apache Submarine project logo are
either registered trademarks or trademarks of the Apache Software Foundation in the United States and other
countries.<br> Copyright ยฉ 2022 Apache Submarine is Apache2 Licensed software.</div></div></div></footer></div>
<script src="/assets/js/runtime~main.c55a74e9.js"></script>
<script src="/assets/js/main.47923baa.js"></script>
</body>
</html>