blob: c38fc87126816dff4ffa52693685936b15158d67 [file] [log] [blame]
<!doctype html><html lang=en class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=alternate hreflang=zh-cn href=https://cn.dubbo.apache.org/zh-cn/blog/2018/09/02/%E5%A6%82%E4%BD%95%E5%87%86%E5%A4%87apache-release/><link rel=canonical href=https://cn.dubbo.apache.org/en/blog/2018/09/02/how-to-prepare-an-apache-release/><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=Content-Security-Policy content="frame-src *"><meta name=generator content="Hugo 0.122.0"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>How to prepare an Apache Release | Apache Dubbo</title><meta property="og:title" content="How to prepare an Apache Release">
<meta property="og:description" content="This article introduces how to the Apache publish content and process
"><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/en/blog/2018/09/02/how-to-prepare-an-apache-release/"><meta property="article:section" content="blog"><meta property="article:published_time" content="2018-09-02T00:00:00+00:00"><meta property="article:modified_time" content="2022-08-07T00:02:07+08:00"><meta itemprop=name content="How to prepare an Apache Release"><meta itemprop=description content="This article introduces how to the Apache publish content and process
"><meta itemprop=datePublished content="2018-09-02T00:00:00+00:00"><meta itemprop=dateModified content="2022-08-07T00:02:07+08:00"><meta itemprop=wordCount content="2473"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="How to prepare an Apache Release"><meta name=twitter:description content="This article introduces how to the Apache publish content and process
"><script async src="https://www.googletagmanager.com/gtag/js?id=G-NM6FFMT51J"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css as=style><link href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="This article introduces how to the Apache publish content and process
"><meta property="og:description" content="This article introduces how to the Apache publish content and process
"><meta name=twitter:description content="This article introduces how to the Apache publish content and process
"><meta property="og:url" content="https://cn.dubbo.apache.org/en/blog/2018/09/02/how-to-prepare-an-apache-release/"><meta property="og:title" content="How to prepare an Apache Release"><meta name=twitter:title content="How to prepare an Apache Release"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/en/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/overview/><span>Overview</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/docs3-v2/><span>SDK Manual</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/en/blog/><span class=active>Blog</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/en/download/><span>Download</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>English</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/zh-cn/blog/2018/09/02/%E5%A6%82%E4%BD%95%E5%87%86%E5%A4%87apache-release/>中文</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"></div></li></ul></div></nav><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-enblog20180902how-to-prepare-an-apache-release").addClass("active"),$("#td-section-nav #m-enblog20180902how-to-prepare-an-apache-release-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-enblog20180902how-to-prepare-an-apache-release").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-enblog20180902how-to-prepare-an-apache-release-li").siblings("li").addClass("show"),$("#td-section-nav #m-enblog20180902how-to-prepare-an-apache-release-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblog-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblognews-li><input type=checkbox id=m-enblognews-check>
<label for=m-enblognews-check><a href=/en/blog/news/ title="Articles About Apache Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblognews><span>Articles</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20240131tracing-dubbo-with-opentelemetry-li><input type=checkbox id=m-enblog20240131tracing-dubbo-with-opentelemetry-check>
<label for=m-enblog20240131tracing-dubbo-with-opentelemetry-check><a href=/en/blog/2024/01/31/tracing-dubbo-with-opentelemetry/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20240131tracing-dubbo-with-opentelemetry><span>Tracing Dubbo With OpenTelemetry</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-li><input type=checkbox id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-check>
<label for=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea-check><a href=/en/blog/2023/10/23/introduction-to-apache-dubbo-plugin-for-intellij-idea/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20231023introduction-to-apache-dubbo-plugin-for-intellij-idea><span>Introduction to Apache Dubbo plugin for IntelliJ IDEA</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-li><input type=checkbox id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-check>
<label for=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released-check><a href=/en/blog/2023/04/15/advanced-cloud-native-dubbo-3.2-officially-released/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20230415advanced-cloud-native-dubbo-32-officially-released><span>Advanced cloud native - Dubbo 3.2 officially released</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-li><input type=checkbox id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-check>
<label for=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway-check><a href=/en/blog/2022/05/04/how-to-proxy-dubbo-service-in-apache-shenyu-gateway/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20220504how-to-proxy-dubbo-service-in-apache-shenyu-gateway><span>How to proxy Dubbo service in Apache ShenYu Gateway</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-li><input type=checkbox id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-check>
<label for=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix-check><a href=/en/blog/2022/01/18/makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20220118makes-it-more-convenient-for-you-to-proxy-dubbo-services-in-apache-apisix><span>Makes it More Convenient for You to Proxy Dubbo Services in Apache APISIX</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190826service-test-li><input type=checkbox id=m-enblog20190826service-test-check>
<label for=m-enblog20190826service-test-check><a href=/en/blog/2019/08/26/service-test/ title="Dubbo Admin service test" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190826service-test><span>Service test in dubbo admin</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-li><input type=checkbox id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-check>
<label for=m-enblog20190811tracing-dubbo-service-with-apache-skywalking-check><a href=/en/blog/2019/08/11/tracing-dubbo-service-with-apache-skywalking/ title="Tracing Dubbo service with Apache Skywalking" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190811tracing-dubbo-service-with-apache-skywalking><span>Use apache skywalking in dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-li><input type=checkbox id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-check>
<label for=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2-check><a href=/en/blog/2019/05/02/dubbo-extensible-mechanism-source-code-analysis-part-2/ title="Dubbo extensible mechanism source code analysis - part 2" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190502dubbo-extensible-mechanism-source-code-analysis-part-2><span>Dubbo extensible mechanism - part 2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-li><input type=checkbox id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-check>
<label for=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1-check><a href=/en/blog/2019/04/25/dubbo-extensible-mechanism-source-code-analysis-part-1/ title="Dubbo extensible mechanism source code analysis - part 1" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190425dubbo-extensible-mechanism-source-code-analysis-part-1><span>Dubbo extensible mechanism - part 1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-li><input type=checkbox id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-check>
<label for=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface-check><a href=/en/blog/2019/02/20/implementation-background-and-practice-of-dubbo-client-asynchronous-interface/ title="Implementation background and practice of Dubbo client asynchronous interface" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190220implementation-background-and-practice-of-dubbo-client-asynchronous-interface><span>Dubbo Async Client</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-li><input type=checkbox id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-check>
<label for=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface-check><a href=/en/blog/2019/02/20/implementation-background-and-practice-of-dubbo-server-asynchronous-interface/ title="Implementation background and practice of Dubbo server asynchronous interface" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190220implementation-background-and-practice-of-dubbo-server-asynchronous-interface><span>Dubbo Async Server</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-li><input type=checkbox id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-check>
<label for=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices-check><a href=/en/blog/2019/01/17/how-to-use-seata-to-ensure-consistency-between-dubbo-microservices/ title="How to use Seata to ensure consistency between Dubbo Microservices" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20190117how-to-use-seata-to-ensure-consistency-between-dubbo-microservices><span>Use Seata in Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-li><input type=checkbox id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-check>
<label for=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou-check><a href=/en/blog/2018/12/10/the-fifth-dubbo-meetup-has-been-held-in-hangzhou/ title="The fifth Dubbo meetup has been held in Hangzhou" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181210the-fifth-dubbo-meetup-has-been-held-in-hangzhou><span>The fifth Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-li><input type=checkbox id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-check>
<label for=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry-check><a href=/en/blog/2018/11/07/dubbo-integrates-with-nacos-to-become-a-registry/ title="Dubbo Integrates with Nacos to Become a Registry" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181107dubbo-integrates-with-nacos-to-become-a-registry><span>Use Dubbo with Nacos</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20181005introduction-to-the-dubbo-protocol-li><input type=checkbox id=m-enblog20181005introduction-to-the-dubbo-protocol-check>
<label for=m-enblog20181005introduction-to-the-dubbo-protocol-check><a href=/en/blog/2018/10/05/introduction-to-the-dubbo-protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20181005introduction-to-the-dubbo-protocol><span>Introduction to the Dubbo protocol</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180930integrate-dubbo-with-kubernetes-li><input type=checkbox id=m-enblog20180930integrate-dubbo-with-kubernetes-check>
<label for=m-enblog20180930integrate-dubbo-with-kubernetes-check><a href=/en/blog/2018/09/30/integrate-dubbo-with-kubernetes/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180930integrate-dubbo-with-kubernetes><span>Integrate Dubbo with Kubernetes</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180902how-to-prepare-an-apache-release-li><input type=checkbox id=m-enblog20180902how-to-prepare-an-apache-release-check>
<label for=m-enblog20180902how-to-prepare-an-apache-release-check><a href=/en/blog/2018/09/02/how-to-prepare-an-apache-release/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180902how-to-prepare-an-apache-release><span>How to prepare an Apache Release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-li><input type=checkbox id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-check>
<label for=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo-check><a href=/en/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/ title="How to implement a fully asynchronous calls chain based on Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180902how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo><span>New Async Call</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-li><input type=checkbox id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-check>
<label for=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu-check><a href=/en/blog/2018/08/26/the-fourth-dubbo-meetup-has-been-held-in-chengdu/ title="The fourth Dubbo meetup has been held in Chengdu" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180826the-fourth-dubbo-meetup-has-been-held-in-chengdu><span>The fourth Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-li><input type=checkbox id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-check>
<label for=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration-check><a href=/en/blog/2018/08/14/dubbo-basic-usage-dubbo-consumer-configuration/ title=" Dubbo Basic Usage - Dubbo Consumer Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-basic-usage-dubbo-consumer-configuration><span>Dubbo Consumer Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-li><input type=checkbox id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-check>
<label for=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke-check><a href=/en/blog/2018/08/14/dubbo-several-ways-about-synchronous/asynchronous-invoke/ title="Dubbo: Several ways about synchronous/asynchronous invoke" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-several-ways-about-synchronousasynchronous-invoke><span>Dubbo Invoke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-li><input type=checkbox id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-check>
<label for=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration-check><a href=/en/blog/2018/08/14/dubbo-basic-usage--dubbo-provider-configuration/ title="Dubbo Basic Usage -- Dubbo Provider Configuration" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814dubbo-basic-usage--dubbo-provider-configuration><span>Dubbo Provider Configuration</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814manipulating-services-dynamically-via-qos-li><input type=checkbox id=m-enblog20180814manipulating-services-dynamically-via-qos-check>
<label for=m-enblog20180814manipulating-services-dynamically-via-qos-check><a href=/en/blog/2018/08/14/manipulating-services-dynamically-via-qos/ title="Manipulating Services Dynamically via QoS" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814manipulating-services-dynamically-via-qos><span>Dubbo QoS Introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-li><input type=checkbox id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-check>
<label for=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop-check><a href=/en/blog/2018/08/14/source-code-analysis-of-spring-boot-dubbo-app-start-and-stop/ title="Source code analysis of spring-boot+Dubbo App start and stop" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814source-code-analysis-of-spring-boot-dubbo-app-start-and-stop><span>Dubbo start/stop in spring boot</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-li><input type=checkbox id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-check>
<label for=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js-check><a href=/en/blog/2018/08/14/implementation-of-cross-language-calls-by-dubbo2.js/ title="Implementation of cross-language calls by Dubbo2.js" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814implementation-of-cross-language-calls-by-dubbo2js><span>dubbo2.js introduction</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814generic-invoke-of-dubbo-li><input type=checkbox id=m-enblog20180814generic-invoke-of-dubbo-check>
<label for=m-enblog20180814generic-invoke-of-dubbo-check><a href=/en/blog/2018/08/14/generic-invoke-of-dubbo/ title="Generic invoke of Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814generic-invoke-of-dubbo><span>Generic invoke</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180814native-image-using-graalvm-li><input type=checkbox id=m-enblog20180814native-image-using-graalvm-check>
<label for=m-enblog20180814native-image-using-graalvm-check><a href=/en/blog/2018/08/14/native-image-using-graalvm/ title="Native Image using GraalVM" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180814native-image-using-graalvm><span>Native Image</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180810dubbos-load-balance-li><input type=checkbox id=m-enblog20180810dubbos-load-balance-check>
<label for=m-enblog20180810dubbos-load-balance-check><a href=/en/blog/2018/08/10/dubbos-load-balance/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180810dubbos-load-balance><span>Dubbo's Load Balance</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807use-annotations-in-dubbo-li><input type=checkbox id=m-enblog20180807use-annotations-in-dubbo-check>
<label for=m-enblog20180807use-annotations-in-dubbo-check><a href=/en/blog/2018/08/07/use-annotations-in-dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807use-annotations-in-dubbo><span>Use Annotations In Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807using-zookeeper-in-dubbo-li><input type=checkbox id=m-enblog20180807using-zookeeper-in-dubbo-check>
<label for=m-enblog20180807using-zookeeper-in-dubbo-check><a href=/en/blog/2018/08/07/using-zookeeper-in-dubbo/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807using-zookeeper-in-dubbo><span>Using Zookeeper in Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180807dubbo-101-li><input type=checkbox id=m-enblog20180807dubbo-101-check>
<label for=m-enblog20180807dubbo-101-check><a href=/en/blog/2018/08/07/dubbo-101/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180807dubbo-101><span>Your First Dubbo Demo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-li><input type=checkbox id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-check>
<label for=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen-check><a href=/en/blog/2018/07/30/the-third-dubbo-meetup-has-been-held-in-shenzhen/ title="The third Dubbo meetup has been held in Shenzhen" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180730the-third-dubbo-meetup-has-been-held-in-shenzhen><span>The third Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-li><input type=checkbox id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-check>
<label for=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services-check><a href=/en/blog/2018/07/27/sentinel-the-flow-sentinel-of-dubbo-services/ title="Sentinel: The flow sentinel of Dubbo services" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180727sentinel-the-flow-sentinel-of-dubbo-services><span>Introduce sentinel</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180712tracking-with-pinpoint-li><input type=checkbox id=m-enblog20180712tracking-with-pinpoint-check>
<label for=m-enblog20180712tracking-with-pinpoint-check><a href=/en/blog/2018/07/12/tracking-with-pinpoint/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180712tracking-with-pinpoint><span>Tracking with Pinpoint</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180701your-first-dubbo-filter-li><input type=checkbox id=m-enblog20180701your-first-dubbo-filter-check>
<label for=m-enblog20180701your-first-dubbo-filter-check><a href=/en/blog/2018/07/01/your-first-dubbo-filter/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180701your-first-dubbo-filter><span>Your First Dubbo Filter</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-li><input type=checkbox id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-check>
<label for=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully-check><a href=/en/blog/2018/06/23/the-second-dubbo-shanghai-meetup-has-been-held-successfully/ title="The second Dubbo Shanghai meetup has been held successfully" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180623the-second-dubbo-shanghai-meetup-has-been-held-successfully><span>The second Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-li><input type=checkbox id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-check>
<label for=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing-check><a href=/en/blog/2018/05/12/the-first-dubbo-meetup-has-been-held-in-beijing/ title="The first Dubbo meetup has been held in Beijing" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180512the-first-dubbo-meetup-has-been-held-in-beijing><span>The first Dubbo meetup</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180502the-apachecon-na-schedule-has-been-announced-li><input type=checkbox id=m-enblog20180502the-apachecon-na-schedule-has-been-announced-check>
<label for=m-enblog20180502the-apachecon-na-schedule-has-been-announced-check><a href=/en/blog/2018/05/02/the-apachecon-na-schedule-has-been-announced/ title="The ApacheCon NA schedule has been announced" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180502the-apachecon-na-schedule-has-been-announced><span>ApacheCon NA</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180425the-gsocgoogle-summer-of-code-2018-li><input type=checkbox id=m-enblog20180425the-gsocgoogle-summer-of-code-2018-check>
<label for=m-enblog20180425the-gsocgoogle-summer-of-code-2018-check><a href=/en/blog/2018/04/25/the-gsocgoogle-summer-of-code-2018/ title="The GSoC(Google Summer of Code) 2018" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180425the-gsocgoogle-summer-of-code-2018><span>GSoC 2018</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-li><input type=checkbox id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-check>
<label for=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018-check><a href=/en/blog/2018/04/22/dubbo-roadmap-is-announced-in-qcon-beijing-2018/ title="Dubbo roadmap is announced in QCon Beijing 2018" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20180422dubbo-roadmap-is-announced-in-qcon-beijing-2018><span>QCon Beijing 2018</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblogproposals-li><input type=checkbox id=m-enblogproposals-check>
<label for=m-enblogproposals-check><a href=/en/blog/proposals/ title="Proposals About Apache Dubbo" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblogproposals><span>Proposals</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog10101application-level-service-discovery-li><input type=checkbox id=m-enblog10101application-level-service-discovery-check>
<label for=m-enblog10101application-level-service-discovery-check><a href=/en/blog/1/01/01/application-level-service-discovery/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog10101application-level-service-discovery><span>Application-Level Service Discovery</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog10101enhanced-http-standard-capabilities-of-triple-protocol-li><input type=checkbox id=m-enblog10101enhanced-http-standard-capabilities-of-triple-protocol-check>
<label for=m-enblog10101enhanced-http-standard-capabilities-of-triple-protocol-check><a href=/en/blog/1/01/01/enhanced-http-standard-capabilities-of-triple-protocol/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog10101enhanced-http-standard-capabilities-of-triple-protocol><span>Enhanced HTTP Standard Capabilities of Triple Protocol</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-enblogreleases-li><input type=checkbox id=m-enblogreleases-check>
<label for=m-enblogreleases-check><a href=/en/blog/releases/ title="New Releases" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-enblogreleases><span>Releases</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog202109202714-release-note-li><input type=checkbox id=m-enblog202109202714-release-note-check>
<label for=m-enblog202109202714-release-note-check><a href=/en/blog/2021/09/20/2.7.14-release-note/ title="2.7.14 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog202109202714-release-note><span>2.7.14</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog202108233021-release-note-li><input type=checkbox id=m-enblog202108233021-release-note-check>
<label for=m-enblog202108233021-release-note-check><a href=/en/blog/2021/08/23/3.0.2.1-release-note/ title="3.0.2.1 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog202108233021-release-note><span>3.0.2.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20210818302-release-note-li><input type=checkbox id=m-enblog20210818302-release-note-check>
<label for=m-enblog20210818302-release-note-check><a href=/en/blog/2021/08/18/3.0.2-release-note/ title="3.0.2 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20210818302-release-note><span>3.0.2</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20210702301-release-note-li><input type=checkbox id=m-enblog20210702301-release-note-check>
<label for=m-enblog20210702301-release-note-check><a href=/en/blog/2021/07/02/3.0.1-release-note/ title="3.0.1 Release Note" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20210702301-release-note><span>3.0.1</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-enblog20200518past-releases-li><input type=checkbox id=m-enblog20200518past-releases-check>
<label for=m-enblog20200518past-releases-check><a href=/en/blog/2020/05/18/past-releases/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-enblog20200518past-releases><span>Past Releases</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/blog/>Blog</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/en/blog/news/>Articles</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/en/blog/2018/09/02/how-to-prepare-an-apache-release/ aria-disabled=true class="btn-link disabled">How to prepare an Apache Release</a></li></ol></nav><section id=deprecation-warning><div class="content deprecation-warning pageinfo outdated-blog"><p>This article is more than one year old. Older articles may contain outdated content. Check that the information in the page has not become incorrect since its publication.</p></div></section><div class=td-content><h1>How to prepare an Apache Release</h1><div class=lead>This article introduces how to the Apache publish content and process</div><div class="td-byline mb-4"><time datetime=2018-09-02 class=text-muted>Sunday, September 02, 2018</time></div><header class=article-meta></header><h2 id=understanding-the-apache-release-cycle>Understanding the Apache Release Cycle</h2><p>In general, Source Release is the key and the required content of Apache. But Binary Release is optional, Dubbo can choose whether to release binary packages to the Apache repository or to the Maven central repository.</p><p>Please refer to the following links for more information on ASF&rsquo;s release guide:</p><ul><li><a href=http://www.apache.org/dev/release-publishing>Apache Release Guide</a></li><li><a href=http://www.apache.org/dev/release.html>Apache Release Policy</a></li><li><a href=http://www.apache.org/dev/publishing-maven-artifacts.html>Maven Release Info</a></li></ul><h2 id=preparation-of-local-building-environment>Preparation of Local Building Environment</h2><p>Mainly including the related preparation of signature utilities and Maven repository certification</p><ol><li><p>Install GPG,refer to <a href=https://www.gnupg.org/download/index.html>https://www.gnupg.org/download/index.html</a></p><ul><li>For example, in Mac OS</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>$ brew install gpg
</span></span><span style=display:flex><span>$ gpg --version <span style=color:#586e75>#check version,should be 2.x</span>
</span></span></code></pre></div></li><li><p>Generate the key with GPG</p><ul><li>Generate the key according to the prompt</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ gpg2 --full-gen-key
</span></span><span style=display:flex><span>gpg <span style=color:#719e07>(</span>GnuPG<span style=color:#719e07>)</span> 2.0.12; Copyright <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span> <span style=color:#2aa198>2009</span> Free Software Foundation, Inc.
</span></span><span style=display:flex><span>This is free software: you are free to change and redistribute it.
</span></span><span style=display:flex><span>There is NO WARRANTY, to the extent permitted by law.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please <span style=color:#719e07>select</span> what kind of key you want:
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>1<span style=color:#719e07>)</span> RSA and RSA <span style=color:#719e07>(</span>default<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>2<span style=color:#719e07>)</span> DSA and Elgamal
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>3<span style=color:#719e07>)</span> DSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> <span style=color:#719e07>(</span>4<span style=color:#719e07>)</span> RSA <span style=color:#719e07>(</span>sign only<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span>Your selection? <span style=color:#2aa198>1</span>
</span></span><span style=display:flex><span>RSA keys may be between <span style=color:#2aa198>1024</span> and <span style=color:#2aa198>4096</span> bits long.
</span></span><span style=display:flex><span>What keysize <span style=color:#719e07>do</span> you want? <span style=color:#719e07>(</span>2048<span style=color:#719e07>)</span> <span style=color:#2aa198>4096</span>
</span></span><span style=display:flex><span>Requested keysize is <span style=color:#2aa198>4096</span> bits
</span></span><span style=display:flex><span>Please specify how long the key should be valid.
</span></span><span style=display:flex><span> <span style=color:#268bd2>0</span> <span style=color:#719e07>=</span> key does not expire
</span></span><span style=display:flex><span> &lt;n&gt; <span style=color:#719e07>=</span> key expires in n days
</span></span><span style=display:flex><span> &lt;n&gt;w <span style=color:#719e07>=</span> key expires in n weeks
</span></span><span style=display:flex><span> &lt;n&gt;m <span style=color:#719e07>=</span> key expires in n months
</span></span><span style=display:flex><span> &lt;n&gt;y <span style=color:#719e07>=</span> key expires in n years
</span></span><span style=display:flex><span>Key is valid <span style=color:#719e07>for</span>? <span style=color:#719e07>(</span>0<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span>Key does not expire at all
</span></span><span style=display:flex><span>Is this correct? <span style=color:#719e07>(</span>y/N<span style=color:#719e07>)</span> y
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>GnuPG needs to construct a user ID to identify your key.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Real name: Robert Burrell Donkin
</span></span><span style=display:flex><span>Email address: rdonkin@apache.org
</span></span><span style=display:flex><span>Comment: CODE SIGNING KEY
</span></span><span style=display:flex><span>You selected this USER-ID:
</span></span><span style=display:flex><span> <span style=color:#2aa198>&#34;Robert Burrell Donkin (CODE SIGNING KEY) &lt;rdonkin@apache.org&gt;&#34;</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Change <span style=color:#719e07>(</span>N<span style=color:#719e07>)</span>ame, <span style=color:#719e07>(</span>C<span style=color:#719e07>)</span>omment, <span style=color:#719e07>(</span>E<span style=color:#719e07>)</span>mail or <span style=color:#719e07>(</span>O<span style=color:#719e07>)</span>kay/<span style=color:#719e07>(</span>Q<span style=color:#719e07>)</span>uit? O
</span></span><span style=display:flex><span>You need a Passphrase to protect your secret key. <span style=color:#586e75># enter the password, which will be used frequently when packaging.</span>
</span></span></code></pre></div><ul><li>View key id</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>$ gpg --list-keys
</span></span><span style=display:flex><span>pub rsa4096/28681CB1 2018-04-26 <span style=color:#586e75># 28681CB1 is the key id</span>
</span></span><span style=display:flex><span>uid <span style=color:#719e07>[</span>ultimate<span style=color:#719e07>]</span> liujun <span style=color:#719e07>(</span>apache-dubbo<span style=color:#719e07>)</span> &lt;liujun@apache.org&gt;
</span></span><span style=display:flex><span>sub rsa4096/D3D6984B 2018-04-26
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75>########### Note: Different diaplay for different version.</span>
</span></span><span style=display:flex><span>$ gpg --list-keys
</span></span><span style=display:flex><span>pub rsa4096 2018-11-12 <span style=color:#719e07>[</span>SC<span style=color:#719e07>]</span>
</span></span><span style=display:flex><span> 63AAE9838F4A303E40BAF5FEA3A1CA7A5D4A3981 <span style=color:#586e75># Last 8 character(5D4A3981) as key id,it will be used when send public key to keyserver</span>
</span></span><span style=display:flex><span>uid <span style=color:#719e07>[</span> 绝对 <span style=color:#719e07>]</span> Victory Cao <span style=color:#719e07>(</span>CODE SIGNING KEY<span style=color:#719e07>)</span> &lt;victory@apache.org&gt;
</span></span><span style=display:flex><span>sub rsa4096 2018-11-12 <span style=color:#719e07>[</span>E<span style=color:#719e07>]</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#586e75># send public key to keyserver via key id </span>
</span></span><span style=display:flex><span>$ gpg --keyserver pgpkeys.mit.edu --send-key 28681CB1
</span></span><span style=display:flex><span><span style=color:#586e75># Here pgpkeys.mit.edu is a random selection of keyserver. Any key server from the list https://sks-keyservers.net/status/ is acceptable because they are automatically synchronized.</span>
</span></span></code></pre></div><ul><li>If there are multiple public keys,you can set the default key</li></ul><p>~/.gnupg/gpg.conf</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span># If you have more than 1 secret key in your keyring, you may want to
</span></span><span style=display:flex><span># uncomment the following option and set your preferred keyid.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>default-key 28681CB1
</span></span></code></pre></div><ul><li>If there are multiple public keys, you can also delete unuseful key:</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span><span style=color:#586e75>### Delete the private key first, then delete the public key.</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>$ gpg --yes --delete-secret-keys shenglicao2@gmail.com <span style=color:#586e75>### indicate email address </span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>$ gpg --delete-keys 1808C6444C781C0AEA0AAD4C4D6A8007D20DB8A4
</span></span></code></pre></div></li><li><p>Set up Apache central repository.</p><ul><li>The parent pom of Dubbo project is apache pom</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;parent&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;groupId&gt;</span>org.apache<span style=color:#268bd2>&lt;/groupId&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;artifactId&gt;</span>apache<span style=color:#268bd2>&lt;/artifactId&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;version&gt;</span>19<span style=color:#268bd2>&lt;/version&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/parent&gt;</span>
</span></span></code></pre></div><ul><li><p>Add the following contents to .m2/settings.xml</p><p>Enter the passwords after
encrypting by <a href=http://maven.apache.org/guides/mini/guide-encryption.html>maven-encryption-plugin</a></p></li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-xml data-lang=xml><span style=display:flex><span><span style=color:#268bd2>&lt;settings&gt;</span>
</span></span><span style=display:flex><span>...
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;servers&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- To publish a snapshot of some part of Maven --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>apache.snapshots.https<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;username&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style=color:#268bd2>&lt;/username&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;password&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style=color:#268bd2>&lt;/password&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- To stage a release of some part of Maven --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>apache.releases.https<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;username&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP USERNAME --&gt;</span> <span style=color:#268bd2>&lt;/username&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;password&gt;</span> <span style=color:#586e75>&lt;!-- YOUR APACHE LDAP PASSWORD (encrypted) --&gt;</span> <span style=color:#268bd2>&lt;/password&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> ...
</span></span><span style=display:flex><span> <span style=color:#586e75>&lt;!-- gpg passphrase used when generate key --&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;id&gt;</span>gpg.passphrase<span style=color:#268bd2>&lt;/id&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;passphrase&gt;</span><span style=color:#586e75>&lt;!-- yourKeyPassword --&gt;</span><span style=color:#268bd2>&lt;/passphrase&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/server&gt;</span>
</span></span><span style=display:flex><span> <span style=color:#268bd2>&lt;/servers&gt;</span>
</span></span><span style=display:flex><span><span style=color:#268bd2>&lt;/settings&gt;</span>
</span></span></code></pre></div></li></ol><h2 id=pack--upload>Pack & Upload</h2><ol><li><p>Pull the new branch from the master branch as the release branch. If you want to release the ${release_version} version now, pull the new branch ${release_version}-release from 2.6.x. Then the
modifications and taggings related to ${release_version} Release Candidates are applied to ${release_version}-release branch, and is merged into the master branch after the final release.</p></li><li><p>First of all, verify that the maven component packing, source packing, signature, etc are working properly on the ${release_version}-release branch.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ mvn clean install -Papache-release
</span></span><span style=display:flex><span>$ mvn deploy
</span></span></code></pre></div></li></ol><p>This push the snapshot package to the maven central repository.</p><ol start=3><li><p>Release with maven-release-plugin</p><ul><li>verify with dryRun</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ mvn release:prepare -Prelease -Darguments<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;-Dmaven.test.skip=true&#34;</span> -DautoVersionSubmodules<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dusername<span style=color:#719e07>=</span>YOUR GITHUB ID -DdryRun<span style=color:#719e07>=</span><span style=color:#b58900>true</span>
</span></span></code></pre></div><ul><li>After verification, run release:prepare</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ mvn release:clean
</span></span><span style=display:flex><span>$ mvn release:prepare -Prelease -Darguments<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;-Dmaven.test.skip=true&#34;</span> -DautoVersionSubmodules<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dusername<span style=color:#719e07>=</span>YOUR GITHUB ID -DpushChanges<span style=color:#719e07>=</span><span style=color:#b58900>false</span>
</span></span></code></pre></div><blockquote><p>If you are promted to input password for pushing to GitHub (basically including adding new commits and tags), do not input your login password of GitHub. Use <code>Personal access tokens</code> instead. You can go to <a href=https://github.com/settings/profile>https://github.com/settings/profile</a>, click <code>Developer settings</code> -> <code>Personal access tokens</code>, and generate a new token if not. Please refer to this <a href=https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token>guide</a> for more infomation.
you need to choose the release artifactId, next artifactId and the release tag, the default tag is dubbo-parent-xxxx, you need to change it to dubbo-xxxx</p></blockquote><p>After executing the above commands, you will find that:</p><ol><li>source-release.zip and bin-release.zip are generated under dubbo-distribution directory, please unzip it and check the file structure</li><li><code>-DpushChanges=false</code> tells maven not to push the commits and tags to the remote repostiroy. If not specified, the version tag will be pushed to github repository, you will see a commit called <code>[maven-release-plugin] prepare release dubbo-x.x.x</code> added.</li><li>The branch version is upgraded to ${release_version+1}-SNAPSHOT automatically. If <code>-DpushChanges=true</code> is specified, the modifications will be pushed to the remote repository, you will see a commit called <code>[maven-release-plugin] prepare for next development iteration</code> added.</li></ol><p>If <code>-DpushChanges=false</code> is specified, you will have to manually push the commit to remote repository before go to next step.</p><ul><li>Run release:perform</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ mvn release:perform -Prelease -Darguments<span style=color:#719e07>=</span><span style=color:#2aa198>&#34;-Dmaven.test.skip=true&#34;</span> -DautoVersionSubmodules<span style=color:#719e07>=</span><span style=color:#b58900>true</span> -Dusername<span style=color:#719e07>=</span>YOUR GITHUB ID
</span></span></code></pre></div><p>Maven will download the source code from the tag you just pushed, compile it, and deploy to remote maven repsoitry in staging state.</p></li></ol><h3 id=note>Note</h3><blockquote><p>When you deploy the package into repository, it will be interrupted for network. So you must restart to desploy.<br>The problem is that missing package occurred many times at deploying. So you should check the quantity of package, especially parent package.</p></blockquote><h2 id=prepare-apache-release>Prepare Apache Release</h2><ol><li><p>Prepare the svn local environment (Apache hosting the release content of project by svn)</p></li><li><p>Checkout dubbo to local directory</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ svn checkout https://dist.apache.org/repos/dist/dev/dubbo
</span></span></code></pre></div><p>Assume that the local directory is <code>~/apache/incubator/dubbo</code></p></li><li><p>The current release version is ${release_version}, new directory</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ <span style=color:#b58900>cd</span> ~/apache/incubator/dubbo <span style=color:#586e75># dubbo svn root directory</span>
</span></span><span style=display:flex><span>$ mkdir <span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>
</span></span></code></pre></div></li><li><p>Add public key to <a href=https://dist.apache.org/repos/dist/dev/dubbo/KEYS>KEYS</a> file if you are the first time to be a release manager. KEYS is mainly used to allow people who participate in the voting to be imported locally to verify the correctness of the sign.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ gpg -a --export your_key_id &gt;&gt; KEYS
</span></span></code></pre></div><p>For more information on how to get your key id, please refer to this <a href=https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key>guide</a></p></li><li><p>Copy the source.zip package from the Dubbo root directory to the svn local repository dubbo/${release_version}</p></li><li><p>Generate sha512 sign</p><p>For source-release.zip</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ shasum -a <span style=color:#2aa198>512</span> apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-source-release.zip &gt;&gt; apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-source-release.zip.sha512
</span></span></code></pre></div><p>For bin-release.zip</p><p>Please add <code>-b</code> paramter when generating sha512 for bin-release.zip, which indicates it is a binary file.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ shasum -b -a <span style=color:#2aa198>512</span> apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin-release.zip &gt;&gt; apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin-release.zip.sha512
</span></span></code></pre></div><p>You should generate something like this:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-fallback data-lang=fallback><span style=display:flex><span>b8f13d1df6d6c9a1facc72fafc00b2d22bea1e600517c507467d8fca2f776a7a3877101742da53114bfa629ca5b941eb4d9ef989de43f0833e2a794e7ccf5c8a *apache-dubbo-spring-boot-project-2.7.0-bin-release.zip
</span></span></code></pre></div><p>Note there is a <code>*</code> sign before the file name.</p></li><li><p>If the binary release is accompanied with the source release. Run the following command in the dubbo-distribution module:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ mvn install
</span></span></code></pre></div><p>Go to target directory, copy bin-release.zip and bin-release.zip.asc to svn local repository dubbo/${release_version}, and refer to step 6 to generate sha512 sign.</p></li><li><p>Commit to Apache svn</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>$ svn status
</span></span><span style=display:flex><span>$ svn commit -m <span style=color:#2aa198>&#39;prepare for ${release_version} RC1&#39;</span>
</span></span></code></pre></div></li></ol><h2 id=verify-release-candidates>Verify Release Candidates</h2><p><strong>A full check list can be found <a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist>here</a></strong></p><p>The verification link includes but is not limited to the following contents and forms:</p><h3 id=check-signatures-and-hashes-are-good>Check signatures and hashes are good</h3><h4 id=check-the-sha512-sum>check the sha512 sum</h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>$ shasum -c apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-source-release.zip.sha512
</span></span><span style=display:flex><span>$ shasum -c apache-dubbo-<span style=color:#2aa198>${</span><span style=color:#268bd2>release_version</span><span style=color:#2aa198>}</span>-bin-release.zip.sha512
</span></span></code></pre></div><h4 id=check-the-gpg-signarure>check the gpg signarure</h4><p>If it&rsquo;s your first time verify a release candidte, you should import public keys first.</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span> $ curl https://dist.apache.org/repos/dist/dev/dubbo/KEYS &gt;&gt; KEYS <span style=color:#586e75># download public keys to local directory</span>
</span></span><span style=display:flex><span> $ gpg --import KEYS <span style=color:#586e75># import keys</span>
</span></span><span style=display:flex><span> $ gpg —edit-key liujun
</span></span><span style=display:flex><span> &gt; trust <span style=color:#586e75># type trust command</span>
</span></span></code></pre></div><p>Now, you can verify signature with command</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>gpg --verify apache-dubbo-2.6.3-source-release.zip.asc apache-dubbo-2.6.3-source-release.zip
</span></span><span style=display:flex><span>gpg --verify apache-dubbo-2.6.3-bin-release.zip.asc apache-dubbo-2.6.3-bin-release.zip
</span></span></code></pre></div><h3 id=check-source-release-file-content>Check source release file content</h3><p>Unzip apache-dubbo-${release_version}-source-release.zip to the default directory and check the following:</p><ul><li>Directory with &lsquo;incubating&rsquo; in name
<code>apache-dubbo-${release_version}-source-release</code></li><li>DISCLAIMER exists</li><li>LICENSE and NOTICE exists and contents are good</li><li>All files and no binary files exist</li><li>All files has standard ASF License header</li><li>Can compile from source</li><li>All unit tests can pass<div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-sh data-lang=sh><span style=display:flex><span>mvn clean <span style=color:#b58900>test</span> <span style=color:#586e75># This will run all unit tests</span>
</span></span><span style=display:flex><span><span style=color:#586e75># you can also open rat and style plugin to check if every file meets requirements.</span>
</span></span><span style=display:flex><span>mvn clean <span style=color:#b58900>test</span> -Drat.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span> -Dcheckstyle.skip<span style=color:#719e07>=</span><span style=color:#b58900>false</span>
</span></span></code></pre></div></li><li>Release candidates match with corresponding tags, you can find tag link and hash in vote email.<ul><li>check the version number in pom.xml are the same</li><li>check there are no extra files or directories in the source package, for example, no empty directories or useless log files.<br><code>diff -r rc_dir tag_dir</code></li><li>check the top n tag commits, dive into the related files and check if the source package has the same changes</li></ul></li></ul><h3 id=check-binary-distribution-file-content>Check binary distribution file content</h3><p>Unzip apache-dubbo-${release_version}-bin-release.zip and check:</p><ul><li>Check signatures are good</li><li>&lsquo;incubating&rsquo; in name</li><li>LICENSE and NOTICE exists and contents are good</li></ul><p>Note that if the binary distribution contains third party files, you may need to update LICENSE file by adding the 3rd party license files. If these dependency is Apache License 2.0, and it contains NOTICE file, you may also need to update NOTICE file as well.</p><h2 id=release-vote>Release vote</h2><p>The voting is divided into two phases:</p><ol><li>Dubbo community votes and sends the voting email to <a href=mailto:dev@dubbo.apache.org>dev@dubbo.apache.org</a>. After reviewing by community developers and winning 3 binding tickets that agree to release, you can go to the next stage of voting.</li><li>Apache community votes and sends the voting email to <a href=mailto:general@incubator.apache.org>general@incubator.apache.org</a>. After reviewing by Apache IPMC(Incubator PMC) members and winning 3 binding votes that agree to release, you will be allowed to release officially.</li></ol><p>The mail template for Apache Dubbo vote:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-tex data-lang=tex><span style=display:flex><span>Hello Dubbo Community,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>This is a call for vote to release Apache Dubbo (Incubating) version 2.6.2.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The release candidates:
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/2.6.2/
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Git tag for the release:
</span></span><span style=display:flex><span>https://github.com/apache/dubbo/tree/dubbo-2.6.2
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hash for the release tag:
</span></span><span style=display:flex><span>afab04c53edab38d52275d2a198ea1aff7a4f41e
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Release Notes:
</span></span><span style=display:flex><span>https://github.com/apache/dubbo/releases/tag/untagged-4775c0a22c60fca55118
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The artifacts have been signed with Key : 28681CB1, which can be found in the keys file:
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/KEYS
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The vote will be open for at least 72 hours or until necessary number of votes are reached.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please vote accordingly:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[ ] +1 approve
</span></span><span style=display:flex><span>[ ] +0 no opinion
</span></span><span style=display:flex><span>[ ] -1 disapprove with the reason
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks,
</span></span><span style=display:flex><span>The Apache Dubbo (Incubating) Team
</span></span></code></pre></div><p>The mail template for Apache Incubator vote:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>Hello all,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>This is a call for vote to release Apache Dubbo (Incubating) version 2.6.4.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The Apache Dubbo community has voted on and approved a proposal to release
</span></span><span style=display:flex><span>Apache Dubbo (Incubating) version 2.6.4.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>We now kindly request the Incubator PMC members review and vote on this
</span></span><span style=display:flex><span>incubator release.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Apache Dubbo™ is a high-performance, java based, open source
</span></span><span style=display:flex><span>RPC framework. Dubbo offers three key functionalities, which include
</span></span><span style=display:flex><span>interface based remote call, fault tolerance &amp; load balancing, and
</span></span><span style=display:flex><span>automatic service registration &amp; discovery.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Dubbo community vote and result thread:
</span></span><span style=display:flex><span>https://lists.apache.org/thread.html/8d5c39eece6288beed2e22ca976350728c571d2a9cef1c9a9e56a409@%3Cdev.dubbo.apache.org%3E
</span></span><span style=display:flex><span>A minor issue also can be found in the above thread.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The release candidates (RC1):
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/2.6.4
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Git tag for the release (RC1):
</span></span><span style=display:flex><span>https://github.com/apache/dubbo/tree/dubbo-2.6.4
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Hash for the release tag:
</span></span><span style=display:flex><span>88037747a3b69d3225c73f6fbcda36ebd8435887
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Release Notes:
</span></span><span style=display:flex><span>*https://github.com/apache/dubbo/blob/dubbo-2.6.4/CHANGES.md
</span></span><span style=display:flex><span>&lt;https://github.com/apache/dubbo/blob/dubbo-2.6.4/CHANGES.md&gt;*
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The artifacts have been signed with Key : 7955FB6D1DD21CF7, which can be
</span></span><span style=display:flex><span>found in the keys file:
</span></span><span style=display:flex><span>https://dist.apache.org/repos/dist/dev/dubbo/KEYS
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Look at here for how to verify this release candidate:
</span></span><span style=display:flex><span>https://github.com/apache/dubbo-website/blob/asf-site/blog/en-us/prepare-an-apache-release.md#prepare-apache-release
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The vote will be open for at least 72 hours or until necessary number of
</span></span><span style=display:flex><span>votes are reached.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Please vote accordingly:
</span></span><span style=display:flex><span>[ ] +1 approve
</span></span><span style=display:flex><span>[ ] +0 no opinion
</span></span><span style=display:flex><span>[ ] -1 disapprove with the reason
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Thanks,
</span></span><span style=display:flex><span>The Apache Dubbo (Incubating) Team
</span></span></code></pre></div><p>The mail template to announce the vote result:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>We’ve received 3 +1 binding votes and one +1 non-binding vote:
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>+1 binding, Ian Luo
</span></span><span style=display:flex><span>+1 binding, Huxing Zhang
</span></span><span style=display:flex><span>+1 binding, Jun Liu
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>+1 non-binding, Jerrick
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>I will create a new vote thread in Apache community now.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Best regards,
</span></span><span style=display:flex><span>The Apache Dubbo (Incubating) Team
</span></span></code></pre></div><h2 id=official-release>Official Release</h2><p>When the release vote has passed,</p><ol><li>Add the release files to <a href=https://dist.apache.org/repos/dist/release/dubbo>official release directory</a></li><li>Remove the release files in <a href=https://dist.apache.org/repos/dist/dev/dubbo>dev directory</a></li><li>Remove the the release file for the previous release under <a href=https://dist.apache.org/repos/dist/release/dubbo/>official release directory</a>, which will be archived and can be found <a href=https://archive.apache.org/dist/incubator/dubbo/>here</a></li><li>Publish <a href=https://github.com/apache/dubbo/releases>release notes</a> on Github.</li><li>Update the recommend dependency on <a href=https://github.com/apache/dubbo#maven-dependency>Github</a> to the latest version, also update the version in other place if necessary.</li><li>Add the download link to official website <a href=https://dubbo.apache.org/en/blog/2020/05/18/past-releases/>https://dubbo.apache.org/en/blog/2020/05/18/past-releases/</a>, using the ASF mirror system. The latest release download link should be something like <code>https://www.apache.org/dyn/closer.cgi?path=incubator/dubbo/$VERSION/apache-dubbo-$VERSION-source-release.zip</code>. The download link for the previous release version should be changed like <code>https://archive.apache.org/dist/incubator/dubbo/$VERSION/apache-dubbo-$VERSION-bin-release.zip)</code>. Please refer to the <a href=/en/blog/2020/05/18/past-releases/>download page</a> for more details.</li><li>Make sure all the commits in the release branch are merged into master branch, and then remove the remote release branch. For example: <code>git push origin --delete 2.7.0-release</code></li><li>Send mail to <a href=mailto:dev@dubbo.apache.org>dev@dubbo.apache.org</a> and <a href=mailto:general@incubator.apache.org>general@incubator.apache.org</a>, notify the community that the release is completed.
The mail template to announce release:</li></ol><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-text data-lang=text><span style=display:flex><span>Hello Community,
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>The Apache Dubbo team is pleased to announce that the
</span></span><span style=display:flex><span>2.6.6 has just been released.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Apache Dubbo™ is a high-performance, java based, open source
</span></span><span style=display:flex><span>RPC framework. Dubbo offers three key functionalities, which include
</span></span><span style=display:flex><span>interface based remote call, fault tolerance &amp; load balancing, and
</span></span><span style=display:flex><span>automatic service registration &amp; discovery.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Both the source release[1] and the maven binary release[2] are available
</span></span><span style=display:flex><span>now, you can also find the detailed release notes in here[3].
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>If you have any usage questions, or have problems when upgrading or find
</span></span><span style=display:flex><span>any problems about enhancements included in this release, please don’t
</span></span><span style=display:flex><span>hesitate to let us know by sending feedback to this mailing list or filing
</span></span><span style=display:flex><span>an issue on GitHub[4].
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>=====
</span></span><span style=display:flex><span>*Disclaimer*
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>Apache Dubbo is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>[1] https://dubbo.apache.org/en/blog/2020/05/18/past-releases/
</span></span><span style=display:flex><span>[2] http://central.maven.org/maven2/com/alibaba/dubbo
</span></span><span style=display:flex><span>[3] https://github.com/apache/dubbo/releases
</span></span><span style=display:flex><span>[4] https://github.com/apache/dubbo/issues
</span></span></code></pre></div><h2 id=complete-maven-convenient-binary-release>Complete Maven Convenient Binary release</h2><p><strong><a href=https://repository.apache.org/>repository.apache.org</a> The permissions of the nexus repository have been applied, see <a href=https://issues.apache.org/jira/browse/INFRA-16451>jira</a></strong></p><p>To release the maven artifacts, go to <a href=https://repository.apache.org>repository.apache.org</a>, and choose the staging repository, click the release button. Wait for a moment and verify it at <a href=https://repository.apache.org/content/repositories/releases/org/apache/dubbo/>here</a>, make sure your artifacts are there and correct. It will take some time to sync to maven central repository. You can verify it at <a href=https://repo.maven.apache.org/maven2/org/apache/dubbo>here</a></p><h2 id=faq>FAQ</h2><h4 id=gpg-signing-failed-inappropriate-ioctl-for-device>gpg: signing failed: Inappropriate ioctl for device</h4><p>If you&rsquo;ve encoutered this error, try the following commands:</p><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-gdscript3 data-lang=gdscript3><span style=display:flex><span><span style=color:#719e07>export</span> GPG_TTY<span style=color:#719e07>=$</span>(tty)
</span></span></code></pre></div><ul class="list-unstyled d-flex justify-content-between align-items-center mb-0 pt-5"><li><a href=/en/blog/2018/09/02/how-to-implement-a-fully-asynchronous-calls-chain-based-on-dubbo/ aria-label="Previous - How to implement a fully asynchronous calls chain based on Dubbo" class="btn btn-primary"><span class=mr-1></span>Previous</a></li><li><a href=/en/blog/2018/09/30/integrate-dubbo-with-kubernetes/ aria-label="Next - Integrate Dubbo with Kubernetes" class="btn btn-primary">Next<span class=ml-1></span></a></li></ul></div><div id=pre-footer><h2>Feedback</h2><p class=feedback--prompt>Was this page helpful?</p><button class="btn btn-primary mb-4 feedback--yes">Yes</button>
<button class="btn btn-primary mb-4 feedback--no">No</button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/en/blog/news/prepare-an-apache-release.md target=_blank><i class="fa fa-edit fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/en/blog/news/prepare-an-apache-release.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> Create child page</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=How%20to%20prepare%20an%20Apache%20Release" target=_blank><i class="fab fa-github fa-fw"></i> Create an issue</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> Create project issue</a></div><nav id=TableOfContents><ul><li><a href=#understanding-the-apache-release-cycle>Understanding the Apache Release Cycle</a></li><li><a href=#preparation-of-local-building-environment>Preparation of Local Building Environment</a></li><li><a href=#pack--upload>Pack & Upload</a><ul><li><a href=#note>Note</a></li></ul></li><li><a href=#prepare-apache-release>Prepare Apache Release</a></li><li><a href=#verify-release-candidates>Verify Release Candidates</a><ul><li><a href=#check-signatures-and-hashes-are-good>Check signatures and hashes are good</a></li><li><a href=#check-source-release-file-content>Check source release file content</a></li><li><a href=#check-binary-distribution-file-content>Check binary distribution file content</a></li></ul></li><li><a href=#release-vote>Release vote</a></li><li><a href=#official-release>Official Release</a></li><li><a href=#complete-maven-convenient-binary-release>Complete Maven Convenient Binary release</a></li><li><a href=#faq>FAQ</a><ul><li></li></ul></li></ul></nav><div class="taxonomy taxonomy-terms-cloud taxo-tags"><h5 class=taxonomy-title>Tags</h5><ul class=taxonomy-terms><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/en/tags/ecosystem/ data-taxonomy-term=ecosystem><span class=taxonomy-label>ecosystem</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/en/tags/news/ data-taxonomy-term=news><span class=taxonomy-label>news</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/en/tags/opentelemetry/ data-taxonomy-term=opentelemetry><span class=taxonomy-label>OpenTelemetry</span><span class=taxonomy-count>1</span></a></li><li><a class=taxonomy-term href=https://cn.dubbo.apache.org/en/tags/tracing/ data-taxonomy-term=tracing><span class=taxonomy-label>tracing</span><span class=taxonomy-count>1</span></a></li></ul></div></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2024 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. All Rights Reserved</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/overview/notices/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug=" crossorigin=anonymous></script><script async src=https://widget.kapa.ai/kapa-widget.bundle.js data-website-id=d763c4f2-f871-400b-aeca-d986c4af73c2 data-project-name="Apache Dubbo" data-project-color=#E8442E data-button-text="Ask AI" data-search-mode-enabled=true data-modal-open-on-command-k=true data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China due to recaptcha, a proxy is required." data-project-logo=https://pbs.twimg.com/profile_images/1011849068283191302/FJbH5vbF_400x400.jpg data-modal-example-questions="What is Apache Dubbo?,How to run Apache Dubbo?" data-button-position-top data-button-position-right=20px data-button-position-bottom=200px data-button-position-left></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script></body></html>