This is an automated email from the ASF dual-hosted git repository.

jianbin pushed a commit to branch docusaurus
in repository https://gitbox.apache.org/repos/asf/incubator-seata-website.git


The following commit(s) were added to refs/heads/docusaurus by this push:
     new 4f25e37c1f add release-guide.md (#895)
4f25e37c1f is described below

commit 4f25e37c1fd9e8b0912186f6164f410f23fc8dbc
Author: funkye <[email protected]>
AuthorDate: Fri Sep 27 10:10:07 2024 +0800

    add release-guide.md (#895)
---
 docs/developers/ppmc-guide/release-guide_dev.md    |   1 +
 .../en/docusaurus-plugin-content-docs/current.json |   4 +
 .../developers/ppmc-guide/release-guide_dev.md     | 530 +++++++++++++++++++++
 .../docusaurus-plugin-content-docs/current.json    |   4 +
 .../developers/ppmc-guide/release-guide_dev.md     | 494 +++++++++++++++++++
 sidebars.js                                        |  10 +
 6 files changed, 1043 insertions(+)

diff --git a/docs/developers/ppmc-guide/release-guide_dev.md 
b/docs/developers/ppmc-guide/release-guide_dev.md
new file mode 100644
index 0000000000..e872b67af1
--- /dev/null
+++ b/docs/developers/ppmc-guide/release-guide_dev.md
@@ -0,0 +1 @@
+Placeholder. DO NOT DELETE.
\ No newline at end of file
diff --git a/i18n/en/docusaurus-plugin-content-docs/current.json 
b/i18n/en/docusaurus-plugin-content-docs/current.json
index 2c6a793439..7cc46a247b 100644
--- a/i18n/en/docusaurus-plugin-content-docs/current.json
+++ b/i18n/en/docusaurus-plugin-content-docs/current.json
@@ -71,6 +71,10 @@
     "message": "Committer Guide",
     "description": "The label for category Committer Guide in sidebar 
developers"
   },
+  "sidebar.developers.category.PPMC Guide": {
+    "message": "PPMC Guide",
+    "description": "The label for category PPMC Guide in sidebar developers"
+  },
   "sidebar.release-notes.category.release-notes": {
     "message": "Release Notes",
     "description": "The label for category Release Notes in sidebar Release 
Notes"
diff --git 
a/i18n/en/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
 
b/i18n/en/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
new file mode 100644
index 0000000000..350ae82a8d
--- /dev/null
+++ 
b/i18n/en/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
@@ -0,0 +1,530 @@
+---
+title: Release Guide
+keywords: [Seata]
+description: Release Guide.
+---
+
+# Release Guide
+
+## 1. Introduction
+
+#### 1.1 Apache Version Release Documentation
+
+Refer to the following link to understand the ASF release process:
+
+- [Apache Release Guide](http://www.apache.org/dev/release-publishing)
+- [Apache Release Policy](http://www.apache.org/dev/release.html)
+- [Maven Release 
Info](http://www.apache.org/dev/publishing-maven-artifacts.html)
+
+#### 1.2 PGP Signature
+
+Follow the Apache release guidelines to sign the release version, allowing 
users to verify whether the downloaded version has been tampered with.
+
+Create a `pgp` key for version signing, using **\<your Apache ID>@apache.org** 
as the key USER-ID.
+
+For more details, refer to the [Apache Releases Signing 
documentation](https://infra.apache.org/release-signing) and [Cryptography with 
OpenPGP](http://www.apache.org/dev/openpgp.html).
+
+Here is a brief process for generating the 
key:http://www.apache.org/dev/openpgp.html)
+
+Here is a brief process for generating the key:
+
+- Generate a new `gpg` key using `gpg --full-gen-key`, setting the key length 
to 4096.
+
+  Note: You can set the key to never expire or choose a specific expiration 
time based on your needs. However, you will need to update the public key after 
it expires in the [DEV KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS) and the 
[RELEASE KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS).
+
+- Upload the key to a public key server using `gpg --keyserver 
keys.openpgp.org --send-key <your key id>`.
+
+  Note: If the access fails, you can upload the public key online via the 
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/).
+
+```
+You can find the key ID using the command: gpg --list-signatures 
--keyid-format LONG
+pub   rsa4096/561507DBDD81E3D5 2024-09-19 [SC] [expires: 2027-09-19]
+      F2D3A28A392129B927C7FB42561507DBDD81E3D5
+uid                   [ultimate] jianbin.chen <[email protected]>
+sig 3        561507DBDD81E3D5 2024-09-19  [self-signed]
+sub   rsa4096/07B6250EB8C9B2A0 2024-09-19 [E] [expires: 2027-09-19]
+sig          561507DBDD81E3D5 2024-09-19  [self-signed]
+The key ID is 561507DBDD81E3D5.
+```
+
+- Export the public key to a text file using the command: `gpg --armor 
--output ./public-key.txt --export 561507DBDD81E3D5`.
+- Append the generated key to the [DEV KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS) and the 
[RELEASE KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS).
+
+Note:
+
+The DEV SVN repository can be added by the Release Manager, while the RELEASE 
SVN repository requires PMC permissions and can be assisted by the PMC to 
upload the KEY.
+
+**Tips:** You need to set the default public key. If you have multiple public 
keys, please modify `~/.gnupg/gpg.conf`.
+
+Reference example:
+
+```
+gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+  (1) RSA and RSA (default)
+  (2) DSA and Elgamal
+  (3) DSA (sign only)
+  (4) RSA (sign only)
+Your selection? 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+        0 = key does not expire
+     <n>  = key expires in n days
+     <n>w = key expires in n weeks
+     <n>m = key expires in n months
+     <n>y = key expires in n years
+Key is valid for? (0)
+Key does not expire at all
+Is this correct? (y/N) y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: (Set username) (use Apache ID)
+
+Email address: (Set email address) (use Apache email)
+
+Comment: (Fill in comment)
+
+You selected this USER-ID:
+
+"Username (comment) <email address>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+
+You need a Passphrase to protect your secret key. (Set password)
+
+```
+
+Convert the generated public key and private key to ASCII format:
+
+```
+gpg --armor --output ./public-key.txt --export 561507DBDD81E3D5
+gpg --armor --output ./private-key.txt --export-secret-keys 561507DBDD81E3D5
+
+```
+
+View the key list:
+
+```
+[root@localhost ~]# gpg --list-signatures --keyid-format LONG
+[keyboxd]
+---------
+pub   rsa4096/561507DBDD81E3D5 2024-09-19 [SC] [有效至:2027-09-19]
+      F2D3A28A392129B927C7FB42561507DBDD81E3D5
+uid                   [ 绝对 ] jianbin.chen <[email protected]>
+sig 3        561507DBDD81E3D5 2024-09-19  [自签名]
+sub   rsa4096/07B6250EB8C9B2A0 2024-09-19 [E] [有效至:2027-09-19]
+sig          561507DBDD81E3D5 2024-09-19  [自签名]
+
+```
+
+Upload the public key to the key server
+
+```
+[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key 
561507DBDD81E3D5
+gpg: sending key 561507DBDD81E3D5 to hkp server keys.openpgp.org
+
+```
+
+#### 1.3 POM Configuration
+
+Configure the POM file to deploy the version to the ASF Nexus repository.
+
+① Add Apache POM inheritance for default settings.
+
+```
+<parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>XX</version>
+</parent>
+
+```
+
+② Add key information to the Maven configuration file `settings.xml`.
+
+```
+<settings>
+    <profiles>
+        <profile>
+            <id>signed_release</id>
+            <properties>
+                <mavenExecutorId>forked-path</mavenExecutorId>
+                <gpg.keyname>yourKeyName</gpg.keyname>
+          
<deploy.url>https://dist.apache.org/repos/dist/dev/incubator/seata/</deploy.url>
+            </properties>
+        </profile>
+    </profiles>
+    <servers>
+        <!-- To publish a snapshot of some part of Maven -->
+        <server>
+            <id>apache.snapshots.https</id>
+            <username>yourApacheID</username>
+            <!-- Use the password encryption by maven -->
+            <password>yourApachePassword</password>
+        </server>
+        <!-- To stage a release of some part of Maven -->
+        <server>
+            <id>apache.releases.https</id>
+            <username>yourApacheID</username>
+            <password>yourApachePassword</password>
+        </server>
+        <server>
+            <id>gpg.passphrase</id>
+            <passphrase>yourKeyPassword</passphrase>
+        </server>
+    </servers>
+</settings>
+
+```
+
+**Tips:** It is recommended to use [Maven's password encryption 
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) to 
encrypt `gpg.passphrase`.
+
+#### 1.5 Release Notes
+
+Build the corresponding version's Release Notes from the 
[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md).
+
+## 2. Release Process
+
+### 1. Prepare Branch
+
+Create a new branch from the main branch as the release branch. For example, 
if you are going to release version `${release_version}`, create a new branch 
`${release_version}` from the development branch. All modifications and tagging 
related to `${release_version}` Release Candidates will be done in the 
`${release_version}` branch, ensuring that all GitHub Actions CI checks pass. 
After the release is completed, merge this branch back into the main branch.
+
+Example: If the Java SDK needs to release version `2.2.0`, create a new branch 
`2.2.0` from the `2.x` branch, and commit changes in this branch to replace the 
Snapshot version number with `2.2.0`.
+
+### 2. Pre-release Binary Package
+
+#### 2.1 SDK Preparation for Release
+
+Prepare the release according to the instructions in [publishing maven 
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4].
+
+```
+mvn clean deploy -Prelease -DskipTests -e -B 
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+```
+
+At this point, the Seata SDK is published to the [staging 
repository](https://repository.apache.org/#stagingRepositories) (you need to 
log in with your Apache account credentials). Find the released version, 
`${STAGING.RELEASE}`, and click Close.
+
+Note: If closing fails, it may be because the public key corresponding to the 
signing key cannot be retrieved from 
[keys.openpgp.org](http://keys.openpgp.org/). Please check yourself using the 
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/).
+
+#### 2.2 Submit Source & Binary to SVN Repository
+
+##### 2.2.1 Install SVN
+
+Download and install from [Download Apache Subversion 
Sources](https://subversion.apache.org/download.cgi#recommended-release)
+
+Alternatively, you can quickly install it using `brew install subversion`.
+
+##### 2.2.2 Compile seata-server and seata-namingserver
+
+Run the following command:
+
+```
+mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C 
-Dpmd.skip=true clean install -U
+```
+
+##### 2.2.3 Sign the Source and Binary
+
+For the Source, it is recommended to download the zip package directly from 
the corresponding version branch on GitHub, such as 2.2.0, to avoid polluting 
the Source package content in your local environment. Then rename it to 
`apache-seata-x.x.x-incubating-src.zip`.
+
+Run the following command to generate a SHA-512 checksum:
+
+```
+shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >> 
apache-seata-x.x.x-incubating-src.zip.sha512
+```
+
+Sign the Binary:
+
+```
+gpg --armor --output apache-seata-x.x.x-incubating-bin.zip.asc 
apache-seata-x.x.x-incubating-bin.zip
+```
+
+For the Binary, generate a SHA-512 checksum:
+
+```
+shasum -b -a 512 apache-seata-x.x.x-incubating-bin.tar.gz >> 
apache-seata-x.x.x-incubating-bin.tar.gz.sha512
+```
+
+Sign the Binary:
+
+```
+gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc 
apache-seata-x.x.x-incubating-bin.tar.gz
+```
+
+Verify the SHA-512 checksum:
+
+```
+shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512
+```
+
+Verify the signature:
+
+```
+gpg --verify apache-seata-x.x.x-incubating-src.zip.asc 
apache-seata-x.x.x-incubating-src.zip
+```
+
+##### 2.2.4 Check Out SVN Locally, Create Release Version Path, and Move 
Signature Files, Source, and Binary into It
+
+Check out the SVN directory:
+
+```
+svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/
+```
+
+Create the release version path and move the files into it:
+
+```
+cd seata
+mkdir incubator-seata/x.x.x-RCn/
+mv ../x.x.x incubator-seata/x.x.x-RCn/
+```
+
+After executing the above commands, the structure should look approximately 
like this:
+
+```
+-rw-r--r--@ 1 fe-work  staff   180M  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz
+-rw-r--r--@ 1 fe-work  staff   180M  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz.asc
+-rw-r--r--@ 1 fe-work  staff   187B  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz.sha512
+-rw-r--r--@ 1 fe-work  staff   6.7M  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip
+-rw-r--r--@ 1 fe-work  staff   6.7M  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip.asc
+-rw-r--r--  1 fe-work  staff   300B  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip.sha512
+```
+
+The KEYS file in the parent `seata` directory needs to ensure that the public 
key generated in the first step is appended.
+
+Run the following commands:
+
+```
+svn add x.x.x
+svn commit -m "submit x.x.x version"
+```
+
+If you updated the KEYS file, you need to run `svn update KEYS` before 
committing.
+
+After executing the commit, you will be prompted to enter your Apache LDAP 
username and password. Enter them to successfully submit the changes.
+
+```
+➜  seata svn commit -m 'submit 2.2.0 version'
+Adding       2.2.0
+Adding (binary) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz
+Adding (binary) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz.asc
+Adding       2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz.sha512
+Adding (binary) 2.2.0/apache-seata-2.2.0-incubating-src.zip
+Adding (binary) 2.2.0/apache-seata-2.2.0-incubating-src.zip.asc
+Adding       2.2.0/apache-seata-2.2.0-incubating-src.zip.sha512
+Transmitting file data...done
+Committing transaction...
+Committed revision 71769.
+```
+
+#### 2.3 Creating Tag and Release Note
+
+##### 2.3.1 Creating a Tag
+
+Execute the following command in the x.x.x branch:
+
+```
+Copy Codegit tag vx.x.x -m 'release: release for x.x.x'
+```
+
+Then push the tag to the upstream (seata repository):
+
+```
+Copy Codegit push upstream vx.x.x
+```
+
+##### 2.3.2 Creating a Release Note
+
+Create a release note using the following link: [New release · 
apache/incubator-seata 
(github.com)](https://github.com/apache/incubator-seata/releases/new) and set 
"Choose a tag" to the corresponding tag.
+
+Set it as "Set as a pre-release." After the overall vote passes, change it to 
"Set as the latest release."
+
+# 3. Voting Phase
+
+## 3.1 Internal Community Voting
+
+**Voting lasts at least 72 hours and requires 3 +1 binding votes.**
+
+Send to:
+
+```
[email protected]
+```
+
+Title:
+
+```
+[VOTE] Release Apache Seata (Incubating) x.x.x-RCN (RoundN) 
+```
+
+In this context, "N" in RC N and Round N represents the number of times the 
voting has occurred for that version.
+
+```
+Hi Seata Community,
+
+This is a call for vote to release Apache Seata(incubating)
+2.2.0 This is the first release of Apache Seata(incubating).
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
+
+The staging repo:
+https://repository.apache.org/content/repositories/${STAGING.RELEASE}/
+
+Git tag for the release:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+Hash for the release tag:
+lasr commit id
+
+Release Notes:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+The artifacts have been signed with Key [ key-id ], corresponding
+to
+[ [email protected] ]
+which can be found in the keys file:
+https://downloads.apache.org/incubator/seata/KEYS
+
+Build Environment: JDK 8+, Apache Maven 3.6.0+.
+/mvnw clean package -DskipTests=true
+
+CI Test Workflow:
+last commit ci:
+https://github.com/apache/incubator-seata/actions/runs/10938949607/job/30411922716
+https://github.com/apache/incubator-seata/actions/runs/10938949623/job/30410204492
+https://github.com/apache/incubator-seata/actions/runs/10938949605/job/30411747821
+
+The vote will be open for at least 72 hours.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+To learn more about Apache Seata , please see https://seata.apache.org/
+
+```
+
+### 3.1.2 Completing the Vote
+
+Send the release vote approval via email.
+
+```
+Hi Community,
+
+
+The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+with 3 +1 binding votes, and no +0 or -1 votes.
+
+3 (+1 binding)
+
+- Jianbin Chen
+
+- Jiangke Wu
+
+- Jiawei Zhang
+
+no further 0 or -1 votes.
+
+
+The vote thread:
+https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
+
+Thank you for reviewing and voting for our release candidate.
+
+We will soon launch the second stage of voting.
+```
+
+
+
+### 3.2 Voting in the Incubator
+
+This is similar to the community voting, but you need to include the thread 
link related to the community vote to demonstrate that consensus has been 
reached within the community.
+
+Send an email to `[email protected]`.
+
+```
+Hello everyone,
+
+This is a call for vote to release Apache Seata(incubating)
+2.2.0 This is the first release of Apache Seata(incubating).
+
+The vote thread:
+https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
+
+Vote Result:
+https://lists.apache.org/thread/ybo9c5hrx2h2glg2bdgs3t22xg734y7r
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
+
+The staging repo:
+https://repository.apache.org/content/repositories/${STAGING.RELEASE}/
+
+Git tag for the release:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+Hash for the release tag:
+last commit id
+
+Release Notes:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+The artifacts have been signed with Key [ key-id ], corresponding
+to
+[ [email protected] ]
+which can be found in the keys file:
+https://downloads.apache.org/incubator/seata/KEYS
+
+Build Environment: JDK 8+, Apache Maven 3.6.0+.
+/mvnw clean package -DskipTests=true
+
+CI Test Workflow:
+last commit ci:
+https://github.com/apache/incubator-seata/actions/runs/10938949607/job/30411922716
+https://github.com/apache/incubator-seata/actions/runs/10938949623/job/30410204492
+https://github.com/apache/incubator-seata/actions/runs/10938949605/job/30411747821
+
+The vote will be open for at least 72 hours.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+To learn more about Apache Seata , please see https://seata.apache.org/
+```
+
+
+
+# 4. Completing the Release
+
+1. From the Apache Nexus repository, select the previously closed 
**orgapacheseata-XXX** and click the `Release` icon to publish.
+2. Pull the binaries and sources that were previously uploaded to SVN dev in 
the same way from https://dist.apache.org/repos/dist/release/incubator/seata/. 
Move the x.x.x from dev to release, then execute `svn delete x.x.x` in dev 
followed by `svn commit`. After that, delete x.x.x from dev. Navigate to the 
release directory for seata and use `svn add` to submit the x.x.x version to 
the release path.
+3. Set the release note to "Set as the latest release" and submit it.
+4. Update the x.x.x documentation on the Seata official website and add the 
corresponding download links for the binaries and sources.
\ No newline at end of file
diff --git a/i18n/zh-cn/docusaurus-plugin-content-docs/current.json 
b/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
index 9c74543eb0..263fa16c76 100644
--- a/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
+++ b/i18n/zh-cn/docusaurus-plugin-content-docs/current.json
@@ -71,6 +71,10 @@
     "message": "提交者向导",
     "description": "The label for category Committer Guide in sidebar 
developers"
   },
+  "sidebar.developers.category.PPMC Guide": {
+    "message": "PPMC向导",
+    "description": "The label for category PPMC Guide in sidebar developers"
+  },
   "sidebar.release-notes.category.release-notes": {
     "message": "发布说明",
     "description": "The label for category Release Notes in sidebar Release 
Notes"
diff --git 
a/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
 
b/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
new file mode 100644
index 0000000000..21045b6ff7
--- /dev/null
+++ 
b/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/ppmc-guide/release-guide_dev.md
@@ -0,0 +1,494 @@
+---
+title: 发版手册
+keywords: [Seata]
+description: Release Guide.
+---
+
+# 发布手册
+
+## 1. 前言
+
+#### 1.1 Apache 版本发布文档
+
+参考以下链接,了解 ASF 版本发布流程:
+
+- [Apache Release Guide](http://www.apache.org/dev/release-publishing)
+- [Apache Release Policy](http://www.apache.org/dev/release.html)
+- [Maven Release 
Info](http://www.apache.org/dev/publishing-maven-artifacts.html)
+
+#### 1.2 PGP 签名
+
+遵循 Apache 版本发布指南,对发布版本签名,用户也可据此判断下载的版本是否被篡改。
+
+创建 `pgp` 密钥用于版本签名,使用 **\<your Apache ID>@apache.org** 作为密钥 USER-ID
+
+详情可参考 [Apache Releases Signing 
documentation](https://infra.apache.org/release-signing),[Cryptography with 
OpenPGP](http://www.apache.org/dev/openpgp.html)
+
+生成密钥的简要流程:
+
+- 通过` gpg --full-gen-key` 生成一个新的 `gpg` 密钥, 设置密钥长度为 4096
+
+  注:可设置永不过期,也可根据自己需求设置一定的过期时间,但需要在过期后更新的公钥到[DEV KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS) 和 
[RELEASE KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS)
+
+- 通过 `gpg --keyserver keys.openpgp.org --send-key <your key id>` 上传密钥到公钥服务器
+
+  注:如若访问不通,可通过[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/) 
在线上传公钥
+
+  ```
+  使用该命令可查到keyid如:gpg --list-signatures --keyid-format LONG
+  pub   rsa4096/561507DBDD81E3D5 2024-09-19 [SC] [有效至:2027-09-19]
+        F2D3A28A392129B927C7FB42561507DBDD81E3D5
+  uid                   [ 绝对 ] jianbin.chen <[email protected]>
+  sig 3        561507DBDD81E3D5 2024-09-19  [自签名]
+  sub   rsa4096/07B6250EB8C9B2A0 2024-09-19 [E] [有效至:2027-09-19]
+  sig          561507DBDD81E3D5 2024-09-19  [自签名]
+  那么keyid为561507DBDD81E3D5
+  ```
+
+- 通过 `gpg --armor --output ./public-key.txt --export 561507DBDD81E3D5` 
导出公钥到文本文件
+
+- 将生成的密钥追加到(https://dist.apache.org/repos/dist/release/incubator/seata/KEYS) 和 
[RELEASE KEYS 
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS))
+
+注意:
+
+DEV SVN 仓库可以由 Release Manager 自行添加,Release SVN 仓库需要 PMC 权限,可以由 PMC 协助将 KEY 
进行上传。
+
+**Tips:** 需要设置默认公钥, 若有多个公钥,请修改 `~/.gnupg/gpg.conf`
+
+参考示例:
+
+```
+gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Please select what kind of key you want:
+  (1) RSA and RSA (default)
+  (2) DSA and Elgamal
+  (3) DSA (sign only)
+  (4) RSA (sign only)
+Your selection? 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096
+Requested keysize is 4096 bits
+Please specify how long the key should be valid.
+        0 = key does not expire
+     <n>  = key expires in n days
+     <n>w = key expires in n weeks
+     <n>m = key expires in n months
+     <n>y = key expires in n years
+Key is valid for? (0)
+Key does not expire at all
+Is this correct? (y/N) y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: (设置用户名)(使用apache id)
+Email address: (设置邮件地址)(使用apache邮箱)
+Comment: (填写注释)
+You selected this USER-ID:
+   "用户名 (注释) <邮件地址>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+You need a Passphrase to protect your secret key. (设置密码)
+
+```
+
+将生成的公钥和私钥转化为 ASCII 形式:
+
+```
+gpg --armor --output ./public-key.txt --export 561507DBDD81E3D5
+gpg --armor --output ./private-key.txt --export-secret-keys 561507DBDD81E3D5
+
+```
+
+查看密钥列表:
+
+```
+[root@localhost ~]# gpg --list-signatures --keyid-format LONG
+[keyboxd]
+---------
+pub   rsa4096/561507DBDD81E3D5 2024-09-19 [SC] [有效至:2027-09-19]
+      F2D3A28A392129B927C7FB42561507DBDD81E3D5
+uid                   [ 绝对 ] jianbin.chen <[email protected]>
+sig 3        561507DBDD81E3D5 2024-09-19  [自签名]
+sub   rsa4096/07B6250EB8C9B2A0 2024-09-19 [E] [有效至:2027-09-19]
+sig          561507DBDD81E3D5 2024-09-19  [自签名]
+
+```
+
+上传公钥到公钥服务器
+
+```
+[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key 
561507DBDD81E3D5
+gpg: sending key 561507DBDD81E3D5 to hkp server keys.openpgp.org
+
+```
+
+#### 1.3 POM 配置
+
+配置 POM 文件,以便将版本部署到 ASF Nexus 仓库。
+
+① 添加 Apache POM 继承默认设置
+
+```
+<parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>XX</version>
+</parent>
+
+```
+
+② Maven 配置文件 `settings.xml` 中添加密钥信息
+
+```
+<settings>
+    <profiles>
+        <profile>
+            <id>signed_release</id>
+            <properties>
+                <mavenExecutorId>forked-path</mavenExecutorId>
+                <gpg.keyname>yourKeyName</gpg.keyname>
+          
<deploy.url>https://dist.apache.org/repos/dist/dev/incubator/seata/</deploy.url>
+            </properties>
+        </profile>
+    </profiles>
+    <servers>
+        <!-- To publish a snapshot of some part of Maven -->
+        <server>
+            <id>apache.snapshots.https</id>
+            <username>yourApacheID</username>
+            <!-- Use the password encryption by maven -->
+            <password>yourApachePassword</password>
+        </server>
+        <!-- To stage a release of some part of Maven -->
+        <server>
+            <id>apache.releases.https</id>
+            <username>yourApacheID</username>
+            <password>yourApachePassword</password>
+        </server>
+        <server>
+            <id>gpg.passphrase</id>
+            <passphrase>yourKeyPassword</passphrase>
+        </server>
+    </servers>
+</settings>
+
+```
+
+**Tips:** 推荐使用 [Maven's password encryption 
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) 加密 
`gpg.passphrase`
+
+#### 1.5 发布 Release Notes
+
+通过[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md)构建出对应版本的Release
 Notes
+
+## 2.发布流程
+
+### 1. 准备分支
+
+从主干分支拉取新分支作为发布分支,如现在要发布 `${release_version}` 版本,则从开发分支拉出新分支 
`${release_version}`,此后`${release_version}` Release Candidates 
涉及的修改及打标签等都在`${release_version}`分支进行,并保证该分支的github actions ci全部通过,最终发布完成后合入主干分支。
+
+例:如 Java SDK 需要发布 `2.2.0` 版本,从 `2.x` 分支拉出新分支 `2.2.0`,并在此分支提交从 Snapshot版本号 替换为 
`2.2.0` 版本号的 commit。
+
+### 2.预发布二进制包
+
+#### 2.1 SDK根据 [publishing maven 
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4] 
的说明准备发布。
+
+```
+mvn clean deploy -Prelease -DskipTests -e -B 
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
+```
+
+此时,seata sdk被发布到 [预发仓库](https://repository.apache.org/#stagingRepositories) 
(需要apache账号密码登录),找到发布的版本,即 `${STAGING.RELEASE}`, 并点击 Close。
+
+注:如果close失败很可能是因为签名的秘钥对应的公钥在keys.openpgp.org中无法获取到,请自行通过[OpenPGP Keyserver 
(ubuntu.com)](https://keyserver.ubuntu.com/) 检查
+
+#### 2.2 Source&Binary提交至svn仓库
+
+##### 2.2.1 安装svn
+
+下载并安装[Download Apache Subversion 
Sources](https://subversion.apache.org/download.cgi#recommended-release)
+
+或通过 `brew install subversion` 一键安装
+
+##### 2.2.2 编译seata-server及seata-namingserver
+
+ `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C 
-Dpmd.skip=true clean install -U`
+
+##### 2.2.3 将Source及Binary进行签名
+
+Source 建议直接通过github 对应版本分支如2.2.0 
进行下载zip包,避免本地环境污染Source包内容,然后重命名为apache-seata-x.x.x-incubating-src.zip
+
+`shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >> 
apache-seata-x.x.x-incubating-src.zip.sha512 `
+
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.zip.asc 
apache-seata-x.x.x-incubating-bin.zip`
+
+Binary进行签名
+
+`shasum -b -a 512 apache-seata-x.x.x-incubating-bin.tar.gz >> 
apache-seata-x.x.x-incubating-bin.tar.gz.sha512`
+
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc 
apache-seata-x.x.x-incubating-bin.tar.gz`
+
+sha512验证
+
+`shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512`
+
+asc验证
+
+`gpg --verify  apache-seata-x.x.x-incubating-src.zip.asc 
apache-seata-x.x.x-incubating-src.zip`
+
+##### 2.2.4 拉取svn至本地,并构建发布版本路径,并将签名文件及Source和Binary移入其中
+
+拉取svn目录
+
+`svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/`
+
+创建发布版本路径,并将文件移入其中
+
+`cd seata`
+
+`mkdir x.x.x`
+
+`mv ….. x.x.x`
+
+通过以上命令,移入其中后大概如下
+
+```
+-rw-r--r--@ 1 fe-work  staff   180M  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz
+-rw-r--r--@ 1 fe-work  staff   180M  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz.asc
+-rw-r--r--@ 1 fe-work  staff   187B  9 20 10:16 
apache-seata-2.2.0-incubating-bin.tar.gz.sha512
+-rw-r--r--@ 1 fe-work  staff   6.7M  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip
+-rw-r--r--@ 1 fe-work  staff   6.7M  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip.asc
+-rw-r--r--  1 fe-work  staff   300B  9 20 10:16 
apache-seata-2.2.0-incubating-src.zip.sha512
+```
+
+而其上级seata目录中的KEYS需要保证追加了第一步所说的,将构建的公钥放入其中
+
+执行 
+
+`svn add x.x.x`
+
+`svn commit -m "submit x.x.x version" `
+
+如果更新了KEYS 需要在commit之前执行 `svn update KEYS`
+
+执行commit后会提示输入apache ldap账号密码,输入后即可提交成功
+
+```
+➜  seata svn commit -m 'submit 2.2.0 version'
+正在增加       2.2.0
+正在增加 (二进制) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz
+正在增加 (二进制) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz.asc
+正在增加       2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz.sha512
+正在增加 (二进制) 2.2.0/apache-seata-2.2.0-incubating-src.zip
+正在增加 (二进制) 2.2.0/apache-seata-2.2.0-incubating-src.zip.asc
+正在增加       2.2.0/apache-seata-2.2.0-incubating-src.zip.sha512
+传输文件数据......done
+正在读取事务
+提交后的版本为 71769。
+```
+
+#### 2.3 创建tag及releasenote
+
+##### 2.3.1 创建tag
+
+在x.x.x分支下执行
+
+`git tag vx.x.x -m 'release: release for x.x.x'`
+
+git push upstream(seata仓库repo) vx.x.x
+
+##### 2.3.2 创建release note
+
+通过该链接创建release note [New release · apache/incubator-seata 
(github.com)](https://github.com/apache/incubator-seata/releases/new) 并将Choose 
a tag设置为对应的tag
+
+并设置为Set as a pre-release 整体投票通过后再设置为Set as the latest release
+
+### 3.投票阶段
+
+#### 3.1 社区内部投票
+
+**投票持续至少 72 小时并获得 3 个+1 binding票**
+
+发送至:
+
+```
[email protected]
+```
+
+标题:
+
+`[VOTE]Release Apache Seata (Incubating) x.x.x-RCN (RoundN) `
+
+RC N和Round N的N代表次数,该版本的第几次投票
+
+正文:
+
+```
+Hi Seata Community,
+
+This is a call for vote to release Apache Seata(incubating)
+2.2.0 This is the first release of Apache Seata(incubating).
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
+
+The staging repo:
+https://repository.apache.org/content/repositories/${STAGING.RELEASE}/
+
+Git tag for the release:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+Hash for the release tag:
+tag分支最后一条commit的id
+
+Release Notes:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+The artifacts have been signed with Key [ key-id ], corresponding
+to
+[ 邮箱如[email protected] ]
+which can be found in the keys file:
+https://downloads.apache.org/incubator/seata/KEYS
+
+Build Environment: JDK 8+, Apache Maven 3.6.0+.
+/mvnw clean package -DskipTests=true
+
+CI Test Workflow:
+涉及该版本最后一次commit的多个CI流水线链接,如
+https://github.com/apache/incubator-seata/actions/runs/10938949607/job/30411922716
+https://github.com/apache/incubator-seata/actions/runs/10938949623/job/30410204492
+https://github.com/apache/incubator-seata/actions/runs/10938949605/job/30411747821
+
+The vote will be open for at least 72 hours.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+To learn more about Apache Seata , please see https://seata.apache.org/
+
+```
+
+#### 3.1.2 完成投票
+
+发布投票通过邮件
+
+```
+Hi Community,
+
+
+The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+with 3 +1 binding votes, and no +0 or -1 votes.
+
+3 (+1 binding)
+
+- Jianbin Chen
+
+- Jiangke Wu
+
+- Jiawei Zhang
+
+no further 0 or -1 votes.
+
+
+The vote thread:
+所对应投票邮件的thread链接,如:
+https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
+
+Thank you for reviewing and voting for our release candidate.
+
+We will soon launch the second stage of voting.
+```
+
+
+
+### 3.2 孵化器中投票
+
+与社区投票类似,但是需要增加社区投票相关的thread链接,以证明已在社区内达成一致
+
+发送邮件至 `[email protected]`
+
+```
+Hello everyone,
+
+This is a call for vote to release Apache Seata(incubating)
+2.2.0 This is the first release of Apache Seata(incubating).
+
+The vote thread:
+社区中投票的thread链接, 如:
+https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
+
+Vote Result:
+社区中投票通过的result thread链接,如:
+https://lists.apache.org/thread/ybo9c5hrx2h2glg2bdgs3t22xg734y7r
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
+
+The staging repo:
+https://repository.apache.org/content/repositories/${STAGING.RELEASE}/
+
+Git tag for the release:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+Hash for the release tag:
+tag分支最后一条commit的id
+
+Release Notes:
+https://github.com/apache/incubator-seata/releases/tag/vx.x.x
+
+The artifacts have been signed with Key [ key-id ], corresponding
+to
+[ 邮箱如[email protected] ]
+which can be found in the keys file:
+https://downloads.apache.org/incubator/seata/KEYS
+
+Build Environment: JDK 8+, Apache Maven 3.6.0+.
+/mvnw clean package -DskipTests=true
+
+CI Test Workflow:
+涉及该版本最后一次commit的多个CI流水线链接,如
+https://github.com/apache/incubator-seata/actions/runs/10938949607/job/30411922716
+https://github.com/apache/incubator-seata/actions/runs/10938949623/job/30410204492
+https://github.com/apache/incubator-seata/actions/runs/10938949605/job/30411747821
+
+The vote will be open for at least 72 hours.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+To learn more about Apache Seata , please see https://seata.apache.org/
+```
+
+
+
+# 4.完成发布
+
+1. 从Apache Nexus 仓库, 选择之前进行close过的的 **orgapacheseata-XXX** 点击 `Release` 图标发布
+2. 将之前上传到SVN 
dev中的binary和source采用相同的方式,拉取https://dist.apache.org/repos/dist/release/incubator/seata/
  然后将dev中的x.x.x移动到release ,并在dev中执行svn delete x.x.x 再svn commit 
提交后删除dev下的x.x.x。再cd 至release中的seata通过svn add 将x.x.x版本提交至release路径下
+3. 将之前release note设置为Set as the latest release并提交
+4. 将x.x.x的文档更新至seata官网中,并补充对应binary和source的下载链接
diff --git a/sidebars.js b/sidebars.js
index c9ea0f83ca..965b7c45cb 100644
--- a/sidebars.js
+++ b/sidebars.js
@@ -180,6 +180,16 @@ const sidebars = {
         'developers/committer-guide/label-an-issue-guide_dev',
         'developers/committer-guide/website-guide_dev'
       ],
+      
+    },
+    {
+      type: 'category',
+      label: 'PPMC Guide',
+      collapsible: false,
+      items: [
+        'developers/ppmc-guide/release-guide_dev'
+      ],
+      
     },
   ],
   'release-notes': [


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to