blob: b455e1b83dea0756f401c185ed41c67402373442 [file]
<!doctype html><html lang=en-US dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-community/how_to_release" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.2"><title data-rh=true>How to release | Apache Fory™</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true property=og:url content=https://fory.apache.org/docs/next/community/how_to_release /><meta data-rh=true property=og:locale content=en_US /><meta data-rh=true property=og:locale:alternate content=zh_CN /><meta data-rh=true name=docusaurus_locale content=en-US /><meta data-rh=true name=docsearch:language content=en-US /><meta data-rh=true http-equiv=Content-Security-Policy content="frame-src 'self' https://ghbtns.com/;"/><meta data-rh=true property=og:image content=https://fory.apache.org/img/logo.png /><meta data-rh=true property=og:image:width content=1500 /><meta data-rh=true property=og:image:height content=1500 /><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true name=twitter:image content=https://fory.apache.org/img/logo.png /><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 Fory™"/><meta data-rh=true name=description content="This document mainly introduces how the release manager releases a new version of Apache Fory™."/><meta data-rh=true property=og:description content="This document mainly introduces how the release manager releases a new version of Apache Fory™."/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://fory.apache.org/docs/next/community/how_to_release /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/next/community/how_to_release hreflang=en-US /><link data-rh=true rel=alternate href=https://fory.apache.org/zh-CN/docs/next/community/how_to_release hreflang=zh-CN /><link data-rh=true rel=alternate href=https://fory.apache.org/docs/next/community/how_to_release hreflang=x-default /><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://fory.apache.org/docs/next/community/how_to_release","name":"How to release","position":1}]}</script><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Apache Fory™ RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Apache Fory™ Atom Feed"><script type=text/javascript>"fury.apache.org"===window.location.host&&(window.location.href="https://fory.apache.org"),function(){var i=["0.17","0.16","0.15","0.14","0.13","0.12","0.11","0.10"];if(0!==i.length){var t=window.location.pathname.split("/").filter(Boolean),a=/^[a-z]{2}-[A-Z]{2}$/.test(t[0])?t[0]:null,e=+!!a;if(!("docs"!==t[e]||0>i.indexOf(t[e+1]))){var o=["/archive"];a&&o.push(a),o.push.apply(o,t.slice(e));var n=window.location.pathname.endsWith("/")?"/":"";window.location.replace(o.join("/")+n+window.location.search+window.location.hash)}}}(),function(){var i=window.location.pathname.split("/").filter(Boolean),t="docs"===i[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(i[0])&&"docs"===i[1]?1:-1;if(!(t<0)){var a=t+1,e=i[a];if(!/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(e)){"next"===e&&a++;var o=i.slice(a).join("/"),n=o.split("/"),r=2===n.length&&"guide"===n[0]?n[1]:null,s=r&&["cpp","csharp","dart","go","java","javascript","kotlin","python","rust","scala","swift"].indexOf(r)>=0?"object-serialization/"+r:({"introduction/overview":"introduction","introduction/benchmark":"benchmarks","start/install":"start","start/usage":"start","guide/xlang":"object-serialization/xlang","guide/xlang/getting_started":"object-serialization/xlang","guide/xlang/serialization":"object-serialization/xlang","guide/java/json_support":"json","guide/rust/external_types":"object-serialization/rust/external-types","guide/dart/external_types":"object-serialization/dart/external-types","guide/swift/external_types":"object-serialization/swift/external-types","guide/csharp/external_types":"object-serialization/csharp/external-types","guide/csharp/basic_serialization":"object-serialization/csharp/basic-serialization","guide/dart/inheritance":"object-serialization/dart/inheritance","benchmarks/rust":"benchmarks/object-serialization/xlang/rust","compiler/compiler_guide":"compiler/getting-started","community/development":"development"})[o];if(s){var l="/"+i.slice(0,a).join("/");window.location.replace(l+"/"+s+"/"+window.location.search+window.location.hash)}}}}(),function(){var i=window.location.pathname,t=i.split("/").filter(Boolean),a="docs"===t[0]?0:/^[a-z]{2}-[A-Z]{2}$/.test(t[0])&&"docs"===t[1]?1:-1;if(!(a<0)){var e=a+1,o=t[e];if(("next"===o||/^[0-9]+[.][0-9]+(?:[.][0-9]+)?$/.test(o))&&e++,!("docs"!==t[e]||0>["guide","introduction","start"].indexOf(t[e+1]))){t.splice(e,1);var n="/"+t.join("/");i.endsWith("/")&&(n+="/"),window.location.replace(n+window.location.search+window.location.hash)}}}()</script><link rel=stylesheet href=/assets/css/styles.f8ec99d5.css /><script src=/assets/js/runtime~main.6fee6d1a.js defer></script><script src=/assets/js/main.a9529dae.js defer></script></head><body><svg style="display: none;"><defs>
<symbol id=theme-svg-external-link viewBox="0 0 24 24"><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"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><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"/></svg></button><a class=navbar__brand href=/><div class=navbar__logo><img src=/img/fory-logo-light.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"/><img src=/img/fory-logo-dark.png alt="Apache Fory™ Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"/></div><b class="navbar__title text--truncate"></b></a><a class="navbar__item navbar__link" href=/docs/next/introduction/>Docs</a><a class="navbar__item navbar__link" href=/docs/next/specification/xlang_serialization_spec>Specification</a><a aria-current=page class="navbar__item navbar__link navbar__link--active" href=/docs/next/community/>Community</a><a class="navbar__item navbar__link" href=/user>Users</a><a class="navbar__item navbar__link" href=/download>Download</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link>ASF</a><ul class=dropdown__menu><li><a href=https://www.apache.org/ target=_blank rel="noopener noreferrer" class=dropdown__link>Foundation</a><li><a href=https://www.apache.org/licenses/ target=_blank rel="noopener noreferrer" class=dropdown__link>License</a><li><a href=https://www.apache.org/events/current-event.html target=_blank rel="noopener noreferrer" class=dropdown__link>Events</a><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html target=_blank rel="noopener noreferrer" class=dropdown__link>Privacy</a><li><a href=https://www.apache.org/security/ target=_blank rel="noopener noreferrer" class=dropdown__link>Security</a><li><a href=https://www.apache.org/foundation/sponsorship.html target=_blank rel="noopener noreferrer" class=dropdown__link>Sponsorship</a><li><a href=https://www.apache.org/foundation/thanks.html target=_blank rel="noopener noreferrer" class=dropdown__link>Thanks</a><li><a href=https://www.apache.org/foundation/policies/conduct.html target=_blank rel="noopener noreferrer" class=dropdown__link>Code of Conduct</a></ul></div><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a class=navbar__link aria-haspopup=true aria-expanded=false role=button href=/docs/next/community/how_to_release>dev</a><ul class=dropdown__menu><li><a aria-current=page class="dropdown__link dropdown__link--active" href=/docs/next/community/how_to_release>dev</a><li><a class=dropdown__link href=/docs/community/how_to_release>1.7</a><li><a class=dropdown__link href=/docs/1.6/community/how_to_release>1.6</a><li><a class=dropdown__link href=/docs/1.5/community/how_to_release>1.5</a><li><a class=dropdown__link href=/docs/1.4/community/how_to_release>1.4</a><li><a class=dropdown__link href=/docs/1.3/community/how_to_release>1.3</a><li><a class=dropdown__link href=/docs/1.2/community/how_to_release>1.2</a><li><a class=dropdown__link href=/docs/1.1/community/how_to_release>1.1</a><li><a class=dropdown__link href=/docs/1.0/community/how_to_release>1.0</a><li><a href=https://fory.apache.org/archive/docs/0.17/introduction/overview/ target=_blank rel="noopener noreferrer" class=dropdown__link>More versions<svg width=12 height=12 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="navbar__item navbar__link header-github-link" aria-label="GitHub repository"></a><div class="navbar__item dropdown dropdown--hoverable dropdown--right"><a href=# aria-haspopup=true aria-expanded=false role=button class=navbar__link><svg viewBox="0 0 24 24" width=20 height=20 aria-hidden=true class=iconLanguage_nlXk><path fill=currentColor d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"/></svg>English</a><ul class=dropdown__menu><li><a href=/docs/next/community/how_to_release target=_self rel="noopener noreferrer" class="dropdown__link dropdown__link--active" lang=en-US>English</a><li><a href=/zh-CN/docs/next/community/how_to_release target=_self rel="noopener noreferrer" class=dropdown__link lang=zh-CN>简体中文</a></ul></div><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><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"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><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"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1><div class=navbar__search><span aria-label="expand searchbar" role=button class=search-icon tabindex=0></span><input id=search_input_react type=search placeholder=Loading... aria-label=Search class="navbar__search-input search-bar" disabled/></div></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/docs/next/community/><span class=linkLabel_WmDU>Community</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/docs/next/community/how_to_join_community><span class=linkLabel_WmDU>How to join Apache Fory™</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current=page href=/docs/next/community/how_to_release><span class=linkLabel_WmDU>How to release</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class=menu__link href=/docs/next/community/how_to_verify><span class=linkLabel_WmDU>How to verify</span></a></ul></nav></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_VOVn"><div class="theme-doc-version-banner alert alert--warning margin-bottom--md" role=alert><div>This is unreleased documentation for <!-- -->Apache Fory™<!-- --> <b>dev</b> version.</div><div class=margin-top--md>For up-to-date documentation, see the <b><a href=/docs/community/how_to_release>latest version</a></b> (<!-- -->1.7<!-- -->).</div></div><div class=docItemContainer_Djhp><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=Breadcrumbs><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>How to release</span></ul></nav><span class="theme-doc-version-badge badge badge--secondary">Version: dev</span><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type=button class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>How to release</h1></header><p>This document mainly introduces how the release manager releases a new version of Apache Fory™.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=introduction>Introduction<a href=#introduction class=hash-link aria-label="Direct link to Introduction" title="Direct link to Introduction" translate=no>​</a></h2>
<p>Source Release is the most important part which Apache values.</p>
<p>Please pay more attention to license and signing issues.
Publishing software is a serious thing and has legal consequences.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=first-time-as-a-release-manager>First-time as a release manager<a href=#first-time-as-a-release-manager class=hash-link aria-label="Direct link to First-time as a release manager" title="Direct link to First-time as a release manager" translate=no>​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=environmental-requirements>Environmental requirements<a href=#environmental-requirements class=hash-link aria-label="Direct link to Environmental requirements" title="Direct link to Environmental requirements" translate=no>​</a></h3>
<p>This release process is operated in the Ubuntu OS, and the following tools are required:</p>
<ul>
<li class="">OpenJDK 25+</li>
<li class="">Apache Maven 3.6.3+</li>
<li class="">Python 3.8+</li>
<li class="">GnuPG 2.x</li>
<li class="">Git</li>
<li class="">SVN (apache uses svn to host project releases)</li>
<li class="">Optional package release and verification tools: Node.js LTS and npm, Rust via rustup, Go 1.24+, Dart, .NET SDK 8.0+, and sbt</li>
<li class="">Pay attention to setting environment variables: if you configure gpg keys under a different directory,
please <code>export GNUPGHOME=$(xxx)</code></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=prepare-gpg-key>Prepare GPG Key<a href=#prepare-gpg-key class=hash-link aria-label="Direct link to Prepare GPG Key" title="Direct link to Prepare GPG Key" translate=no>​</a></h3>
<p>If you are the first to become a release manager, you need to prepare a gpg key.</p>
<p>Following is a quick setup, you can refer to <a href=https://infra.apache.org/openpgp.html target=_blank rel="noopener noreferrer" class="">Apache openpgp doc</a> for further
details.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=install-gpg>Install GPG<a href=#install-gpg class=hash-link aria-label="Direct link to Install GPG" title="Direct link to Install GPG" translate=no>​</a></h4>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>sudo</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>apt</span><span class="token plain"> </span><span class="token function" style=color:#d73a49>install</span><span class="token plain"> gnupg2</span><br/></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=generate-gpg-key>Generate GPG Key<a href=#generate-gpg-key class=hash-link aria-label="Direct link to Generate GPG Key" title="Direct link to Generate GPG Key" translate=no>​</a></h4>
<p>Please use your apache name and email for generate key</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">$ gpg --full-gen-key</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">gpg </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">GnuPG</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2.2</span><span class="token plain">.20</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> Copyright </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">C</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>2020</span><span class="token plain"> Free Software Foundation, Inc.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">This is </span><span class="token function" style=color:#d73a49>free</span><span class="token plain"> software: you are </span><span class="token function" style=color:#d73a49>free</span><span class="token plain"> to change and redistribute it.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">There is NO WARRANTY, to the extent permitted by law.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Please </span><span class="token keyword" style=color:#00009f>select</span><span class="token plain"> what kind of key you want:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>1</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> RSA and RSA </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">default</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> DSA and Elgamal</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>3</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> DSA </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">sign only</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>4</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> RSA </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">sign only</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>14</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> Existing key from card</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Your selection? </span><span class="token number" style=color:#36acaa>1</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># input 1</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">RSA keys may be between </span><span class="token number" style=color:#36acaa>1024</span><span class="token plain"> and </span><span class="token number" style=color:#36acaa>4096</span><span class="token plain"> bits long.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">What keysize </span><span class="token keyword" style=color:#00009f>do</span><span class="token plain"> you want? </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>2048</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>4096</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># input 4096</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Requested keysize is </span><span class="token number" style=color:#36acaa>4096</span><span class="token plain"> bits</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Please specify how long the key should be valid.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> key does not expire</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">n</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> key expires </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> n days</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">n</span><span class="token operator" style=color:#393A34>></span><span class="token plain">w </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> key expires </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> n weeks</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">n</span><span class="token operator" style=color:#393A34>></span><span class="token plain">m </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> key expires </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> n months</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">n</span><span class="token operator" style=color:#393A34>></span><span class="token plain">y </span><span class="token operator" style=color:#393A34>=</span><span class="token plain"> key expires </span><span class="token keyword" style=color:#00009f>in</span><span class="token plain"> n years</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Key is valid for? </span><span class="token punctuation" style=color:#393A34>(</span><span class="token number" style=color:#36acaa>0</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token number" style=color:#36acaa>0</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># input 0</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Key does not expire at all</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Is this correct? </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">y/N</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> y </span><span class="token comment" style=color:#999988;font-style:italic># input y</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">GnuPG needs to construct a user ID to identify your key.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Real name: Chaokun Yang </span><span class="token comment" style=color:#999988;font-style:italic># input your name</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Email address: chaokunyang@apache.org </span><span class="token comment" style=color:#999988;font-style:italic># input your email</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Comment: CODE SIGNING KEY </span><span class="token comment" style=color:#999988;font-style:italic># input some annotations, optional</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">You selected this </span><span class="token environment constant" style=color:#36acaa>USER</span><span class="token plain">-ID:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Chaokun &lt;chaokunyang@apache.org>"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Change </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">N</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain">ame, </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">C</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain">omment, </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">E</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain">mail or </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">O</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain">kay/</span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">Q</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain">uit? O </span><span class="token comment" style=color:#999988;font-style:italic># input O</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">We need to generate a lot of random bytes. It is a good idea to perform</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">some other action </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">type on the keyboard, move the mouse, utilize the</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">disks</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> during the prime generation</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> this gives the random number</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">generator a better chance to gain enough entropy.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">We need to generate a lot of random bytes. It is a good idea to perform</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">some other action </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">type on the keyboard, move the mouse, utilize the</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">disks</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> during the prime generation</span><span class="token punctuation" style=color:#393A34>;</span><span class="token plain"> this gives the random number</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">generator a better chance to gain enough entropy.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># Input the security key</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">┌──────────────────────────────────────────────────────┐</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">│ Please enter this passphrase │</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">│ │</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">│ Passphrase: _______________________________ │</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">│ │</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">│ </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">OK</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">Cancel</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> │</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">└──────────────────────────────────────────────────────┘</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># key generation will be done after your inputting the key with the following output</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">gpg: key E49B00F626B marked as ultimately trusted</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">gpg: revocation certificate stored as </span><span class="token string" style=color:#e3116c>'/Users/chaokunyang/.gnupg/openpgp-revocs.d/1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4.rev'</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">public and secret key created and signed.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pub rsa4096 </span><span class="token number" style=color:#36acaa>2022</span><span class="token plain">-07-12 </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">SC</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">uid </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">ultimate</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> Chaokun </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">chaokunyang@apache.org</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">sub rsa4096 </span><span class="token number" style=color:#36acaa>2022</span><span class="token plain">-07-12 </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">E</span><span class="token punctuation" style=color:#393A34>]</span><br/></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=upload-your-public-key-to-public-gpg-keyserver>Upload your public key to public GPG keyserver<a href=#upload-your-public-key-to-public-gpg-keyserver class=hash-link aria-label="Direct link to Upload your public key to public GPG keyserver" title="Direct link to Upload your public key to public GPG keyserver" translate=no>​</a></h4>
<p>Firstly, list your key:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">gpg --list-keys</span><br/></div></code></pre></div></div>
<p>The output is like:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">--------------------------------------------------</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">pub rsa4096 </span><span class="token number" style=color:#36acaa>2024</span><span class="token plain">-03-27 </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">SC</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">uid </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">ultimate</span><span class="token punctuation" style=color:#393A34>]</span><span class="token plain"> chaokunyang </span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">CODE SIGNING KEY</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">chaokunyang@apache.org</span><span class="token operator" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">sub rsa4096 </span><span class="token number" style=color:#36acaa>2024</span><span class="token plain">-03-27 </span><span class="token punctuation" style=color:#393A34>[</span><span class="token plain">E</span><span class="token punctuation" style=color:#393A34>]</span><br/></div></code></pre></div></div>
<p>Then, send your key id to key server:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">gpg </span><span class="token parameter variable" style=color:#36acaa>--keyserver</span><span class="token plain"> keys.openpgp.org --send-key </span><span class="token operator" style=color:#393A34>&lt;</span><span class="token plain">key-id</span><span class="token operator" style=color:#393A34>></span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># e.g., 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4</span><br/></div></code></pre></div></div>
<p>Among them, <code>keys.openpgp.org</code> is a randomly selected keyserver, you can use keyserver.ubuntu.com or any other
full-featured keyserver.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=check-whether-the-key-is-created-successfully>Check whether the key is created successfully<a href=#check-whether-the-key-is-created-successfully class=hash-link aria-label="Direct link to Check whether the key is created successfully" title="Direct link to Check whether the key is created successfully" translate=no>​</a></h4>
<p>Uploading takes about one minute; after that, you can check by email at the corresponding keyserver.</p>
<p>Uploading keys to the keyserver is mainly for joining
a <a href=https://infra.apache.org/release-signing.html#web-of-trust target=_blank rel="noopener noreferrer" class="">Web of Trust</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=add-your-gpg-public-key-to-the-project-keys-file>Add your GPG public key to the project KEYS file<a href=#add-your-gpg-public-key-to-the-project-keys-file class=hash-link aria-label="Direct link to Add your GPG public key to the project KEYS file" title="Direct link to Add your GPG public key to the project KEYS file" translate=no>​</a></h4>
<p>The svn repository of the release branch is: <a href=https://dist.apache.org/repos/dist/release/fory target=_blank rel="noopener noreferrer" class="">https://dist.apache.org/repos/dist/release/fory</a></p>
<p>Please add the public key to KEYS in the release branch:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">svn co </span><span class="token parameter variable" style=color:#36acaa>--depth</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">files https://dist.apache.org/repos/dist/release/fory fory-dist</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token builtin class-name">cd</span><span class="token plain"> fory-dist</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token punctuation" style=color:#393A34>(</span><span class="token plain">gpg --list-sigs YOUR_NAME@apache.org </span><span class="token operator" style=color:#393A34>&&</span><span class="token plain"> gpg </span><span class="token parameter variable" style=color:#36acaa>--export</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>--armor</span><span class="token plain"> YOUR_NAME@apache.org</span><span class="token punctuation" style=color:#393A34>)</span><span class="token plain"> </span><span class="token operator" style=color:#393A34>>></span><span class="token plain"> KEYS </span><span class="token comment" style=color:#999988;font-style:italic># Append your key to the KEYS file</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn </span><span class="token function" style=color:#d73a49>add</span><span class="token plain"> </span><span class="token builtin class-name">.</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># It is not needed if the KEYS document exists before.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn ci </span><span class="token parameter variable" style=color:#36acaa>-m</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"add gpg key for YOUR_NAME"</span><span class="token plain"> </span><span class="token comment" style=color:#999988;font-style:italic># Later on, if you are asked to enter a username and password, just use your apache username and password.</span><br/></div></code></pre></div></div>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=upload-the-gpg-public-key-to-your-github-account>Upload the GPG public key to your GitHub account<a href=#upload-the-gpg-public-key-to-your-github-account class=hash-link aria-label="Direct link to Upload the GPG public key to your GitHub account" title="Direct link to Upload the GPG public key to your GitHub account" translate=no>​</a></h4>
<ul>
<li class="">Enter <a href=https://github.com/settings/keys target=_blank rel="noopener noreferrer" class="">https://github.com/settings/keys</a> to add your GPG key.</li>
<li class="">Please remember to bind the email address used in the GPG key to your GitHub
account (<a href=https://github.com/settings/emails target=_blank rel="noopener noreferrer" class="">https://github.com/settings/emails</a>) if you find "unverified" after adding it.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=further-reading>Further reading<a href=#further-reading class=hash-link aria-label="Direct link to Further reading" title="Direct link to Further reading" translate=no>​</a></h3>
<p>It's recommended but not mandatory to read following documents before making a release to know more details about apache
release:</p>
<ul>
<li class="">Release policy: <a href=https://www.apache.org/legal/release-policy.html target=_blank rel="noopener noreferrer" class="">https://www.apache.org/legal/release-policy.html</a></li>
<li class="">TLP release: <a href=https://infra.apache.org/release-distribution target=_blank rel="noopener noreferrer" class="">https://infra.apache.org/release-distribution</a></li>
<li class="">Release sign: <a href=https://infra.apache.org/release-signing.html target=_blank rel="noopener noreferrer" class="">https://infra.apache.org/release-signing.html</a></li>
<li class="">Release publish: <a href=https://infra.apache.org/release-publishing.html target=_blank rel="noopener noreferrer" class="">https://infra.apache.org/release-publishing.html</a></li>
<li class="">Release download pages: <a href=https://infra.apache.org/release-download-pages.html target=_blank rel="noopener noreferrer" class="">https://infra.apache.org/release-download-pages.html</a></li>
<li class="">Publishing maven artifacts: <a href=https://infra.apache.org/publishing-maven-artifacts.html target=_blank rel="noopener noreferrer" class="">https://infra.apache.org/publishing-maven-artifacts.html</a></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=start-discussion-about-the-release>Start discussion about the release<a href=#start-discussion-about-the-release class=hash-link aria-label="Direct link to Start discussion about the release" title="Direct link to Start discussion about the release" translate=no>​</a></h2>
<p>Start a discussion about the next release via sending email to: <a href=mailto:dev@fory.apache.org target=_blank rel="noopener noreferrer" class="">dev@fory.apache.org</a>:</p>
<p>Title:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">[DISCUSS] Release Apache Fory ${release_version}</span><br/></div></code></pre></div></div>
<p>Content:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">Hello, Apache Fory Community,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">This is a call for a discussion to release Apache Fory version ${release_version}.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The planned change list for this release:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/compare/v${previous_release_version}...main</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Please leave your comments here about this release plan. We will bump the version in repo and start the release process after the discussion.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Thanks,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${name}</span><br/></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=preparing-for-release>Preparing for release<a href=#preparing-for-release class=hash-link aria-label="Direct link to Preparing for release" title="Direct link to Preparing for release" translate=no>​</a></h2>
<p>If the discussion goes positive, you will need to prepare the release artifacts.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=github-branch-and-tag>GitHub branch and tag<a href=#github-branch-and-tag class=hash-link aria-label="Direct link to GitHub branch and tag" title="Direct link to GitHub branch and tag" translate=no>​</a></h3>
<ul>
<li class="">Create a new branch named <code>releases-${release_version}</code>. You can also run <code>python ci/release.py prepare -v ${release_version}</code> to create the branch, bump all versions, and create the preparation commit.</li>
<li class="">Bump version to <code>${release_version}</code> by executing command <code>python ci/release.py bump_version -l all -version ${release_version}</code> if you do not use <code>prepare</code></li>
<li class="">Make a git commit and push the branch to <code>git@github.com:apache/fory.git</code></li>
<li class="">Create a new release-candidate tag by <code>git tag v${release_version}-${rc_version}</code>, then push it to <code>git@github.com:apache/fory.git</code></li>
<li class="">If the Go module under <code>go/fory</code> is part of this release, create and push the Go submodule tag after the vote passes. For example, for the final <code>${release_version}</code> release:</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token function" style=color:#d73a49>git</span><span class="token plain"> remote </span><span class="token function" style=color:#d73a49>add</span><span class="token plain"> apache git@github.com:apache/fory.git</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>git</span><span class="token plain"> tag go/fory/v</span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>git</span><span class="token plain"> push apache go/fory/v</span><span class="token variable" style=color:#36acaa>${release_version}</span><br/></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=stage-a-release-candidate-in-ci>Stage a release candidate in CI<a href=#stage-a-release-candidate-in-ci class=hash-link aria-label="Direct link to Stage a release candidate in CI" title="Direct link to Stage a release candidate in CI" translate=no>​</a></h3>
<p>The proposed <a href=https://github.com/apache/fory/pull/3983 target=_blank rel="noopener noreferrer" class="">Stage Release Candidate workflow</a>
stages source artifacts to Apache Trusted Releases (ATR) using GitHub OIDC and JVM
artifacts to Nexus. Once the workflow is available and approved for automated
signing, use CI staging by default. Use the manual SVN and Nexus steps below only
when manual staging is explicitly requested.</p>
<p>Run the workflow on the release-candidate tag, not a branch:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">gh workflow run stage-release-candidate.yml </span><span class="token parameter variable" style=color:#36acaa>--repo</span><span class="token plain"> apache/fory </span><span class="token punctuation" style=color:#393A34>\</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>--ref</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"v</span><span class="token string variable" style=color:#36acaa>${release_version}</span><span class="token string" style=color:#e3116c>-</span><span class="token string variable" style=color:#36acaa>${rc_version}</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-f</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>source</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">true </span><span class="token parameter variable" style=color:#36acaa>-f</span><span class="token plain"> </span><span class="token assign-left variable" style=color:#36acaa>jvm</span><span class="token operator" style=color:#393A34>=</span><span class="token plain">true</span><br/></div></code></pre></div></div>
<p>Record the workflow run URL, the exact tag commit, the ATR candidate URL, and both
Nexus staging repository URLs from that run. CI stages a candidate; it does not
approve or publish a release. Before opening the vote, complete
<a href=#verify-ci-artifacts-on-trusted-hardware class="">independent reproducibility verification</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=manual-staging-build-and-upload-artifacts-to-svn-distdev-repo>Manual staging: build and upload artifacts to SVN dist/dev repo<a href=#manual-staging-build-and-upload-artifacts-to-svn-distdev-repo class=hash-link aria-label="Direct link to Manual staging: build and upload artifacts to SVN dist/dev repo" title="Direct link to Manual staging: build and upload artifacts to SVN dist/dev repo" translate=no>​</a></h3>
<p>First you need to build source release artifacts by <code>python ci/release.py build -v ${release_version}</code>.</p>
<p>Then you need to upload it to svn dist repo. The dist repo of the dev branch
is: <a href=https://dist.apache.org/repos/dist/dev/fory target=_blank rel="noopener noreferrer" class="">https://dist.apache.org/repos/dist/dev/fory</a></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token comment" style=color:#999988;font-style:italic># As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it.</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn co https://dist.apache.org/repos/dist/dev/fory fory-dist-dev</span><br/></div></code></pre></div></div>
<p>Then, upload the artifacts:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token builtin class-name">cd</span><span class="token plain"> fory-dist-dev</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># create a directory named by version</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>mkdir</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain">-</span><span class="token variable" style=color:#36acaa>${rc_version}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># copy source code and signature package to the versioned directory</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>cp</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>${repo_dir}</span><span class="token plain">/dist/* </span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain">-</span><span class="token variable" style=color:#36acaa>${rc_version}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># check svn status</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn status</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># add to svn</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn </span><span class="token function" style=color:#d73a49>add</span><span class="token plain"> </span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain">-</span><span class="token variable" style=color:#36acaa>${rc_version}</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># check svn status</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn status</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token comment" style=color:#999988;font-style:italic># commit to SVN remote server</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">svn commit </span><span class="token parameter variable" style=color:#36acaa>-m</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Prepare for fory </span><span class="token string variable" style=color:#36acaa>${release_version}</span><span class="token string" style=color:#e3116c>-</span><span class="token string variable" style=color:#36acaa>${rc_version}</span><span class="token string" style=color:#e3116c>"</span><br/></div></code></pre></div></div>
<p>Visit <a href=https://dist.apache.org/repos/dist/dev/fory/ target=_blank rel="noopener noreferrer" class="">https://dist.apache.org/repos/dist/dev/fory/</a> to check the artifacts are uploaded correctly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=what-to-do-if-something-goes-wrong>What to do if something goes wrong<a href=#what-to-do-if-something-goes-wrong class=hash-link aria-label="Direct link to What to do if something goes wrong" title="Direct link to What to do if something goes wrong" translate=no>​</a></h3>
<p>If some files are unexpected, you need to remove by <code>svn delete</code> and repeat the above upload process.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=voting>Voting<a href=#voting class=hash-link aria-label="Direct link to Voting" title="Direct link to Voting" translate=no>​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=check-version>check version<a href=#check-version class=hash-link aria-label="Direct link to check version" title="Direct link to check version" translate=no>​</a></h3>
<p>Fory requires votes from the Fory Community.</p>
<ul>
<li class="">release_version: the version for fory, like 1.0.0.</li>
<li class="">release_candidate_version: the version for voting, like 1.0.0-rc1.</li>
<li class="">maven_artifact_number: the number for Maven staging artifacts, like 1001. Specifically, the maven_artifact_number can
be found by searching "fory" on <a href=https://repository.apache.org/#stagingRepositories target=_blank rel="noopener noreferrer" class="">https://repository.apache.org/#stagingRepositories</a>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=manual-staging-build-the-source-code-of-fory-and-release-it-to-nexus>Manual staging: build the source code of fory and release it to nexus<a href=#manual-staging-build-the-source-code-of-fory-and-release-it-to-nexus class=hash-link aria-label="Direct link to Manual staging: build the source code of fory and release it to nexus" title="Direct link to Manual staging: build the source code of fory and release it to nexus" translate=no>​</a></h3>
<p>Skip this section when the CI workflow has already staged the JVM artifacts.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=configure-apache-account-passwords>Configure Apache Account Passwords<a href=#configure-apache-account-passwords class=hash-link aria-label="Direct link to Configure Apache Account Passwords" title="Direct link to Configure Apache Account Passwords" translate=no>​</a></h4>
<p>Before publishing Fory to Nexus, you need to securely configure your Apache account credentials. This step is critical
as passwords must be encrypted.</p>
<p>First, open your Maven global settings file <code>settings.xml</code>, typically located at <code>~/.m2/settings.xml</code>. Add or modify the
following section:</p>
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>servers</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>server</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>id</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">apache.snapshots.https</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>id</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>username</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">your-apache-username</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>username</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>password</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">{your-encrypted-password}</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>password</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>server</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>server</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>id</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">apache.releases.https</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>id</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>username</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">your-apache-username</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>username</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>password</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">{your-encrypted-password}</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>password</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>server</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>servers</span><span class="token tag punctuation" style=color:#393A34>></span><br/></div></code></pre></div></div>
<p><strong>Important Notes:</strong></p>
<ul>
<li class="">Replace <code>your-apache-username</code> with your Apache LDAP username</li>
<li class="">Passwords must be encrypted using Maven's password encryption tool</li>
<li class="">Encrypted passwords should be enclosed in curly braces <code>{}</code></li>
</ul>
<p>Refer to the official documentation for detailed encryption
instructions: <a href=https://infra.apache.org/publishing-maven-artifacts.html target=_blank rel="noopener noreferrer" class="">Publishing Maven Artifacts</a></p>
<p>Steps to encrypt your password:</p>
<ol>
<li class="">
<p>Generate a master password (if you haven't already):</p>
</li>
<li class="">
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">mvn --encrypt-master-password your-master-password</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div></code></pre></div></div>
<p>Save the output to <code>~/.m2/settings-security.xml</code>:</p>
</li>
<li class="">
<div class="language-xml codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-xml codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>settingsSecurity</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> </span><span class="token tag punctuation" style=color:#393A34>&lt;</span><span class="token tag" style=color:#00009f>master</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain">{your-encrypted-master-password}</span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>master</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token tag punctuation" style=color:#393A34>&lt;/</span><span class="token tag" style=color:#00009f>settingsSecurity</span><span class="token tag punctuation" style=color:#393A34>></span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div></code></pre></div></div>
</li>
<li class="">
<p>Encrypt your Apache account password:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">mvn --encrypt-password your-apache-password</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div></code></pre></div></div>
<p>Place the encrypted output into the <code>password</code> field in <code>settings.xml</code></p>
</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=build-and-publish-java-kotlin-and-scala-modules>Build and Publish Java, Kotlin, and Scala Modules<a href=#build-and-publish-java-kotlin-and-scala-modules class=hash-link aria-label="Direct link to Build and Publish Java, Kotlin, and Scala Modules" title="Direct link to Build and Publish Java, Kotlin, and Scala Modules" translate=no>​</a></h4>
<p>Run the JVM release command from the repository root. By default, it publishes Java, Kotlin, and Scala in that order:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">python ci/release.py publish_jvm</span><br/></div></code></pre></div></div>
<p>The release script selects an OpenJDK 25 runtime, runs each module's release commands from the correct directory, and
verifies the <code>fory-core</code> multi-release binary and source JARs. On platforms other than macOS, install OpenJDK 25 and set
<code>JAVA_HOME</code> and <code>PATH</code> before running the command.</p>
<p>To rerun or publish one module at a time, use the corresponding command:</p>
<div class="language-sh codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-sh codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">python ci/release.py publish_java</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">python ci/release.py publish_kotlin</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">python ci/release.py publish_scala</span><br/></div></code></pre></div></div>
<p>When using the individual commands, publish Java first and keep its generated artifacts under <code>java/fory-core/target</code>.
The Kotlin and Scala release paths rely on those artifacts for the final <code>fory-core</code> release-JAR verification.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=close-the-maven-staging-repository-in-nexus>Close the Maven staging repository in Nexus<a href=#close-the-maven-staging-repository-in-nexus class=hash-link aria-label="Direct link to Close the Maven staging repository in Nexus" title="Direct link to Close the Maven staging repository in Nexus" translate=no>​</a></h4>
<p>After completing the publication of all modules, perform the following steps in Nexus:</p>
<ol>
<li class="">Log in to the Apache Nexus repository management interface</li>
<li class="">Navigate to the staging repositories page</li>
<li class="">Locate the latest Fory staging repository, such as <code>orgapachefory-1001</code></li>
<li class="">Execute the "Close" operation to validate all uploaded artifacts</li>
<li class="">Record the staging repository ID for the vote email</li>
<li class="">Do not execute the "Release" operation until the vote passes</li>
</ol>
<p>These steps ensure all staged artifacts are verified before the community vote.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=build-a-pre-release>Build a pre-release<a href=#build-a-pre-release class=hash-link aria-label="Direct link to Build a pre-release" title="Direct link to Build a pre-release" translate=no>​</a></h3>
<p>You need to build a Pre-release before voting, such as:
<a href=https://github.com/apache/fory/releases/tag/v$%7Brelease_version%7D-$%7Brc_version%7D target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory/releases/tag/v${release_version}-${rc_version}</a></p>
<p>Pushing a <code>v*</code> tag triggers the tag-based package release workflows for Python, compiler, JavaScript, Rust, Dart, and C#.
For release-candidate tags that contain <code>-</code>, workflows publish prerelease or staging artifacts where the ecosystem supports
it, such as TestPyPI for Python packages and the <code>next</code> tag for npm packages. Monitor all triggered workflows before
starting the vote.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=verify-ci-artifacts-on-trusted-hardware>Verify CI artifacts on trusted hardware<a href=#verify-ci-artifacts-on-trusted-hardware class=hash-link aria-label="Direct link to Verify CI artifacts on trusted hardware" title="Direct link to Verify CI artifacts on trusted hardware" translate=no>​</a></h3>
<p>For a candidate signed in CI, the release manager must independently rebuild and
compare <strong>every CI-signed artifact</strong> on trusted hardware before opening the vote.
Voters should repeat this check and report their results before casting a <code>+1</code>.
Trusted hardware means a machine the verifier controls and trusts, not another
GitHub Actions job. This implements the validation step in the ASF guidance on
<a href=https://infra.apache.org/release-signing.html#automated-release-signing target=_blank rel="noopener noreferrer" class="">automated release signing</a>.</p>
<p>Before enabling CI signing, demonstrate that all artifacts to be signed can be
reproduced this way and obtain the required workflow approval through the Infra
request. Adding this procedure to the documentation does not itself establish
that a build is reproducible.</p>
<ol>
<li class="">
<p>Download the candidate artifacts, signatures, and checksum files from the
exact ATR candidate and both Nexus staging repositories recorded for the run.
Verify their checksums and PGP signatures against the expected public key in
the project's <code>KEYS</code> file. This checks the downloaded files, but is not yet a
reproducibility check.</p>
</li>
<li class="">
<p>On trusted hardware, use a fresh checkout of the exact RC tag commit. Match
the CI build's toolchain versions, dependency versions, release profiles, and
other build inputs. Rebuild from source without reusing CI-produced binaries
or build-output caches. Run packaging steps only: do not invoke <code>stage_jvm</code>,
<code>publish_jvm</code>, or upload another candidate merely to verify an existing one.
For the source archive, run this unsigned build from the repository root:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">python3 ci/release.py build </span><span class="token parameter variable" style=color:#36acaa>-v</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>$release_version</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"> --skip-sign</span><br/></div></code></pre></div></div>
<p>This writes the source archive and its SHA-512 file under <code>dist/</code> without
invoking GPG or generating an <code>.asc</code> file. CI continues to use <code>build</code> without
<code>--skip-sign</code> to sign the staged archive. Local verification must not sign
artifacts, import the CI private key, or require Nexus deployment credentials.
Use only the public key to verify the signatures downloaded from staging.</p>
</li>
<li class="">
<p>Compare the complete locally rebuilt files with the staged files. The scope
includes the source <code>.tar.gz</code> and every CI-signed JVM artifact in both Nexus
repositories: binary, source, and documentation JARs, POMs, and any other
signed distributions. Do not check only representative modules. Each staged
artifact must have a corresponding local result; missing artifacts fail the
check.</p>
</li>
<li class="">
<p>Compute SHA-512 checksums for both copies and compare the bytes. For each
artifact, set these paths to its staged and locally rebuilt copies:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token builtin class-name">set</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-euo</span><span class="token plain"> pipefail</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>${staged_file</span><span class="token string variable operator" style=color:#393A34>:?</span><span class="token string variable" style=color:#36acaa>path to the downloaded artifact}</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token builtin class-name">:</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>${rebuilt_file</span><span class="token string variable operator" style=color:#393A34>:?</span><span class="token string variable" style=color:#36acaa>path to the independently rebuilt artifact}</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">sha512sum </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>$staged_file</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>$rebuilt_file</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"></span><span class="token function" style=color:#d73a49>cmp</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>$staged_file</span><span class="token string" style=color:#e3116c>"</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"</span><span class="token string variable" style=color:#36acaa>$rebuilt_file</span><span class="token string" style=color:#e3116c>"</span><br/></div></code></pre></div></div>
<p>The checksums must match and <code>cmp</code> must succeed. Compare archives as complete
files, including their metadata; matching extracted contents alone is not
sufficient. Verify detached <code>.asc</code> signatures separately rather than trying
to reproduce signature bytes.</p>
</li>
<li class="">
<p>Record the RC tag and commit, workflow and staging URLs, exact local build
commands, toolchain versions, and the staged/local SHA-512 values and result
for every artifact. Link this report in the vote email; voters can include
their own results in replies to the vote thread.</p>
</li>
</ol>
<p>Any mismatch, missing artifact, or inability to perform the independent rebuild
blocks the CI-signed candidate. Investigate and fix the build before staging a
new RC; do not ignore timestamps or other differing bytes, replace staged files
in place, or publish the candidate. A successful CI run, a valid signature, and
matching downloaded checksum files do not replace this independent comparison.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=fory-community-vote>Fory Community Vote<a href=#fory-community-vote class=hash-link aria-label="Direct link to Fory Community Vote" title="Direct link to Fory Community Vote" translate=no>​</a></h3>
<p>you need send a email to Fory Community: <a href=mailto:dev@fory.apache.org target=_blank rel="noopener noreferrer" class="">dev@fory.apache.org</a>:</p>
<p>Title:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">[VOTE] Release Apache Fory v${release_version}-${rc_version}</span><br/></div></code></pre></div></div>
<p>Content:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">Hello, Apache Fory Community:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">This is a call for vote to release Apache Fory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">v${release_version}-${rc_version}.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Apache Fory is a blazingly fast multi-language serialization framework</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">for idiomatic domain objects, schema IDL, and cross-language data</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">exchange.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The discussion thread:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://lists.apache.org/thread/xxr3od301g6v3ndj14zqc05byp9qvclh</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The change lists about this release:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/compare/v${previous_release_version}...v${release_version}-${rc_version}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The release candidates:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${release_candidate_url}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Independent rebuild and SHA-512 comparison report (for CI-signed candidates):</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${reproducibility_report_url}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The maven staging for this release:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://repository.apache.org/content/repositories/orgapachefory-${maven_artifact_number}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Git tag for the release:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/releases/tag/v${release_version}-${rc_version}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">If this release also publishes the Go module, include the Go submodule tag too:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/releases/tag/go/fory/v${release_version}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Git commit for the release:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/commit/${release_commit}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The artifacts signed with PGP key [${gpg_key_id}], corresponding to</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[${apache_email}], that can be found in keys file:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://downloads.apache.org/fory/KEYS</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The vote will be open for at least 72 hours until the necessary number of votes are reached.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Please vote accordingly:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] +1 approve</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] +0 no opinion</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] -1 disapprove with the reason</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">To learn more about Fory, please see https://fory.apache.org/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">*Valid check is a requirement for a vote. *Checklist for reference:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] Download Fory is valid.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] Checksums and PGP signatures are valid.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] Source code distributions have correct names matching the current release.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] LICENSE and NOTICE files are correct.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] All files have license headers if necessary.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] No compiled archives bundled in source archive.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] Can compile from source.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">[ ] For CI-signed artifacts, independently rebuilt every artifact on trusted hardware and confirmed byte-for-byte equality with the staged files.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">How to Build and Test, please refer to: https://github.com/apache/fory/blob/main/docs/development/index.md</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Thanks,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${name}</span><br/></div></code></pre></div></div>
<p>After at least 3 +1 binding votes from Apache Fory PMC members and no veto,
first, reply to the above voting thread to notify that the voting has ended.</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The vote for Release Apache Fory v${release_version}-${rc_version} is closed now.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Thanks to everyone for helping checking and voting for the release.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">I will close the vote later in another thread.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Best,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${name}</span><br/></div></code></pre></div></div>
<p>Immediately afterward, launch a new voting thread to claim the voting results.</p>
<p>Title:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">[RESULT][VOTE] Release Apache Fory v${release_version}-${rc_version}</span><br/></div></code></pre></div></div>
<p>Content:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">Hello, Apache Fory Community,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The vote to release Apache Fory v${release_version}-${rc_version} has passed.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The vote PASSED with 3 binding +1 votes and 0 -1 votes:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Binding votes:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- xxx</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- yyy</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- zzz</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Vote thread: ${vote_thread_url}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Thanks,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${name}</span><br/></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=what-if-vote-fails>What if vote fails<a href=#what-if-vote-fails class=hash-link aria-label="Direct link to What if vote fails" title="Direct link to What if vote fails" translate=no>​</a></h3>
<p>If the vote failed, click "Drop" to drop the staging Maven artifacts.</p>
<p>Address the raised issues, then bump <code>rc_version</code> and file a new vote again.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=official-release>Official Release<a href=#official-release class=hash-link aria-label="Direct link to Official Release" title="Direct link to Official Release" translate=no>​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=publish-artifacts-to-svn-release-directory>Publish artifacts to SVN Release Directory<a href=#publish-artifacts-to-svn-release-directory class=hash-link aria-label="Direct link to Publish artifacts to SVN Release Directory" title="Direct link to Publish artifacts to SVN Release Directory" translate=no>​</a></h3>
<p>This section applies to candidates staged manually in SVN. For an ATR-staged
candidate, complete publication through ATR only after the vote passes and the
independent reproducibility checks above succeed. Publish the verified candidate
files, not a fresh build.</p>
<ul>
<li class="">release_version: the release version for fory, like 1.0.0</li>
<li class="">release_candidate_version: the version for voting, like 1.0.0-rc1</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">svn </span><span class="token function" style=color:#d73a49>mv</span><span class="token plain"> https://dist.apache.org/repos/dist/dev/fory/</span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain">-</span><span class="token variable" style=color:#36acaa>${rc_version}</span><span class="token plain"> https://dist.apache.org/repos/dist/release/fory/</span><span class="token variable" style=color:#36acaa>${release_version}</span><span class="token plain"> </span><span class="token parameter variable" style=color:#36acaa>-m</span><span class="token plain"> </span><span class="token string" style=color:#e3116c>"Release fory </span><span class="token string variable" style=color:#36acaa>${release_version}</span><span class="token string" style=color:#e3116c>"</span><br/></div></code></pre></div></div>
<p>In the repository at <a href=https://dist.apache.org/repos/dist/dev/fory/ target=_blank rel="noopener noreferrer" class="">https://dist.apache.org/repos/dist/dev/fory/</a>, if any
outdated release_candidate_version are left behind when releasing the release_version,
please clear them to keep the dev repository tidy.</p>
<p>When <code>https://archive.apache.org/dist/fory/${release_version}/</code> is
accessible (confirming that the release_version has been successfully released
and archived), we may clean up the previous release version in the release repository,
leaving only the current version.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=update-foryfory-site-content>Update Fory&Fory-Site content<a href=#update-foryfory-site-content class=hash-link aria-label="Direct link to Update Fory&Fory-Site content" title="Direct link to Update Fory&Fory-Site content" translate=no>​</a></h3>
<p>Submit a PR to <a href=https://github.com/apache/fory-site target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory-site</a> to update Fory-site.
Reference implementation: <a href=https://github.com/apache/fory-site/pull/283 target=_blank rel="noopener noreferrer" class="">#283</a>
and <a href=https://github.com/apache/fory-site/pull/285 target=_blank rel="noopener noreferrer" class="">#285</a>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=update-fory-site>Update Fory-Site<a href=#update-fory-site class=hash-link aria-label="Direct link to Update Fory-Site" title="Direct link to Update Fory-Site" translate=no>​</a></h4>
<p>In general, the following key areas need to be modified:</p>
<ol>
<li class="">Write a new announcement, for example:
Add a new markdown file under the blog folder:</li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">The Apache Fory team is pleased to announce the [?] release. This is a major release that includes [? PR](https://github.com/apache/fory/compare/v[?]...v[?]) from ? distinct contributors. See [Getting Started](https://fory.apache.org/docs/start/) to choose a runtime and install the libraries for your platform.</span><br/></div></code></pre></div></div>
<ol start=2>
<li class="">Replace versions by upgrading old versions to new ones.
For example, update the <a href=https://fory.apache.org/docs/start/java target=_blank rel="noopener noreferrer" class="">Java setup</a> and its linked capability guides for both the development branch and the latest release branch:</li>
</ol>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">&lt;dependency></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> &lt;groupId>org.apache.fory&lt;/groupId></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> &lt;artifactId>fory-core&lt;/artifactId></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> &lt;version>0.11.2&lt;/version></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">&lt;/dependency></span><br/></div></code></pre></div></div>
<ol start=3>
<li class="">Update the download page, checksum and signature examples, release notes link, current docs, zh-CN translations, versioned docs snapshot, <code>versions.json</code>, and <code>docusaurus.config.ts</code> default docs version.</li>
</ol>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id=update-fory>Update Fory<a href=#update-fory class=hash-link aria-label="Direct link to Update Fory" title="Direct link to Update Fory" translate=no>​</a></h4>
<p>Submit a PR to <a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory</a> to update <a href=https://github.com/apache/fory/blob/main/README.md target=_blank rel="noopener noreferrer" class="">README</a>,
package metadata for the next development version, and user-facing install snippets that should point at the latest
released version.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=github-officially-released>GitHub officially released<a href=#github-officially-released class=hash-link aria-label="Direct link to GitHub officially released" title="Direct link to GitHub officially released" translate=no>​</a></h3>
<p>You need to officially release this version in the Fory project
Reference implementation: <a href=https://github.com/apache/fory/releases/tag/v$%7Brelease_version%7D target=_blank rel="noopener noreferrer" class="">https://github.com/apache/fory/releases/tag/v${release_version}</a></p>
<p>Create and push the final <code>v${release_version}</code> tag from the voted commit after the vote passes. This tag triggers the
final package publishing workflows for Python, compiler, JavaScript, Rust, Dart, and C#. Monitor every workflow to
completion before sending the announcement.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=release-maven-artifacts>Release Maven artifacts<a href=#release-maven-artifacts class=hash-link aria-label="Direct link to Release Maven artifacts" title="Direct link to Release Maven artifacts" translate=no>​</a></h3>
<ul>
<li class="">maven_artifact_number: the number for Maven staging artifacts, like 1001.</li>
<li class="">Open <a href=https://repository.apache.org/#stagingRepositories target=_blank rel="noopener noreferrer" class="">https://repository.apache.org/#stagingRepositories</a>.</li>
<li class="">Find the artifact <code>orgapachefory-${maven_artifact_number}</code>, click "Release".</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=send-the-announcement>Send the announcement<a href=#send-the-announcement class=hash-link aria-label="Direct link to Send the announcement" title="Direct link to Send the announcement" translate=no>​</a></h3>
<p>Send the release announcement to <a href=mailto:dev@fory.apache.org target=_blank rel="noopener noreferrer" class="">dev@fory.apache.org</a> and CC <a href=mailto:announce@apache.org target=_blank rel="noopener noreferrer" class="">announce@apache.org</a>.</p>
<p>Title:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">[ANNOUNCE] Apache Fory ${release_version} released</span><br/></div></code></pre></div></div>
<p>Content:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">Hi all,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The Apache Fory community is pleased to announce</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">that Apache Fory ${release_version} is now available.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Apache Fory is a blazingly fast multi-language serialization framework</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">for idiomatic domain objects, schema IDL, and cross-language data</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">exchange.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">This release includes ${pr_count} PRs from ${contributor_count} contributors.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Highlights in ${release_version} include:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- ...</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Release blog, with details and examples:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://fory.apache.org/blog/fory_${release_version_with_underscores}_release</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">The release notes are available here:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/releases/tag/v${release_version}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">For the complete list of changes:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">https://github.com/apache/fory/compare/v${previous_release_version}...v${release_version}</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Apache Fory website: https://fory.apache.org/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Download Links: https://fory.apache.org/download</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Fory Resources:</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- Fory github repo: https://github.com/apache/fory</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- Issue: https://github.com/apache/fory/issues</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">- Mailing list: dev@fory.apache.org</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">We are looking to grow our community and welcome new contributors. If</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">you are interested in contributing to Fory, please contact us on the</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">mailing list or on GitHub. We will be happy to help you get started.</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">------------------</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Best Regards,</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">${your_name}</span><br/></div></code></pre></div></div>
<p>Remember to use plain text instead of rich text format, or you may be rejected when CC <a href=mailto:announce@apache.org target=_blank rel="noopener noreferrer" class="">announce@apache.org</a></p>
<p>After completing the above steps, the Fory release process comes to an end.</div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href=https://github.com/apache/fory-site/tree/main/docs/community/how_to_release.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw 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"/></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href=/docs/next/community/how_to_join_community><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>How to join Apache Fory™</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/next/community/how_to_verify><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>How to verify</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#introduction class="table-of-contents__link toc-highlight">Introduction</a><li><a href=#first-time-as-a-release-manager class="table-of-contents__link toc-highlight">First-time as a release manager</a><ul><li><a href=#environmental-requirements class="table-of-contents__link toc-highlight">Environmental requirements</a><li><a href=#prepare-gpg-key class="table-of-contents__link toc-highlight">Prepare GPG Key</a><li><a href=#further-reading class="table-of-contents__link toc-highlight">Further reading</a></ul><li><a href=#start-discussion-about-the-release class="table-of-contents__link toc-highlight">Start discussion about the release</a><li><a href=#preparing-for-release class="table-of-contents__link toc-highlight">Preparing for release</a><ul><li><a href=#github-branch-and-tag class="table-of-contents__link toc-highlight">GitHub branch and tag</a><li><a href=#stage-a-release-candidate-in-ci class="table-of-contents__link toc-highlight">Stage a release candidate in CI</a><li><a href=#manual-staging-build-and-upload-artifacts-to-svn-distdev-repo class="table-of-contents__link toc-highlight">Manual staging: build and upload artifacts to SVN dist/dev repo</a><li><a href=#what-to-do-if-something-goes-wrong class="table-of-contents__link toc-highlight">What to do if something goes wrong</a></ul><li><a href=#voting class="table-of-contents__link toc-highlight">Voting</a><ul><li><a href=#check-version class="table-of-contents__link toc-highlight">check version</a><li><a href=#manual-staging-build-the-source-code-of-fory-and-release-it-to-nexus class="table-of-contents__link toc-highlight">Manual staging: build the source code of fory and release it to nexus</a><li><a href=#build-a-pre-release class="table-of-contents__link toc-highlight">Build a pre-release</a><li><a href=#verify-ci-artifacts-on-trusted-hardware class="table-of-contents__link toc-highlight">Verify CI artifacts on trusted hardware</a><li><a href=#fory-community-vote class="table-of-contents__link toc-highlight">Fory Community Vote</a><li><a href=#what-if-vote-fails class="table-of-contents__link toc-highlight">What if vote fails</a></ul><li><a href=#official-release class="table-of-contents__link toc-highlight">Official Release</a><ul><li><a href=#publish-artifacts-to-svn-release-directory class="table-of-contents__link toc-highlight">Publish artifacts to SVN Release Directory</a><li><a href=#update-foryfory-site-content class="table-of-contents__link toc-highlight">Update Fory&Fory-Site content</a><li><a href=#github-officially-released class="table-of-contents__link toc-highlight">GitHub officially released</a><li><a href=#release-maven-artifacts class="table-of-contents__link toc-highlight">Release Maven artifacts</a><li><a href=#send-the-announcement class="table-of-contents__link toc-highlight">Send the announcement</a></ul></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://lists.apache.org/list.html?dev@fory.apache.org target=_blank rel="noopener noreferrer" class=footer__link-item>Mailing list<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://join.slack.com/t/fory-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A target=_blank rel="noopener noreferrer" class=footer__link-item>Slack<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://twitter.com/ApacheFory target=_blank rel="noopener noreferrer" class=footer__link-item>Twitter<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Docs</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/start/>Install</a><li class=footer__item><a class=footer__link-item href=/docs/start/>Usage</a><li class=footer__item><a class=footer__link-item href=/docs/benchmarks/>Benchmark</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Repositories</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://github.com/apache/fory target=_blank rel="noopener noreferrer" class=footer__link-item>Apache Fory™<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/apache/fory-site target=_blank rel="noopener noreferrer" class=footer__link-item>Website<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div></div><div class="footer__bottom text--center"><div class=margin-bottom--sm><a href=https://apache.org/ rel="noopener noreferrer" class=footerLogoLink_BH7S><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--light_NVdE" width=200 /><img src=/img/asf_logo.svg alt="ASF Logo" class="footer__logo themedComponent_mlkZ themedComponent--dark_xIcU" width=200 /></a></div><div class=footer__copyright><div>
<p>
Copyright © 2026 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/>
Apache Fory, Fory, Apache, the Apache Logo and the Apache Fory logo are either registered trademarks or trademarks of the Apache Software Foundation in the United States and/or other countries.
</p>
</div></div></div></div></footer></div></body>