blob: 447f59cbb70dbc62870bf519e6c08956c6f119f4 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" class="js csstransforms3d">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta name="generator" content="Hugo 0.70.0" />
<meta name="description" content="">
<meta name="buildDate" content="2022-08-12 13:01:24">
<link rel="shortcut icon" href="https://shardingsphere.apache.org/document/current/img/favicon.png" type="image/x-icon" />
<title>ShardingSphere Release Guide :: ShardingSphere</title>
<link href="https://shardingsphere.apache.org/community/css/nucleus.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/font-awesome.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hybrid.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/featherlight.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/perfect-scrollbar.min.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/auto-complete.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/hugo-theme.css?1660280484" rel="stylesheet">
<link href="https://shardingsphere.apache.org/community/css/theme-white.css?1660280484" rel="stylesheet">
<script src="https://shardingsphere.apache.org/community/js/jquery-2.x.min.js?1660280484"></script>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?d5a1dc8dcf63a64ee55b80de01c7fb1a";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-HPVGEN405S"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){window.dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-HPVGEN405S');
</script>
<style type="text/css">
:root #header + #content > #left > #rlblock_left{
display:none !important;
}
</style>
</head>
<body class="" data-url="/en/contribute/release/">
<div class="change-theme">
<div class="wrap">
<span data-item="retro">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Retro
</span>
<span data-item="eyehelp">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Eye care
</span>
<span data-item="haitian">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Haitian
</span>
<span data-item="deep">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Deep
</span>
<span data-item="dark">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Dark
</span>
<span class="active">
<svg t="1649761460834" class="icon" viewBox="0 0 1243 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2052" width="16" height="16"><path d="M755.093336 61.436797a511.973304 511.973304 0 1 0 207.495466 693.650688l-99.615377-53.757197a398.827204 398.827204 0 1 1-161.637286-540.351253l53.757197-99.615378z" fill="#ffffff" p-id="2053"></path><path d="M1204.971593 188.84501L534.652259 736.217612l-285.242269-364.086159 86.304071-67.653615 216.199012 275.953611 583.649567-476.574007 69.335813 84.987568z" fill="#ffffff" p-id="2054"></path></svg>
Default
</span>
</div>
</div>
<header>
<div class="wrap">
<a href="https://shardingsphere.apache.org/"><img src="https://shardingsphere.apache.org/document/current/img/logo_v3.png" /></a>
<section id="prefooter">
<ul>
<li>
<a class="padding">
<i class="fa fa-fw fa-language"></i>
<div class="select-style">
<select id="select-language" onchange="location = this.value;">
<option id="en" value="/community/en/contribute/release/" selected>English</option>
<option id="cn" value="/community/cn/contribute/release/">简体中文</option>
</select>
<svg t="1645437162166" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2449" width="32" height="32"><path d="M483.072 714.496l30.165333 30.208 415.957334-415.829333a42.837333 42.837333 0 0 0 0-60.288 42.538667 42.538667 0 0 0-60.330667-0.042667l-355.541333 355.413333-355.242667-355.413333a42.496 42.496 0 0 0-60.288 0 42.837333 42.837333 0 0 0-0.085333 60.330667l383.701333 383.872 1.706667 1.749333z" fill="#3D3D3D" p-id="2450"></path></svg>
</div>
</a>
</li>
</ul>
</section>
</div>
</header>
<div class="wrap">
<nav id="sidebar" class="">
<div id="header-wrapper">
<div class="searchbox">
<label for="search-by"><i class="fa fa-search"></i></label>
<input data-search-input id="search-by" type="text" placeholder="Search...">
<span data-search-clear=""><i class="fa fa-close"></i></span>
</div>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/lunr.min.js?1660280484"></script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/auto-complete.js?1660280484"></script>
<script type="text/javascript">
var baseurl = "\/en";
</script>
<script type="text/javascript" src="https://shardingsphere.apache.org/community/js/search.js?1660280484"></script>
</div>
<div class="highlightable">
<div class="leftMenu">
<ul class="topics">
<li data-nav-id="/en/contribute/" title="Get Involved" class="dd-item
parent
">
<a href="https://shardingsphere.apache.org/community/en/contribute/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg class="icon icon-down"
style="display: inline-block;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M500.8 604.778667L267.306667 371.392l-45.226667 45.269333 278.741333 278.613334 278.485334-278.613334-45.248-45.248z" p-id="5376" ></path>
</svg>
<svg class="icon icon-right"
style="display: none;"
viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="#777">
<path d="M593.450667 512.128L360.064 278.613333l45.290667-45.226666 278.613333 278.762666L405.333333 790.613333l-45.226666-45.269333z" p-id="5605" ></path>
</svg>
</i>
<b>1. </b>Get Involved
</a>
<ul>
<li data-nav-id="/en/contribute/subscribe/" title="Subscribe Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/subscribe/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Subscribe Guide
</a>
</li>
<li data-nav-id="/en/contribute/establish-project/" title="How to Set Up Your DEV Environment" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/establish-project/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
How to Set Up Your DEV Environment
</a>
</li>
<li data-nav-id="/en/contribute/contributor/" title="Contributor Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Contributor Guide
</a>
</li>
<li data-nav-id="/en/contribute/committer/" title="Committer Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/committer/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Committer Guide
</a>
</li>
<li data-nav-id="/en/contribute/code-conduct/" title="Code of Conduct" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/code-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Code of Conduct
</a>
</li>
<li data-nav-id="/en/contribute/document-conduct/" title="Document Specification" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/document-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Document Specification
</a>
</li>
<li data-nav-id="/en/contribute/issue-conduct/" title="Issue Conduct" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/issue-conduct/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Issue Conduct
</a>
</li>
<li data-nav-id="/en/contribute/document-contributor/" title="Documents Contributor Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/document-contributor/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Documents Contributor Guide
</a>
</li>
<li data-nav-id="/en/contribute/release/" title="ShardingSphere Release Guide" class="dd-item active">
<a href="https://shardingsphere.apache.org/community/en/contribute/release/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ShardingSphere Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/release-elasticjob/" title="ElasticJob Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/release-elasticjob/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/release-elasticjob-ui/" title="ElasticJob-UI Release Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/release-elasticjob-ui/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
ElasticJob-UI Release Guide
</a>
</li>
<li data-nav-id="/en/contribute/2fa/" title="2FA" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/2fa/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
2FA
</a>
</li>
<li data-nav-id="/en/contribute/icla/" title="Sign ICLA Guide" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/icla/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
Sign ICLA Guide
</a>
</li>
<li data-nav-id="/en/contribute/vote/" title="New committer voting process" class="dd-item ">
<a href="https://shardingsphere.apache.org/community/en/contribute/vote/">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
New committer voting process
</a>
</li>
</ul>
</li>
<li data-nav-id="/en/powered-by/" title="Powered By ShardingSphere" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/powered-by/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>2. </b>Powered By ShardingSphere
</a>
</li>
<li data-nav-id="/en/team/" title="Team" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/team/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>3. </b>Team
</a>
</li>
<li data-nav-id="/en/security/" title="Security" class="dd-item
">
<a href="https://shardingsphere.apache.org/community/en/security/">
<i class="collapse" style="display:inline; font-family:'courier';">
<svg viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5375" width="20" height="20"></svg>
</i>
<b>4. </b>Security
</a>
</li>
</ul>
</div>
<a class="padding" href="https://shardingsphere.apache.org/pdf/shardingsphere_docs_en.pdf">
Download PDF
</a>
<section id="footer">
<p></p>
</section>
</div>
</nav>
<section id="body">
<div id="overlay"></div>
<div class="padding highlightable">
<div>
<div id="top-bar">
<div id="top-github-link">
<a class="github-link" title='Edit this page' href="https://github.com/apache/shardingsphere/tree/master/docs/community/content/contribute/release.en.md" target="blank">
<i class="fa fa-code-fork"></i>
<span id="top-github-link-text">Edit this page</span>
</a>
</div>
<div id="breadcrumbs" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">
<span id="sidebar-toggle-span">
<a href="#" id="sidebar-toggle" data-sidebar-toggle="">
<i class="fa fa-bars"></i>
</a>
</span>
<span class="links">
<a href='https://shardingsphere.apache.org/community/en/'>ShardingSphere</a> > <a href='https://shardingsphere.apache.org/community/en/contribute/'>Get Involved</a> > ShardingSphere Release Guide
</span>
</div>
</div>
</div>
<div id="chapter">
<div id="body-inner">
<nav id="TableOfContents">
<ul>
<li><a href="#prepare-before-release-procedure">Prepare before release procedure</a>
<ul>
<li><a href="#1-confirm-release-notes">1. Confirm release notes</a></li>
<li><a href="#2-confirm-issue-list">2. Confirm issue list</a></li>
<li><a href="#3-confirm-pull-request-list">3. Confirm pull request list</a></li>
<li><a href="#4-close-milestone">4. Close milestone</a></li>
<li><a href="#5-call-for-a-discussion">5. Call for a discussion</a></li>
</ul>
</li>
<li><a href="#gpg-settings">GPG Settings</a>
<ul>
<li><a href="#1-install-gpg">1. Install GPG</a></li>
<li><a href="#2-create-key">2. Create Key</a></li>
<li><a href="#3-check-generated-key">3. Check Generated Key</a></li>
<li><a href="#4-upload-the-public-key-to-key-server">4. Upload the Public Key to Key Server</a></li>
</ul>
</li>
<li><a href="#prepare-branch-for-release">Prepare Branch for Release</a>
<ul>
<li><a href="#1-create-release-branch">1. Create Release Branch</a></li>
<li><a href="#2-update-release-notes-and-example-version">2. Update Release Notes And Example Version</a></li>
<li><a href="#3-update-the-download-page">3. Update the download page</a></li>
<li><a href="#4-update-links-of-spring-xsd-in-documents-of-shardingsphere-jdbc">4. Update links of Spring xsd in documents of ShardingSphere-JDBC</a></li>
<li><a href="#5-update-readme-files">5. Update README files</a></li>
<li><a href="#6-update-version-of-helm-chart">6. Update version of Helm Chart</a></li>
</ul>
</li>
<li><a href="#apache-maven-central-repository-release">Apache Maven Central Repository Release</a>
<ul>
<li><a href="#1-set-settingsxml">1. Set settings.xml</a></li>
<li><a href="#2-pre-release-check">2. Pre-Release Check</a></li>
<li><a href="#3-prepare-for-the-release">3. Prepare for the Release</a></li>
<li><a href="#4-deploy-the-release">4. Deploy the Release</a></li>
</ul>
</li>
<li><a href="#build-helm-chart-archive">Build Helm Chart archive</a></li>
<li><a href="#apache-svn-repository-release">Apache SVN Repository Release</a>
<ul>
<li><a href="#1-checkout-shardingsphere-release-directory">1. Checkout ShardingSphere Release Directory</a></li>
<li><a href="#2-add-gpg-public-key">2. Add gpg Public Key</a></li>
<li><a href="#3-add-the-release-content-to-svn-directory">3. Add the Release Content to SVN Directory</a></li>
<li><a href="#4-commit-to-apache-svn">4. Commit to Apache SVN</a></li>
</ul>
</li>
<li><a href="#check-release">Check Release</a>
<ul>
<li><a href="#1-check-sha512-hash">1. Check sha512 hash</a></li>
<li><a href="#2-check-gpg-signature">2. Check gpg Signature</a></li>
<li><a href="#3-check-released-files">3. Check Released Files</a></li>
</ul>
</li>
<li><a href="#call-for-a-vote">Call for a Vote</a></li>
<li><a href="#finish-the-release">Finish the Release</a>
<ul>
<li><a href="#1-move-source-packages-binary-packages-and-keys-from-the-dev-directory-to-release-directory">1. Move source packages, binary packages and KEYS from the <code>dev</code> directory to <code>release</code> directory</a></li>
<li><a href="#2-find-shardingsphere-in-staging-repository-and-click-release">2. Find ShardingSphere in staging repository and click <code>Release</code></a></li>
<li><a href="#3-docker-release">3. Docker Release</a></li>
<li><a href="#4-publish-release-in-github">4. Publish release in GitHub</a></li>
<li><a href="#5-remove-previous-release-from-release-area">5. Remove previous release from Release Area</a></li>
<li><a href="#6-upload-xsd-files-of-spring-namespace-to-official-website">6. Upload xsd files of Spring namespace to official website</a></li>
<li><a href="#7-add-entrance-of-documents-of-the-new-release-into-home-page">7. Add entrance of documents of the new release into home page</a></li>
<li><a href="#8-merge-release-branch-to-master-and-delete-release-branch-on-github">8. Merge release branch to <code>master</code> and delete release branch on GitHub</a></li>
<li><a href="#9-generate-helm-chart-index-and-upload">9. Generate Helm Chart index and upload</a></li>
<li><a href="#10-announce-release-completed-by-email">10. Announce release completed by email</a></li>
</ul>
</li>
<li><a href="#appendix-how-to-abort-release-procedure">Appendix: How to abort release procedure</a>
<ul>
<li><a href="#vote-down-the-release-and-describe-the-reason">Vote down the release and describe the reason</a></li>
<li><a href="#remove-release-candidates-from-dev-area">Remove release candidates from dev area</a></li>
<li><a href="#drop-maven-staging-repository">Drop Maven Staging Repository</a></li>
<li><a href="#reset-release-branch-and-delete-tag">Reset release branch and delete tag</a></li>
</ul>
</li>
</ul>
</nav>
<h2 id="prepare-before-release-procedure">Prepare before release procedure</h2>
<h3 id="1-confirm-release-notes">1. Confirm release notes</h3>
<p>The release note should be provided in Chinese / English, confirm whether the Chinese description is clear and whether the English translation is accurate,
and shall be classified according to the following labels:</p>
<ol>
<li>New Feature</li>
<li>API Change</li>
<li>Enhancement</li>
<li>Refactor</li>
<li>Bug Fix</li>
</ol>
<h3 id="2-confirm-issue-list">2. Confirm issue list</h3>
<p>Open <a href="https://github.com/apache/shardingsphere/issues">GitHub issues</a>, filter the issue whose milestone is <code>${RELEASE.VERSION}</code> and status is open:</p>
<ol>
<li>Close the completed issue</li>
<li>For outstanding issues, communicate with the developer in charge. If this release is not affected, modify milestone to the next version</li>
<li>Confirm that there is no issue in open status under milestone of release version</li>
</ol>
<h3 id="3-confirm-pull-request-list">3. Confirm pull request list</h3>
<p>Open <a href="https://github.com/apache/shardingsphere/pulls">GitHub pull requests</a>, filter pull requests whose milestone is <code>${RELEASE.VERSION}</code> and status is open:</p>
<ol>
<li>Review the open pull request and merge</li>
<li>For pull requests that cannot merge and do not affect this release, modify milestone to the next version</li>
<li>Confirm that there is no open pull request under milestone of release version</li>
</ol>
<h3 id="4-close-milestone">4. Close milestone</h3>
<p>Open <a href="https://github.com/apache/shardingsphere/milestones">GitHub milestone</a></p>
<ol>
<li>Confirm that the milestone completion status of <code>${RELEASE.VERSION}</code> is 100%</li>
<li>Click <code>close</code> to close milestone</li>
</ol>
<h3 id="5-call-for-a-discussion">5. Call for a discussion</h3>
<ol>
<li>Create a <a href="https://github.com/apache/shardingsphere/discussions">GitHub Discussion</a> contains all the release notes</li>
<li>Send email to <a href="mailto:dev@shardingsphere.apache.org">dev@shardingsphere.apache.org</a> with the GitHub Discussion in the message body</li>
<li>Follow the mailing list and confirm that the community developers have no questions about the release note</li>
</ol>
<h2 id="gpg-settings">GPG Settings</h2>
<h3 id="1-install-gpg">1. Install GPG</h3>
<p>Download installation package on <a href="https://www.gnupg.org/download/index.html">official GnuPG website</a>.
The command of GnuPG 1.x version can differ a little from that of 2.x version.
The following instructions take <code>GnuPG-2.1.23</code> version for example.
After the installation, execute the following command to check the version number.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --version
</code></pre></div><h3 id="2-create-key">2. Create Key</h3>
<p>After the installation, execute the following command to create key.</p>
<p>This command indicates <code>GnuPG-2.x</code> can be used:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --full-gen-key
</code></pre></div><p>This command indicates <code>GnuPG-1.x</code> can be used:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --gen-key
</code></pre></div><p>Finish the key creation according to instructions:</p>
<blockquote>
<p>To be noticed: Please use Apache mail for key creation.</p>
</blockquote>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg <span style="color:#f92672">(</span>GnuPG<span style="color:#f92672">)</span> 2.0.12; Copyright <span style="color:#f92672">(</span>C<span style="color:#f92672">)</span> <span style="color:#ae81ff">2009</span> Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please <span style="color:#66d9ef">select</span> what kind of key you want:
<span style="color:#f92672">(</span>1<span style="color:#f92672">)</span> RSA and RSA <span style="color:#f92672">(</span>default<span style="color:#f92672">)</span>
<span style="color:#f92672">(</span>2<span style="color:#f92672">)</span> DSA and Elgamal
<span style="color:#f92672">(</span>3<span style="color:#f92672">)</span> DSA <span style="color:#f92672">(</span>sign only<span style="color:#f92672">)</span>
<span style="color:#f92672">(</span>4<span style="color:#f92672">)</span> RSA <span style="color:#f92672">(</span>sign only<span style="color:#f92672">)</span>
Your selection? <span style="color:#ae81ff">1</span>
RSA keys may be between <span style="color:#ae81ff">1024</span> and <span style="color:#ae81ff">4096</span> bits long.
What keysize <span style="color:#66d9ef">do</span> you want? <span style="color:#f92672">(</span>2048<span style="color:#f92672">)</span> <span style="color:#ae81ff">4096</span>
Requested keysize is <span style="color:#ae81ff">4096</span> bits
Please specify how long the key should be valid.
0 <span style="color:#f92672">=</span> key does not expire
&lt;n&gt; <span style="color:#f92672">=</span> key expires in n days
&lt;n&gt;w <span style="color:#f92672">=</span> key expires in n weeks
&lt;n&gt;m <span style="color:#f92672">=</span> key expires in n months
&lt;n&gt;y <span style="color:#f92672">=</span> key expires in n years
Key is valid <span style="color:#66d9ef">for</span>? <span style="color:#f92672">(</span>0<span style="color:#f92672">)</span>
Key does not expire at all
Is this correct? <span style="color:#f92672">(</span>y/N<span style="color:#f92672">)</span> y
GnuPG needs to construct a user ID to identify your key.
Real name: <span style="color:#e6db74">${</span>Input username<span style="color:#e6db74">}</span>
Email address: <span style="color:#e6db74">${</span>Input email<span style="color:#e6db74">}</span>
Comment: <span style="color:#e6db74">${</span>Input comment<span style="color:#e6db74">}</span>
You selected this USER-ID:
<span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>Inputed username<span style="color:#e6db74">}</span><span style="color:#e6db74"> (</span><span style="color:#e6db74">${</span>Inputed comment<span style="color:#e6db74">}</span><span style="color:#e6db74">) &lt;</span><span style="color:#e6db74">${</span>Inputed email<span style="color:#e6db74">}</span><span style="color:#e6db74">&gt;&#34;</span>
Change <span style="color:#f92672">(</span>N<span style="color:#f92672">)</span>ame, <span style="color:#f92672">(</span>C<span style="color:#f92672">)</span>omment, <span style="color:#f92672">(</span>E<span style="color:#f92672">)</span>mail or <span style="color:#f92672">(</span>O<span style="color:#f92672">)</span>kay/<span style="color:#f92672">(</span>Q<span style="color:#f92672">)</span>uit? O
You need a Passphrase to protect your secret key. <span style="color:#75715e"># Input passwords</span>
</code></pre></div><h3 id="3-check-generated-key">3. Check Generated Key</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --list-keys
</code></pre></div><p>Execution Result:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">pub 4096R/700E6065 2019-03-20
uid <span style="color:#e6db74">${</span>Username<span style="color:#e6db74">}</span> <span style="color:#f92672">(</span><span style="color:#e6db74">${</span>Comment<span style="color:#e6db74">}</span><span style="color:#f92672">)</span> &lt;<span style="color:#f92672">{</span>Email<span style="color:#f92672">}</span>&gt;
sub 4096R/0B7EF5B2 2019-03-20
</code></pre></div><p>Among them, 700E6065 is public key ID.</p>
<h3 id="4-upload-the-public-key-to-key-server">4. Upload the Public Key to Key Server</h3>
<p>The command is as follows:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --keyserver hkp://keyserver.ubuntu.com --send-key 700E6065
</code></pre></div><p><code>keyserver.ubuntu.com</code> is randomly chosen from public key server.
Each server will automatically synchronize with one another, so it would be okay to choose any one.</p>
<h2 id="prepare-branch-for-release">Prepare Branch for Release</h2>
<h3 id="1-create-release-branch">1. Create Release Branch</h3>
<p>Suppose ShardingSphere source codes downloaded from github is under <code>~/shardingsphere/</code> directory and the version to be released is <code>4.0.0-RC</code>.
Create <code>${RELEASE.VERSION}-release</code> branch, where all the following operations are performed.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#75715e">## ${name} is the properly branch, e.g. master, dev-4.x</span>
git clone --branch <span style="color:#e6db74">${</span>name<span style="color:#e6db74">}</span> https://github.com/apache/shardingsphere.git ~/shardingsphere
cd ~/shardingsphere/
git pull
git checkout -b <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git push origin <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
</code></pre></div><h3 id="2-update-release-notes-and-example-version">2. Update Release Notes And Example Version</h3>
<p>Update the following file in release branch, and submit a PR to release branch:</p>
<pre><code>https://github.com/apache/shardingsphere/blob/${RELEASE.VERSION}-release/RELEASE-NOTES.md
</code></pre><p>Update the POM of the module <code>examples</code>, changing the version from ${CURRENT.VERSION} to ${RELEASE.VERSION}, and submit a PR to release branch.</p>
<h3 id="3-update-the-download-page">3. Update the download page</h3>
<p>Update the following pages:</p>
<ul>
<li><a href="https://shardingsphere.apache.org/document/current/en/downloads/">https://shardingsphere.apache.org/document/current/en/downloads/</a></li>
<li><a href="https://shardingsphere.apache.org/document/current/cn/downloads/">https://shardingsphere.apache.org/document/current/cn/downloads/</a></li>
</ul>
<p>GPG signatures and hashes (SHA* etc) should be prefixed with <code>https://downloads.apache.org/shardingsphere/</code></p>
<h3 id="4-update-links-of-spring-xsd-in-documents-of-shardingsphere-jdbc">4. Update links of Spring xsd in documents of ShardingSphere-JDBC</h3>
<p>Update all links of xsd in documents under <code>docs/document/content/user-manual/shardingsphere-jdbc/spring-namespace</code>.</p>
<p>Update from:</p>
<pre><code>http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding-${PREVIOUS.RELEASE.VERSION}.xsd
</code></pre><p>to:</p>
<pre><code>http://shardingsphere.apache.org/schema/shardingsphere/sharding/sharding-${RELEASE.VERSION}.xsd
</code></pre><p>Sample commands:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cd docs/document/content/user-manual/shardingsphere-jdbc/spring-namespace
grep -l -r <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>PREVIOUS.RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> . | xargs sed -i -e <span style="color:#e6db74">&#34;s/</span><span style="color:#e6db74">${</span>PREVIOUS.RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">/</span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">/g&#34;</span>
</code></pre></div><p>Specifying version of xsd instead of using <code>sharding.xsd</code>, is to make legacy documents can be mapped to corresponding version of xsd.</p>
<h3 id="5-update-readme-files">5. Update README files</h3>
<p>Update <code>${PREVIOUS.RELEASE.VERSION}</code> to <code>${RELEASE.VERSION}</code> in README.md and README_ZH.md</p>
<h3 id="6-update-version-of-helm-chart">6. Update version of Helm Chart</h3>
<p>Helm Chart can deploy different versions of ShardingSphere-Proxy. Its version is independent of the version of ShardingSphere.
Modify the <code>version</code> in <code>shardingsphere-charts/apache-shardingsphere-proxy/Chart.yaml</code>.</p>
<h2 id="apache-maven-central-repository-release">Apache Maven Central Repository Release</h2>
<h3 id="1-set-settingsxml">1. Set settings.xml</h3>
<p>Add the following template to <code>~/.m2/settings.xml</code>, all the passwords need to be filled in after encryption.
For encryption settings, please see <a href="http://maven.apache.org/guides/mini/guide-encryption.html">here</a>.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-xml" data-lang="xml"><span style="color:#f92672">&lt;settings&gt;</span>
<span style="color:#f92672">&lt;servers&gt;</span>
<span style="color:#f92672">&lt;server&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>apache.snapshots.https<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP username --&gt;</span> <span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP encrypted password --&gt;</span> <span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&lt;server&gt;</span>
<span style="color:#f92672">&lt;id&gt;</span>apache.releases.https<span style="color:#f92672">&lt;/id&gt;</span>
<span style="color:#f92672">&lt;username&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP username --&gt;</span> <span style="color:#f92672">&lt;/username&gt;</span>
<span style="color:#f92672">&lt;password&gt;</span> <span style="color:#75715e">&lt;!-- APACHE LDAP encrypted password --&gt;</span> <span style="color:#f92672">&lt;/password&gt;</span>
<span style="color:#f92672">&lt;/server&gt;</span>
<span style="color:#f92672">&lt;/servers&gt;</span>
<span style="color:#f92672">&lt;/settings&gt;</span>
</code></pre></div><h3 id="2-pre-release-check">2. Pre-Release Check</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:prepare -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests -Dspotless.apply.skip=true&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -DdryRun<span style="color:#f92672">=</span>true -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github username<span style="color:#e6db74">}</span>
</code></pre></div><p>-Prelease: choose release profile, which will pack all the source codes, jar files and executable binary packages of ShardingSphere-Proxy.</p>
<p>-DautoVersionSubmodules=true: it can make the version number is inputted only once and not for each sub-module.</p>
<p>-DdryRun=true: rehearsal, which means not to generate or submit new version number and new tag.</p>
<h3 id="3-prepare-for-the-release">3. Prepare for the Release</h3>
<p>First, clean local pre-release check information.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:clean
</code></pre></div><p>Then, prepare to execute the release.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:prepare -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests -Dspotless.apply.skip=true&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -DpushChanges<span style="color:#f92672">=</span>false -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github username<span style="color:#e6db74">}</span>
</code></pre></div><p>It is basically the same as the previous rehearsal command, but deleting -DdryRun=true parameter.</p>
<p>-DpushChanges=false: do not submit the edited version number and tag to Github automatically.</p>
<p><strong>Refer to <a href="#check-release">Check Release</a>, after making sure there is no mistake in local files</strong>, submit them to GitHub.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git push origin <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git push origin --tags
</code></pre></div><h3 id="4-deploy-the-release">4. Deploy the Release</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mvn release:perform -Prelease -Darguments<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;-DskipTests -Dspotless.apply.skip=true&#34;</span> -DautoVersionSubmodules<span style="color:#f92672">=</span>true -Dusername<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>Github username<span style="color:#e6db74">}</span>
</code></pre></div><p>After that command is executed, the version to be released will be uploaded to Apache staging repository automatically.
Visit <a href="https://repository.apache.org/#stagingRepositories">https://repository.apache.org/#stagingRepositories</a> and use Apache LDAP account to log in; then you can see the uploaded version, the content of <code>Repository</code> column is the ${STAGING.REPOSITORY}.
Click <code>Close</code> to tell Nexus that the construction is finished, because only in this way, this version can be usable.
If there is any problem in gpg signature, <code>Close</code> will fail, but you can see the failure information through <code>Activity</code>.</p>
<h2 id="build-helm-chart-archive">Build Helm Chart archive</h2>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cd shardingsphere-charts/apache-shardingsphere-proxy/charts/governance
helm dep build
cd ../..
helm dep build
cd ..
helm package apache-shardingsphere-proxy
mv apache-shardingsphere-proxy-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz
gpg --armor --detach-sign apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz
shasum -b -a <span style="color:#ae81ff">512</span> apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz &gt; apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz.sha512
</code></pre></div><h2 id="apache-svn-repository-release">Apache SVN Repository Release</h2>
<h3 id="1-checkout-shardingsphere-release-directory">1. Checkout ShardingSphere Release Directory</h3>
<p>If there is no local work directory, create one at first.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p ~/ss_svn/dev/
cd ~/ss_svn/dev/
</code></pre></div><p>After the creation, checkout ShardingSphere release directory from Apache SVN.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn --username<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>APACHE LDAP username<span style="color:#e6db74">}</span> co https://dist.apache.org/repos/dist/dev/shardingsphere
cd ~/ss_svn/dev/shardingsphere
</code></pre></div><h3 id="2-add-gpg-public-key">2. Add gpg Public Key</h3>
<p>Only the account in its first deployment needs to add that.
It is alright for <code>KEYS</code> to only include the public key of the deployed account.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg -a --export <span style="color:#e6db74">${</span>GPG username<span style="color:#e6db74">}</span> &gt;&gt; KEYS
</code></pre></div><h3 id="3-add-the-release-content-to-svn-directory">3. Add the Release Content to SVN Directory</h3>
<p>Create folder by version number.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cd ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p>Add source code packages, binary packages and executable binary packages of ShardingSphere-Proxy to SVN working directory.</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cp -f ~/shardingsphere/shardingsphere-distribution/shardingsphere-src-distribution/target/*.zip* ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/shardingsphere/shardingsphere-distribution/shardingsphere-jdbc-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/shardingsphere/shardingsphere-distribution/shardingsphere-proxy-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/shardingsphere/shardingsphere-agent/shardingsphere-agent-distribution/target/*.tar.gz* ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
cp -f ~/shardingsphere/shardingsphere-charts/*.tgz* ~/ss_svn/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><h3 id="4-commit-to-apache-svn">4. Commit to Apache SVN</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn add *
svn --username<span style="color:#f92672">=</span><span style="color:#e6db74">${</span>APACHE LDAP username<span style="color:#e6db74">}</span> commit -m <span style="color:#e6db74">&#34;release </span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</code></pre></div><h2 id="check-release">Check Release</h2>
<h3 id="1-check-sha512-hash">1. Check sha512 hash</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">shasum -c *.sha512
</code></pre></div><h3 id="2-check-gpg-signature">2. Check gpg Signature</h3>
<p>First, import releaser&rsquo;s public key. Import KEYS from SVN repository to local. (The releaser does not need to import again; the checking assistant needs to import it, with the user name filled as the releaser&rsquo;s. )</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">curl https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS &gt;&gt; KEYS
gpg --import KEYS
gpg --edit-key <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>GPG username of releaser<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
&gt; trust
Please decide how far you trust this user to correctly verify other users<span style="color:#e6db74">&#39; keys
</span><span style="color:#e6db74">(by looking at passports, checking fingerprints from different sources, etc.)
</span><span style="color:#e6db74">
</span><span style="color:#e6db74"> 1 = I don&#39;</span>t know or won<span style="color:#960050;background-color:#1e0010">&#39;</span>t say
2 <span style="color:#f92672">=</span> I <span style="color:#66d9ef">do</span> NOT trust
3 <span style="color:#f92672">=</span> I trust marginally
4 <span style="color:#f92672">=</span> I trust fully
5 <span style="color:#f92672">=</span> I trust ultimately
m <span style="color:#f92672">=</span> back to the main menu
Your decision? <span style="color:#ae81ff">5</span>
&gt; save
</code></pre></div><p>Then, check the gpg signature.</p>
<p>Checking can be performed by the following command under Bash:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-bash" data-lang="bash"><span style="color:#66d9ef">for</span> each in <span style="color:#66d9ef">$(</span>ls *.asc<span style="color:#66d9ef">)</span>; <span style="color:#66d9ef">do</span> gpg --verify $each <span style="color:#e6db74">${</span>each%.asc<span style="color:#e6db74">}</span>; <span style="color:#66d9ef">done</span>
</code></pre></div><p>Or checking each file manually:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">gpg --verify apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-src.zip.asc apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-src.zip
gpg --verify apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-jdbc-bin.tar.gz.asc apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-jdbc-bin.tar.gz
gpg --verify apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-proxy-bin.tar.gz.asc apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-proxy-bin.tar.gz
gpg --verify apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-agent-bin.tar.gz.asc apache-shardingsphere-<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-shardingsphere-agent-bin.tar.gz
gpg --verify apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz.asc apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz
</code></pre></div><h3 id="3-check-released-files">3. Check Released Files</h3>
<p><strong>3.1 Compare release source with github tag</strong></p>
<pre><code>curl -Lo tag-${RELEASE.VERSION}.zip https://github.com/apache/shardingsphere/archive/${RELEASE.VERSION}.zip
unzip tag-${RELEASE.VERSION}.zip
unzip apache-shardingsphere-${RELEASE.VERSION}-src.zip
diff -r apache-shardingsphere-${RELEASE.VERSION}-src-release shardingsphere-${RELEASE.VERSION}
</code></pre><p><strong>3.2 Check source package</strong></p>
<ul>
<li>Check whether source tarball is oversized for including nonessential files</li>
<li><code>LICENSE</code> and <code>NOTICE</code> files exist</li>
<li>Correct year in <code>NOTICE</code> file</li>
<li>There is only text files but no binary files</li>
<li>All source files have ASF headers</li>
<li>Codes can be compiled and pass the unit tests (./mvnw -T 1C install)</li>
<li>Check if there is any extra files or folders, empty folders for example</li>
</ul>
<p><strong>3.3 Check binary packages</strong></p>
<p>Decompress</p>
<ul>
<li><code>apache-shardingsphere-${RELEASE.VERSION}-shardingsphere-jdbc-bin.tar.gz</code></li>
<li><code>apache-shardingsphere-${RELEASE.VERSION}-shardingsphere-proxy-bin.tar.gz</code></li>
<li><code>apache-shardingsphere-${RELEASE.VERSION}-shardingsphere-agent-bin.tar.gz</code></li>
</ul>
<p>And check the following items:</p>
<ul>
<li><code>LICENSE</code> and <code>NOTICE</code> files exist</li>
<li>Correct year in <code>NOTICE</code> file</li>
<li>All text files have ASF headers</li>
<li>Check the third party dependency license:
<ul>
<li>The software has a compatible license</li>
<li>All software licenses mentioned in <code>LICENSE</code></li>
<li>All the third party dependency licenses are under <code>licenses</code> folder</li>
<li>If it depends on Apache license and has a <code>NOTICE</code> file, that <code>NOTICE</code> file need to be added to <code>NOTICE</code> file of the release</li>
</ul>
</li>
</ul>
<p><strong>3.4 Check Helm Chart archive</strong></p>
<p>Decompress <code>apache-shardingsphere-proxy-chart-${CHART.RELEASE.VERSION}.tgz</code></p>
<p>And check the following items:</p>
<ul>
<li><code>LICENSE</code> and <code>NOTICE</code> files exist</li>
<li>Correct year in <code>NOTICE</code> file</li>
<li>All text files have ASF headers, excepts the following files or directories:
<ul>
<li>All Chart.yaml</li>
<li>All Chart.lock</li>
<li>Directory charts/governance/charts</li>
<li>Directory charts/common</li>
</ul>
</li>
</ul>
<h2 id="call-for-a-vote">Call for a Vote</h2>
<p><strong>Vote procedure</strong></p>
<ol>
<li>
<p>ShardingSphere community vote: send the vote e-mail to <code>dev@shardingsphere.apache.org</code>.
PMC needs to check the rightness of the version according to the document before they vote.
After at least <strong>72 hours</strong> and with at least <strong>3 <code>+1 PMC member</code></strong> votes, it can come to the next stage of the vote.</p>
</li>
<li>
<p>Announce the vote result: send the result vote e-mail to <a href="mailto:dev@shardingsphere.apache.org">dev@shardingsphere.apache.org</a>.</p>
</li>
</ol>
<p><strong>Vote Templates</strong></p>
<ol>
<li>ShardingSphere Community Vote Template</li>
</ol>
<p>Title:</p>
<pre><code>[VOTE] Release Apache ShardingSphere ${RELEASE.VERSION}
</code></pre><p>Body:</p>
<pre><code>Hello ShardingSphere Community,
This is a call for vote to release Apache ShardingSphere version ${RELEASE.VERSION}
Release notes:
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
The release candidates:
https://dist.apache.org/repos/dist/dev/shardingsphere/${RELEASE.VERSION}/
Maven 2 staging repository:
https://repository.apache.org/content/repositories/${STAGING.REPOSITORY}/org/apache/shardingsphere/
Git tag for the release:
https://github.com/apache/shardingsphere/tree/${RELEASE.VERSION}
Release Commit ID:
https://github.com/apache/shardingsphere/commit/xxxxxxxxxxxxxxxxxxxxxxx
Keys to verify the Release Candidate:
https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS
Look at here for how to verify this release candidate:
https://shardingsphere.apache.org/community/en/contribute/release/
GPG user ID:
${YOUR.GPG.USER.ID}
The vote will be open for at least 72 hours or until necessary number of votes are reached.
Please vote accordingly:
[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason
PMC vote is +1 binding, all others is +1 non-binding.
Checklist for reference:
[ ] Download links are valid.
[ ] Checksums and PGP signatures are valid.
[ ] Source code distributions have correct names matching the current release.
[ ] LICENSE and NOTICE files are correct for each ShardingSphere repo.
[ ] All files have license headers if necessary.
[ ] No compiled archives bundled in source archive.
</code></pre><ol start="2">
<li>Announce the vote result:</li>
</ol>
<p>Title:</p>
<pre><code>[RESULT][VOTE] Release Apache ShardingSphere ${RELEASE.VERSION}
</code></pre><p>Body:</p>
<pre><code>We’ve received 3 +1 binding votes and one +1 non-binding vote:
+1 binding, xxx
+1 binding, xxx
+1 binding, xxx
+1 non-binding, xxx
Thank you everyone for taking the time to review the release and help us.
I will process to publish the release and send ANNOUNCE.
</code></pre><h2 id="finish-the-release">Finish the Release</h2>
<h3 id="1-move-source-packages-binary-packages-and-keys-from-the-dev-directory-to-release-directory">1. Move source packages, binary packages and KEYS from the <code>dev</code> directory to <code>release</code> directory</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn mv https://dist.apache.org/repos/dist/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span> https://dist.apache.org/repos/dist/release/shardingsphere/ -m <span style="color:#e6db74">&#34;transfer packages for </span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
svn delete https://dist.apache.org/repos/dist/release/shardingsphere/KEYS -m <span style="color:#e6db74">&#34;delete KEYS&#34;</span>
svn cp https://dist.apache.org/repos/dist/dev/shardingsphere/KEYS https://dist.apache.org/repos/dist/release/shardingsphere/ -m <span style="color:#e6db74">&#34;transfer KEYS for </span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>
</code></pre></div><h3 id="2-find-shardingsphere-in-staging-repository-and-click-release">2. Find ShardingSphere in staging repository and click <code>Release</code></h3>
<h3 id="3-docker-release">3. Docker Release</h3>
<p>3.1 Preparation</p>
<p>Install and start docker service</p>
<p>(You may skip this step if you are using Docker Desktop) Configure QEMU:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">docker run --privileged --rm tonistiigi/binfmt --install all
</code></pre></div><p>Refer to: <a href="https://docs.docker.com/buildx/working-with-buildx/#build-multi-platform-images">Docker Buildx: Build multi-platform images</a></p>
<p>3.2 Login Docker Registry</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">docker login
</code></pre></div><p>3.3 Build and push ShardingSphere-Proxy Docker image</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git checkout <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
./mvnw -pl shardingsphere-distribution/shardingsphere-proxy-distribution -B -Prelease,docker.buildx.push clean package
</code></pre></div><p>3.4 Confirm the successful release</p>
<p>Go to <a href="https://hub.docker.com/r/apache/shardingsphere-proxy/">Docker Hub</a> and check whether there is a published image. And make sure that the image supports both <code>linux/amd64</code> and <code>linux/arm64</code>.</p>
<h3 id="4-publish-release-in-github">4. Publish release in GitHub</h3>
<p>Click <code>Edit</code> in <a href="https://github.com/apache/shardingsphere/releases">GitHub Releases</a>&lsquo;s <code>${RELEASE.VERSION}</code> version</p>
<p>Edit version number and release notes, click <code>Publish release</code></p>
<h3 id="5-remove-previous-release-from-release-area">5. Remove previous release from Release Area</h3>
<p>Keep the latest version in <a href="https://dist.apache.org/repos/dist/release/shardingsphere/"><strong>Release Area</strong></a> only.</p>
<p>Incubating stage versions will be archived automatically in <a href="https://archive.apache.org/dist/incubator/shardingsphere/">Archive repository</a></p>
<p>Remove the previous release from the <a href="https://dist.apache.org/repos/dist/release/shardingsphere/"><strong>Release Area</strong></a> after confirming the previous release exists in <a href="https://archive.apache.org/dist/shardingsphere/">Archive repository</a>,</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn del -m <span style="color:#e6db74">&#34;Archiving release </span><span style="color:#e6db74">${</span>PREVIOUS.RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span> https://dist.apache.org/repos/dist/release/shardingsphere/<span style="color:#e6db74">${</span>PREVIOUS.RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div><p>Previous releases will be archived automatically in <a href="https://archive.apache.org/dist/shardingsphere/">Archive repository</a>.</p>
<p>Incubating stage versions will be archived automatically in <a href="https://archive.apache.org/dist/incubator/shardingsphere/">Incubator Archive repository</a></p>
<p>Refer to <a href="https://infra.apache.org/release-download-pages.html">Release Download Pages for Projects</a>.</p>
<h3 id="6-upload-xsd-files-of-spring-namespace-to-official-website">6. Upload xsd files of Spring namespace to official website</h3>
<p>Submit a pull request to upload the xsd files of Spring namespace to <a href="https://github.com/apache/shardingsphere-doc/tree/asf-site/schema/shardingsphere">https://github.com/apache/shardingsphere-doc/tree/asf-site/schema/shardingsphere</a></p>
<p>The list of files to be uploaded is as follows:</p>
<ul>
<li>datasource.xsd</li>
<li>datasource-${RELEASE.VERSION}.xsd</li>
<li>mode/standalone/repository.xsd</li>
<li>mode/standalone/repository-${RELEASE.VERSION}.xsd</li>
<li>mode/cluster/repository.xsd</li>
<li>mode/cluster/repository-${RELEASE.VERSION}.xsd</li>
<li>sharding.xsd</li>
<li>sharding-${RELEASE.VERSION}.xsd</li>
<li>encrypt.xsd</li>
<li>encrypt-${RELEASE.VERSION}.xsd</li>
<li>readwrite-splitting.xsd</li>
<li>readwrite-splitting-${RELEASE.VERSION}.xsd</li>
<li>shadow.xsd</li>
<li>shadow-${RELEASE.VERSION}.xsd</li>
<li>database-discovery.xsd</li>
<li>database-discovery-${RELEASE.VERSION}.xsd</li>
</ul>
<h3 id="7-add-entrance-of-documents-of-the-new-release-into-home-page">7. Add entrance of documents of the new release into home page</h3>
<p>Refer to:</p>
<ul>
<li><a href="https://github.com/apache/shardingsphere-doc/blob/10fb1b5f610fe2cac00c66abe2df7a8cc30c2a18/index.html#L88-L126">English home page</a></li>
<li><a href="https://github.com/apache/shardingsphere-doc/blob/10fb1b5f610fe2cac00c66abe2df7a8cc30c2a18/index_zh.html#L88-L125">Chinese home page</a></li>
</ul>
<h3 id="8-merge-release-branch-to-master-and-delete-release-branch-on-github">8. Merge release branch to <code>master</code> and delete release branch on GitHub</h3>
<p>After confirmed that download links of new release in download pages are available, create a Pull Request on GitHub to merge <code>${RELEASE.VERSION}-release</code> into <code>master. If code conflicted, you may merge </code>master<code>into</code>${RELEASE.VERSION}-release` before merging Pull Request.</p>
<h3 id="9-generate-helm-chart-index-and-upload">9. Generate Helm Chart index and upload</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">mkdir -p /tmp/charts
cd /tmp/charts
wget https://archive.apache.org/dist/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>/apache-shardingsphere-proxy-chart-<span style="color:#e6db74">${</span>CHART.RELEASE.VERSION<span style="color:#e6db74">}</span>.tgz
curl https://shardingsphere.apache.org/charts/index.yaml &gt; previous_index.yaml
helm repo index --url https://archive.apache.org/dist/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span> --merge previous_index.yaml .
</code></pre></div><p>Confirm that there is no error in the generated <code>index.yaml</code>, then update <a href="https://github.com/apache/shardingsphere-doc/blob/asf-site/charts/index.yaml">https://github.com/apache/shardingsphere-doc/blob/asf-site/charts/index.yaml</a>.</p>
<h3 id="10-announce-release-completed-by-email">10. Announce release completed by email</h3>
<p>Send e-mail to <code>dev@shardingsphere.apache.org</code> and <code>announce@apache.org</code> to announce the release is finished</p>
<p>Announcement e-mail template(Plain text mode):</p>
<p>Title:</p>
<pre><code>[ANNOUNCE] Apache ShardingSphere ${RELEASE.VERSION} available
</code></pre><p>Body:</p>
<pre><code>Hi all,
Apache ShardingSphere Team is glad to announce the new release of Apache ShardingSphere ${RELEASE.VERSION}.
Apache ShardingSphere is an open-source ecosystem consisted of a set of distributed database solutions, including 3 independent products, JDBC, Proxy &amp; Sidecar (Planning).
They all provide functions of data scale out, distributed transaction and distributed governance, applicable in a variety of situations such as Java isomorphism, heterogeneous language and cloud native.
Apache ShardingSphere aiming at reasonably making full use of the computation and storage capacity of existed database in distributed system, rather than a totally new database.
As the cornerstone of enterprises, relational database still takes a huge market share. Therefore, we prefer to focus on its increment instead of a total overturn.
Download Links: https://shardingsphere.apache.org/document/current/en/downloads/
Release Notes: https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
Website: https://shardingsphere.apache.org/
ShardingSphere Resources:
- Issue: https://github.com/apache/shardingsphere/issues/
- Mailing list: dev@shardingsphere.apache.org
- Documents: https://shardingsphere.apache.org/document/current/
- Apache ShardingSphere Team
</code></pre><h2 id="appendix-how-to-abort-release-procedure">Appendix: How to abort release procedure</h2>
<p>You may refer to the following steps to abort current release procedure if you found any problem which blocks the release procedure.</p>
<h3 id="vote-down-the-release-and-describe-the-reason">Vote down the release and describe the reason</h3>
<p>Reply -1 to voting e-mail and describe the reason.</p>
<h3 id="remove-release-candidates-from-dev-area">Remove release candidates from dev area</h3>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">svn del https://dist.apache.org/repos/dist/dev/shardingsphere/<span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span> -m <span style="color:#e6db74">&#34;Drop </span><span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span><span style="color:#e6db74"> release candidates&#34;</span>
</code></pre></div><h3 id="drop-maven-staging-repository">Drop Maven Staging Repository</h3>
<p>Check the Staging Repository in <a href="https://repository.apache.org/#stagingRepositories">https://repository.apache.org/#stagingRepositories</a> and <strong>Drop</strong> it。</p>
<h3 id="reset-release-branch-and-delete-tag">Reset release branch and delete tag</h3>
<p>Reset branch <code>${RELEASE.VERSION}-release</code> to the commit before the commits made by <code>maven-release-plugin</code>:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git checkout <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>-release
git reset --hard <span style="color:#e6db74">${</span>COMMIT_ID_BEFORE_RELEASE<span style="color:#e6db74">}</span>
git push origin --force
</code></pre></div><p>Delete tag:</p>
<div class="highlight"><pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">git tag -d <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
git push origin -d <span style="color:#e6db74">${</span>RELEASE.VERSION<span style="color:#e6db74">}</span>
</code></pre></div>
<footer class=" footline" >
</footer>
</div>
</div>
</div>
<div id="navigation" >
<a class="nav nav-prev" href="https://shardingsphere.apache.org/community/en/contribute/document-contributor/" title="Documents Contributor Guide"> <i class="fa fa-long-arrow-left fa-lg"></i> Previous</a>
<a class="nav nav-next" href="https://shardingsphere.apache.org/community/en/contribute/release-elasticjob/" title="ElasticJob Release Guide" style="margin-right: 0px;">Next<i class="fa fa-long-arrow-right fa-lg"></i></a>
</div>
</section>
</div>
<div style="left: -1000px; overflow: scroll; position: absolute; top: -1000px; border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;">
<div style="border: none; box-sizing: content-box; height: 200px; margin: 0px; padding: 0px; width: 200px;"></div>
</div>
<script src="https://shardingsphere.apache.org/community/js/clipboard.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/perfect-scrollbar.jquery.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/jquery.sticky.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/featherlight.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/html5shiv-printshiv.min.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/highlight.pack.js?1660280484"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://shardingsphere.apache.org/community/js/modernizr.custom.71422.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/learn.js?1660280484"></script>
<script src="https://shardingsphere.apache.org/community/js/hugo-learn.js?1660280484"></script>
<script>
try{
function log(fileName, category, locale){
window._hmt.push(['_trackEvent', 'document', 'download', locale ? 'PDF_'+locale : fileName]);
gtag('event', 'Downloads', {
'event_category' : locale ? 'PDF' : category,
'event_label' : locale ? locale+'.pdf' : fileName
});
}
$('.padding[href*=shardingsphere]').on('click', function(){
var locale = /cn/.test(location.pathname) ?'cn':'en';
log('','', locale)
})
function getFileName(str){
var strs = str.split('/');
return strs[strs.length - 1]
}
$('a[href$="src.zip"]').on('click', function(){
log(getFileName($(this).attr('href')), "SRC")
})
$('a[href$="zip.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="zip.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz.asc"]').on('click', function(){
log(getFileName($(this).attr('href')), "ASC")
})
$('a[href$="tar.gz.sha512"]').on('click', function(){
log(getFileName($(this).attr('href')), "SHA512")
})
$('a[href$="tar.gz"]').on('click', function(){
log(getFileName($(this).attr('href')), "TAR")
})
}catch(ex){}
</script>
</body>
</html>