This is an automated email from the ASF dual-hosted git repository.
xingfudeshi 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 cf85de48653 Synchronize the release guide document with other versions
(#1066)
cf85de48653 is described below
commit cf85de4865399c46fb0308169f69df431144185c
Author: Jiangke Wu <[email protected]>
AuthorDate: Tue Jan 27 09:52:18 2026 +0800
Synchronize the release guide document with other versions (#1066)
---
.../developers/ppmc-guide/release-guide_dev.md | 492 ++++++++++++---------
.../developers/ppmc-guide/release-guide_dev.md | 492 ++++++++++++---------
.../developers/ppmc-guide/release-guide_dev.md | 127 ++++--
.../developers/release-guide/release-guide_dev.md | 127 ++++--
.../developers/release-guide/release-guide_dev.md | 2 +-
.../developers/ppmc-guide/release-guide_dev.md | 156 +++++--
.../developers/ppmc-guide/release-guide_dev.md | 156 +++++--
.../developers/ppmc-guide/release-guide_dev.md | 127 ++++--
.../developers/release-guide/release-guide_dev.md | 125 ++++--
9 files changed, 1198 insertions(+), 606 deletions(-)
diff --git
a/i18n/en/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
b/i18n/en/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
index 2b69e20f103..4a5a1ca9f38 100644
---
a/i18n/en/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/en/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
@@ -8,52 +8,52 @@ description: Release Guide.
## 1. Introduction
-#### 1.1 Apache Version Release Documentation
+### 1.1 Apache Seata™ (incubating) Release Documentation
-Refer to the following link to understand the ASF release process:
+Refer to the following links 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
+### 1.2 PGP Signatures
-Follow the Apache release guidelines to sign the release version, allowing
users to verify whether the downloaded version has been tampered with.
+Following the Apache Release Guidelines, release versions must be signed,
allowing users to verify if downloaded versions have been tampered with.
-Create a `pgp` key for version signing, using **\<your Apache ID>@apache.org**
as the key USER-ID.
+Create a `pgp` key for signing releases, 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).
+For details, refer to [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)
+Brief process for generating keys:
-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 bits
-- 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 set a specific expiration
time. If you set an expiration time, you'll need to update your public key in
the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/incubator/seata/KEYS) and [RELEASE
KEYS file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS)
after renewal.
- 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/dev/incubator/seata/KEYS) and the
[RELEASE KEYS
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS).
+- Upload the key to the public key server using `gpg --keyserver
keys.openpgp.org --send-key <your key id>`
-- Upload the key to a public key server using `gpg --keyserver
keys.openpgp.org --send-key <your key id>`.
+ Note: If you can't access this server, you can upload your public key
online via [OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
- Note: If the access fails, you can upload the public key online via the
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/).
+ ```
+ Use this command to find your keyid: gpg --list-signatures --keyid-format
LONG
+ pub rsa4096/XXXXXXXX 2024-09-19 [SC] [expires: 2027-09-19]
+ F2D3A28A392129B927C7FB42XXXXXXXX
+ uid [ultimate] xxxx <[email protected]>
+ sig 3 XXXXXXXX 2024-09-19 [self-signature]
+ sub rsa4096/XXXXX 2024-09-19 [E] [expires: 2027-09-19]
+ sig XXXXXXXX 2024-09-19 [self-signature]
+ The keyid is XXXXXXXX
+ ```
-```
-You can find the key ID using the command: gpg --list-signatures
--keyid-format LONG
-pub rsa4096/XXXX 2024-09-19 [SC] [expires: 2027-09-19]
- F2D3A28A392129B927C7FB42XXXX
-uid [ultimate] XXXX <[email protected]>
-sig 3 XXXX 2024-09-19 [self-signed]
-sub rsa4096/XXXXXXX 2024-09-19 [E] [expires: 2027-09-19]
-sig XXXX 2024-09-19 [self-signed]
-The key ID is XXXX.
-```
+- Export your public key to a text file using `gpg --armor --output
./public-key.txt --export XXXXXXXX`
+
+- Append your generated key to the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/incubator/seata/KEYS) and [RELEASE
KEYS file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS)
-- Export the public key to a text file using the command: `gpg --armor
--output ./public-key.txt --export XXXX`.
-- Append the generated key to the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/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.
+The Release Manager can add keys to the DEV SVN repository themselves, but
adding to the Release SVN repository requires PMC permissions. PMC members can
help upload the keys.
-**Tips:** You need to set the default public key. If you have multiple public
keys, please modify `~/.gnupg/gpg.conf`.
+**Tips:** You should set a default public key. If you have multiple keys,
modify `~/.gnupg/gpg.conf`.
Reference example:
@@ -63,47 +63,42 @@ 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)
+ (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
+ 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)
-
+Real name: (Set user name) (Use Apache ID)
+Email address: (Set email address) (Use Apache email)
+Comment: (Add comments)
You selected this USER-ID:
-
-"Username (comment) <email address>"
+ "User Name (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:
+Convert the generated public and private keys to ASCII format:
```
-gpg --armor --output ./public-key.txt --export XXXX
-gpg --armor --output ./private-key.txt --export-secret-keys XXXX
+gpg --armor --output ./public-key.txt --export XXXXXXXX
+gpg --armor --output ./private-key.txt --export-secret-keys XXXXXXXX
```
@@ -113,176 +108,150 @@ View the key list:
[root@localhost ~]# gpg --list-signatures --keyid-format LONG
[keyboxd]
---------
-pub rsa4096/XXXX 2024-09-19 [SC] [有效至:2027-09-19]
- F2D3A28A392129B927C7FB42XXXX
-uid [ 绝对 ] XXXX <[email protected]>
-sig 3 XXXX 2024-09-19 [自签名]
-sub rsa4096/XXXXXXX 2024-09-19 [E] [有效至:2027-09-19]
-sig XXXX 2024-09-19 [自签名]
+pub rsa4096/XXXXXXXX 2024-09-19 [SC] [expires: 2027-09-19]
+ F2D3A28A392129B927C7FB42XXXXXXXX
+uid [ultimate] xxxx <[email protected]>
+sig 3 XXXXXXXX 2024-09-19 [self-signature]
+sub rsa4096/XXXXX 2024-09-19 [E] [expires: 2027-09-19]
+sig XXXXXXXX 2024-09-19 [self-signature]
```
-Upload the public key to the key server
+Upload the public key to the key server:
```
-[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key XXXX
-gpg: sending key XXXX to hkp server keys.openpgp.org
+[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key XXXXXXXX
+gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM Configuration
+### 1.3 POM Configuration
-Configure the POM file to deploy the version to the ASF Nexus repository.
+Configure the POM file to deploy versions to the ASF Nexus repository.
-① Add Apache POM inheritance for default settings.
+① Add Apache POM inheritance for default settings:
```
<parent>
- <groupId>org.apache</groupId>
- <artifactId>apache</artifactId>
- <version>XX</version>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>XX</version>
</parent>
```
-② Add key information to the Maven configuration file `settings.xml`.
+② Add key information in 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>
+ <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`.
+**Tips:** It's 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
+#### 1.4 Publishing 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).
+Build Release Notes for the respective version through 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.
+### 2.1 Preparing the 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`.
+Create a new branch from the main branch as the release branch. For instance,
if you're releasing version `${release_version}`, create a new branch
`${release_version}` from the development branch. All changes, tags, and fixes
related to the `${release_version}` Release Candidates should be made on this
branch. Ensure all GitHub Actions CI tests pass on this branch. After the
release is completed, merge it back into the main branch.
-### 2. Pre-release Binary Package
+Example: To release Java SDK version `2.2.0`, create a new branch `2.2.0` from
the `2.x` branch, and commit changes to replace the Snapshot version number
with the `2.2.0` version number on this branch.
-#### 2.1 SDK Preparation for Release
+### 2.2 Pre-Release Binary Packages
-Prepare the release according to the instructions in [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4].
+#### 1) Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
```
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.
+At this point, the Seata SDK is published to the [staging
repository](https://repository.apache.org/#stagingRepositories) (requires
Apache account login). 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/).
+Note: If closing fails, it's likely because the public key corresponding to
your signing key is not available on keys.openpgp.org. Please verify through
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
-#### 2.2 Submit Source & Binary to SVN Repository
+#### 2) Submit Source & Binary to SVN Repository
-##### 2.2.1 Install SVN
+##### a. Install SVN
-Download and install from [Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
+Download and install [Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
-Alternatively, you can quickly install it using `brew install subversion`.
+Or install via `brew install subversion`
-##### 2.2.2 Compile seata-server and seata-namingserver
+##### b. Compile seata-server and seata-namingserver
-Run the following command:
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-```
-mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U
-```
+##### c. Sign Source and Binary packages
-##### 2.2.3 Sign the Source and Binary
+For the Source package, it's recommended to download the zip directly from the
corresponding version branch on GitHub (e.g., 2.2.0) to avoid local environment
contamination, then rename it to apache-seata-x.x.x-incubating-src.zip
-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`.
+`shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >>
apache-seata-x.x.x-incubating-src.zip.sha512 `
-Run the following command to generate a SHA-512 checksum:
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.zip.asc
apache-seata-x.x.x-incubating-bin.zip`
-```
-shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >>
apache-seata-x.x.x-incubating-src.zip.sha512
-```
+For the Binary package:
-Sign the 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.zip.asc
apache-seata-x.x.x-incubating-bin.zip
-```
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc
apache-seata-x.x.x-incubating-bin.tar.gz`
-For the Binary, generate a SHA-512 checksum:
+Verify SHA512:
-```
-shasum -b -a 512 apache-seata-x.x.x-incubating-bin.tar.gz >>
apache-seata-x.x.x-incubating-bin.tar.gz.sha512
-```
+`shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512`
-Sign the Binary:
+Verify ASC:
-```
-gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc
apache-seata-x.x.x-incubating-bin.tar.gz
-```
+`gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip`
-Verify the SHA-512 checksum:
+##### d. Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
-```
-shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512
-```
+Pull SVN directory:
-Verify the signature:
+`svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/`
-```
-gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip
-```
+Create release version path (in the dev path, folders must include "RC" to
indicate they are in a preparatory state), and move files into it:
-##### 2.2.4 Check Out SVN Locally, Create Release Version Path, and Move
Signature Files, Source, and Binary into It
+`cd seata`
-Check out the SVN directory:
+`mkdir x.x.xRCN`
-```
-svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/
-```
+`mv ….. x.x.x`
-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:
+After moving files in, it should look like this:
```
-rw-r--r--@ 1 fe-work staff 180M 9 20 10:16
apache-seata-2.2.0-incubating-bin.tar.gz
@@ -293,60 +262,122 @@ After executing the above commands, the structure should
look approximately like
-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.
+Ensure the KEYS file in the parent seata directory has been updated with your
public key as mentioned in step 1.
-Run the following commands:
+Execute:
-```
-svn add x.x.x
-svn commit -m "submit x.x.x version"
-```
+`svn add x.x.x`
-If you updated the KEYS file, you need to run `svn update KEYS` before
committing.
+`svn commit -m "submit x.x.x version" `
-After executing the commit, you will be prompted to enter your Apache LDAP
username and password. Enter them to successfully submit the changes.
+If you've updated the KEYS file, execute `svn update KEYS` before committing.
+
+After the commit command, you'll be prompted to enter your Apache LDAP
username and password. Once entered, the submission will be successful:
```
➜ 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 (bin) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz
+Adding (bin) 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 (bin) 2.2.0/apache-seata-2.2.0-incubating-src.zip
+Adding (bin) 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...
+Transmitting file data......done
+Reading transaction
Committed revision 71769.
```
-#### 2.3 Creating Tag and Release Note
+#### 3) Create tag and release note
+
+##### a. Create tag
+
+In the x.x.x branch, execute:
+
+`git tag vx.x.x -m 'release: release for x.x.x'`
-##### 2.3.1 Creating a Tag
+`git push upstream(seata repository repo) vx.x.x`
-Execute the following command in the x.x.x branch:
+##### b. Create release note
+
+Create a release note through [New release · apache/incubator-seata
(github.com)](https://github.com/apache/incubator-seata/releases/new) and set
"Choose a tag" to the corresponding tag.
+
+Mark it as "Set as a pre-release". After the overall vote passes, set it as
"Set as the latest release".
+
+
+
+### 2.3 Verify Release Candidates
+
+A full check list can be found
[here](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+First, download the Release Candidate to your local environment from the
following address:
```
-Copy Codegit tag vx.x.x -m 'release: release for x.x.x'
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
```
-Then push the tag to the upstream (seata repository):
+Then, proceed to the validation phase, which includes but is not limited to
the following items and formats:
+#### Check information such as signatures and hashes
+
+##### Verify the SHA-512 hash
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
```
-Copy Codegit push upstream vx.x.x
-```
+#### Check the GPG signature
+
+If this is your first time verifying, you will need to import the public key
first.
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # Download
the public key to your local machine
+ $ gpg --import KEYS # Import the public keys
+ $ gpg --edit-key xxx # Replace 'xxx' with your Apache ID
+ > trust # Type the 'trust' command to trust user xxx
+ ```
+Then, use the following command to verify the signature
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### Verify the contents of the source package
+
+Extract the archive`apache-seata-${release_version}-incubating-src.tar.gz`,
and perform the following checks:
-##### 2.3.2 Creating a Release Note
+- Directory with 'incubating' in name
+ `apache-seata-${release_version}-incubating-src`
+- DISCLAIMER exists
+- LICENSE and NOTICE exists and contents are good
+- All files and no binary files exist
+- All files has standard ASF License header
+- Can compile from source
+- All unit tests can pass
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- Release candidates match with corresponding tags, you can find tag link and
hash in vote email.
+ - check the version number in pom.xml are the same
+ - check there are no extra files or directories in the source package, for
example, no empty directories or useless log files.Pay special attention to
line break consistency, which can be checked using the command:`diff -r rc_dir
tag_dir`
+ - check the top n tag commits, dive into the related files and check if the
source package has the same changes
-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.
+#### Verify the contents of the binary package
-Set it as "Set as a pre-release." After the overall vote passes, change it to
"Set as the latest release."
+Extract the archive`apache-seata-${release_version}-incubating-bin.tar.gz`,
and perform the following checks:
-# 3. Voting Phase
+* Check signatures are good
+* 'incubating' in name
+* LICENSE and NOTICE exists and contents are good
-## 3.1 Internal Community Voting
+Note: If the binary package includes third-party dependencies, it is necessary
to update the LICENSE file by adding the licenses of those third-party
dependencies. If a third-party dependency is licensed under Apache 2.0 and its
project includes a NOTICE file, the NOTICE file must also be updated
accordingly.
+Additionally, if a dependency is dual/multiple licensed, you only need to
include the most permissive one. You may refer to this article: [ASF
Third-Party License Policy](https://apache.org/legal/resolved.html)
-**Voting lasts at least 72 hours and requires 3 +1 binding votes.**
+### 2.4 Voting Stage
+
+#### 1) Community Internal Voting
+
+**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
Send to:
@@ -354,18 +385,18 @@ Send to:
[email protected]
```
-Title:
+Subject:
-```
-[VOTE] Release Apache Seata (Incubating) x.x.x-RCN (RoundN)
-```
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN)`
+
+Where N in RoundN represents the number of attempts. If a vote doesn't pass
and the version is modified for a new vote, N should be incremented (e.g., if
Round1 doesn't pass, the next vote would be Round2).
-In this context, "N" in RC N and Round N represents the number of times the
voting has occurred for that version.
+Body:
```
Hi Seata Community,
-This is a call for vote to release Apache Seata(incubating) v2.2.0-rc1.
+This is a call for vote to release Apache Seata(incubating) vx.x.x.
The release candidates:
https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
@@ -377,14 +408,14 @@ Git tag for the release:
https://github.com/apache/incubator-seata/releases/tag/vx.x.x
Hash for the release tag:
-lasr commit id
+ID of the last commit on the tag branch
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] ]
+[ email like [email protected] ]
which can be found in the keys file:
https://downloads.apache.org/incubator/seata/KEYS
@@ -392,7 +423,7 @@ Build Environment: JDK 8+, Apache Maven 3.6.0+.
/mvnw clean package -DskipTests=true
CI Test Workflow:
-last commit ci:
+CI pipeline links for the last commit of this version, such as:
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
@@ -418,15 +449,15 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-### 3.1.2 Completing the Vote
+#### 2) Complete the vote
-Send the release vote approval via email.
+Send a vote passed email:
```
Hi Community,
-The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+The vote to release Apache Seata (Incubating) vx.x.x has passed
with 3 +1 binding votes, and no +0 or -1 votes.
3 (+1 binding)
@@ -441,6 +472,7 @@ no further 0 or -1 votes.
The vote thread:
+The link to the corresponding vote email thread, e.g.:
https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
Thank you for reviewing and voting for our release candidate.
@@ -448,33 +480,34 @@ Thank you for reviewing and voting for our release
candidate.
We will soon launch the second stage of voting.
```
+#### 3) Voting in the Incubator
-
-#### 3.2.1 Voting in the Incubator
-
-Similar to community voting, but it is necessary to include the relevant
thread links from the community vote to demonstrate that consensus has been
reached within the community.
+Similar to community voting, but you need to add links to the community vote
thread to prove consensus was reached within the community.
Send an email to `[email protected]`
Subject:
-`[VOTE] Release Apache Seata (Incubating) x.x.x-RCN`
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN)`
-The vote will last for at least 72 hours and must receive 3 +1 binding votes.
+**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
```
Hello everyone,
-This is a call for vote to release Apache Seata(incubating)
+This is a call for vote to release Apache Seata(incubating) vx.x.x
The Apache Seata community has voted and approved the release of Apache
-Seata(incubating) v2.2.0. We now kindly request the IPMC members
+Seata(incubating) vx.x.x. We now kindly request the IPMC members
review and vote for this release.
+
The vote thread:
+Community vote thread link, e.g.:
https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
Vote Result:
+Community vote result thread link, e.g.:
https://lists.apache.org/thread/ybo9c5hrx2h2glg2bdgs3t22xg734y7r
The release candidates:
@@ -487,14 +520,14 @@ Git tag for the release:
https://github.com/apache/incubator-seata/releases/tag/vx.x.x
Hash for the release tag:
-last commit id
+ID of the last commit on the tag branch
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] ]
+[ email like [email protected] ]
which can be found in the keys file:
https://downloads.apache.org/incubator/seata/KEYS
@@ -502,7 +535,7 @@ Build Environment: JDK 8+, Apache Maven 3.6.0+.
/mvnw clean package -DskipTests=true
CI Test Workflow:
-last commit ci:
+CI pipeline links for the last commit of this version, such as:
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
@@ -527,18 +560,18 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-### 3.2.2 Announcement of Incubator Vote Results
+#### 4) Announce the Incubator vote result
-After 72 hours, if there are at least 3 votes in favor and no opposing votes,
send the results following the email template below.
+After 72 hours, if there are at least 3 passing votes and no opposing votes,
send an email as follows:
Send an email to `[email protected]`
-Subject: `[RESULT][VOTE] Release Apache Seata (Incubating) x.x.x-RCN`
+Subject: `[RESULT][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
```
Hi Incubator PMC,
-The vote to release Apache Seata(incubating) X.X.X-RCN has passed with
+The vote to release Apache Seata(incubating) X.X.X has passed with
3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes.
Binding votes:
@@ -560,29 +593,42 @@ announcement soon.
```
+#### 5) Vote Interruption
+If issues are found during the voting process, such as license problems or
bugs that need to be fixed before release, the vote must be interrupted.
-# 4. Completing the Release
+Subject: `[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
-### 4.1 Release Version
+```
+Hi Incubator PMC,
+I'm cancelling this vote:
+Link to the previous vote
-1. From the Apache Nexus repository, select the previously closed
orgapache-seata-XXX and click the Release icon to publish.
+Describe the reason for cancellation: such as missing licenses, or bugs in the
version
+
+```
-2. Move the signature files, src, and bin from the dev directory to the
release path using the following command:
+Note: After cancelling a vote in the Incubator, a new vote must start again
from within the community.
- ```
- svn mv
https://dist.apache.org/repos/dist/dev/incubator/seata/incubator-seata/x.x.x-RCN
https://dist.apache.org/repos/dist/release/incubator/seata/x.x.x -m "Release
Seata X.X.X"
- ```
+### 2.5 Complete the Release
-3. Set the previous release note as "Set as the latest release" and submit it.
+#### 1) Release the Version
-4. Update the documentation for x.x.x on the Seata official website, including
the download links for the corresponding binary and source.
+1. From Apache Nexus repository, select the previously closed
**orgapacheseata-XXX** and click the `Release` icon to publish.
-### 4.2 Version Announcement
+2. Move the signature files, src, and bin from the dev path to the release
path using the following command:
-Send an email to` [email protected]`
+ `svn mv
https://dist.apache.org/repos/dist/dev/incubator/seata/incubator-seata/x.x.x-RCN
https://dist.apache.org/repos/dist/release/incubator/seata/x.x.x -m "Release
Seata X.X.X"`
-Subject: `[ANNOUNCE] Apache Seata (Incubating) vx.x.x available`
+3. Set the previous release note to "Set as the latest release" and submit.
+
+4. Update the documentation for version x.x.x on the Seata official website,
and add download links for the binary and source packages.
+
+#### 2) Announce the Release
+
+Send an email to `[email protected]`
+
+Subject: `[ANNOUNCE] Apache Seata(Incubating) vx.x.x available`
```
Hi All,
@@ -602,3 +648,11 @@ Resources:
- Issue: https://github.com/apache/incubator-seata/issues
- Mailing list: [email protected]
```
+
+#### 3) Archiving Old Versions
+After releasing a new version, the previous version must be archived to ensure
that only the latest version of the same maintenance branch is retained in the
[download](https://downloads.apache.org/incubator/seata/) directory. Archived
versions are automatically synchronized to the
[archive](https://archive.apache.org/dist/incubator/seata/) when a new release
is published. Therefore, it is sufficient to delete older versions from the
[download](https://downloads.apache.org/incubator/seat [...]
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/en/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
b/i18n/en/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
index 2b69e20f103..4a5a1ca9f38 100644
---
a/i18n/en/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/en/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
@@ -8,52 +8,52 @@ description: Release Guide.
## 1. Introduction
-#### 1.1 Apache Version Release Documentation
+### 1.1 Apache Seata™ (incubating) Release Documentation
-Refer to the following link to understand the ASF release process:
+Refer to the following links 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
+### 1.2 PGP Signatures
-Follow the Apache release guidelines to sign the release version, allowing
users to verify whether the downloaded version has been tampered with.
+Following the Apache Release Guidelines, release versions must be signed,
allowing users to verify if downloaded versions have been tampered with.
-Create a `pgp` key for version signing, using **\<your Apache ID>@apache.org**
as the key USER-ID.
+Create a `pgp` key for signing releases, 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).
+For details, refer to [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)
+Brief process for generating keys:
-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 bits
-- 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 set a specific expiration
time. If you set an expiration time, you'll need to update your public key in
the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/incubator/seata/KEYS) and [RELEASE
KEYS file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS)
after renewal.
- 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/dev/incubator/seata/KEYS) and the
[RELEASE KEYS
file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS).
+- Upload the key to the public key server using `gpg --keyserver
keys.openpgp.org --send-key <your key id>`
-- Upload the key to a public key server using `gpg --keyserver
keys.openpgp.org --send-key <your key id>`.
+ Note: If you can't access this server, you can upload your public key
online via [OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
- Note: If the access fails, you can upload the public key online via the
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/).
+ ```
+ Use this command to find your keyid: gpg --list-signatures --keyid-format
LONG
+ pub rsa4096/XXXXXXXX 2024-09-19 [SC] [expires: 2027-09-19]
+ F2D3A28A392129B927C7FB42XXXXXXXX
+ uid [ultimate] xxxx <[email protected]>
+ sig 3 XXXXXXXX 2024-09-19 [self-signature]
+ sub rsa4096/XXXXX 2024-09-19 [E] [expires: 2027-09-19]
+ sig XXXXXXXX 2024-09-19 [self-signature]
+ The keyid is XXXXXXXX
+ ```
-```
-You can find the key ID using the command: gpg --list-signatures
--keyid-format LONG
-pub rsa4096/XXXX 2024-09-19 [SC] [expires: 2027-09-19]
- F2D3A28A392129B927C7FB42XXXX
-uid [ultimate] XXXX <[email protected]>
-sig 3 XXXX 2024-09-19 [self-signed]
-sub rsa4096/XXXXXXX 2024-09-19 [E] [expires: 2027-09-19]
-sig XXXX 2024-09-19 [self-signed]
-The key ID is XXXX.
-```
+- Export your public key to a text file using `gpg --armor --output
./public-key.txt --export XXXXXXXX`
+
+- Append your generated key to the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/incubator/seata/KEYS) and [RELEASE
KEYS file](https://dist.apache.org/repos/dist/release/incubator/seata/KEYS)
-- Export the public key to a text file using the command: `gpg --armor
--output ./public-key.txt --export XXXX`.
-- Append the generated key to the [DEV KEYS
file](https://dist.apache.org/repos/dist/dev/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.
+The Release Manager can add keys to the DEV SVN repository themselves, but
adding to the Release SVN repository requires PMC permissions. PMC members can
help upload the keys.
-**Tips:** You need to set the default public key. If you have multiple public
keys, please modify `~/.gnupg/gpg.conf`.
+**Tips:** You should set a default public key. If you have multiple keys,
modify `~/.gnupg/gpg.conf`.
Reference example:
@@ -63,47 +63,42 @@ 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)
+ (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
+ 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)
-
+Real name: (Set user name) (Use Apache ID)
+Email address: (Set email address) (Use Apache email)
+Comment: (Add comments)
You selected this USER-ID:
-
-"Username (comment) <email address>"
+ "User Name (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:
+Convert the generated public and private keys to ASCII format:
```
-gpg --armor --output ./public-key.txt --export XXXX
-gpg --armor --output ./private-key.txt --export-secret-keys XXXX
+gpg --armor --output ./public-key.txt --export XXXXXXXX
+gpg --armor --output ./private-key.txt --export-secret-keys XXXXXXXX
```
@@ -113,176 +108,150 @@ View the key list:
[root@localhost ~]# gpg --list-signatures --keyid-format LONG
[keyboxd]
---------
-pub rsa4096/XXXX 2024-09-19 [SC] [有效至:2027-09-19]
- F2D3A28A392129B927C7FB42XXXX
-uid [ 绝对 ] XXXX <[email protected]>
-sig 3 XXXX 2024-09-19 [自签名]
-sub rsa4096/XXXXXXX 2024-09-19 [E] [有效至:2027-09-19]
-sig XXXX 2024-09-19 [自签名]
+pub rsa4096/XXXXXXXX 2024-09-19 [SC] [expires: 2027-09-19]
+ F2D3A28A392129B927C7FB42XXXXXXXX
+uid [ultimate] xxxx <[email protected]>
+sig 3 XXXXXXXX 2024-09-19 [self-signature]
+sub rsa4096/XXXXX 2024-09-19 [E] [expires: 2027-09-19]
+sig XXXXXXXX 2024-09-19 [self-signature]
```
-Upload the public key to the key server
+Upload the public key to the key server:
```
-[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key XXXX
-gpg: sending key XXXX to hkp server keys.openpgp.org
+[root@localhost gpgtest]# gpg --keyserver keys.openpgp.org --send-key XXXXXXXX
+gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM Configuration
+### 1.3 POM Configuration
-Configure the POM file to deploy the version to the ASF Nexus repository.
+Configure the POM file to deploy versions to the ASF Nexus repository.
-① Add Apache POM inheritance for default settings.
+① Add Apache POM inheritance for default settings:
```
<parent>
- <groupId>org.apache</groupId>
- <artifactId>apache</artifactId>
- <version>XX</version>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>XX</version>
</parent>
```
-② Add key information to the Maven configuration file `settings.xml`.
+② Add key information in 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>
+ <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`.
+**Tips:** It's 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
+#### 1.4 Publishing 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).
+Build Release Notes for the respective version through 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.
+### 2.1 Preparing the 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`.
+Create a new branch from the main branch as the release branch. For instance,
if you're releasing version `${release_version}`, create a new branch
`${release_version}` from the development branch. All changes, tags, and fixes
related to the `${release_version}` Release Candidates should be made on this
branch. Ensure all GitHub Actions CI tests pass on this branch. After the
release is completed, merge it back into the main branch.
-### 2. Pre-release Binary Package
+Example: To release Java SDK version `2.2.0`, create a new branch `2.2.0` from
the `2.x` branch, and commit changes to replace the Snapshot version number
with the `2.2.0` version number on this branch.
-#### 2.1 SDK Preparation for Release
+### 2.2 Pre-Release Binary Packages
-Prepare the release according to the instructions in [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4].
+#### 1) Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
```
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.
+At this point, the Seata SDK is published to the [staging
repository](https://repository.apache.org/#stagingRepositories) (requires
Apache account login). 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/).
+Note: If closing fails, it's likely because the public key corresponding to
your signing key is not available on keys.openpgp.org. Please verify through
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
-#### 2.2 Submit Source & Binary to SVN Repository
+#### 2) Submit Source & Binary to SVN Repository
-##### 2.2.1 Install SVN
+##### a. Install SVN
-Download and install from [Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
+Download and install [Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
-Alternatively, you can quickly install it using `brew install subversion`.
+Or install via `brew install subversion`
-##### 2.2.2 Compile seata-server and seata-namingserver
+##### b. Compile seata-server and seata-namingserver
-Run the following command:
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-```
-mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U
-```
+##### c. Sign Source and Binary packages
-##### 2.2.3 Sign the Source and Binary
+For the Source package, it's recommended to download the zip directly from the
corresponding version branch on GitHub (e.g., 2.2.0) to avoid local environment
contamination, then rename it to apache-seata-x.x.x-incubating-src.zip
-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`.
+`shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >>
apache-seata-x.x.x-incubating-src.zip.sha512 `
-Run the following command to generate a SHA-512 checksum:
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.zip.asc
apache-seata-x.x.x-incubating-bin.zip`
-```
-shasum -b -a 512 apache-seata-x.x.x-incubating-src.zip >>
apache-seata-x.x.x-incubating-src.zip.sha512
-```
+For the Binary package:
-Sign the 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.zip.asc
apache-seata-x.x.x-incubating-bin.zip
-```
+`gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc
apache-seata-x.x.x-incubating-bin.tar.gz`
-For the Binary, generate a SHA-512 checksum:
+Verify SHA512:
-```
-shasum -b -a 512 apache-seata-x.x.x-incubating-bin.tar.gz >>
apache-seata-x.x.x-incubating-bin.tar.gz.sha512
-```
+`shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512`
-Sign the Binary:
+Verify ASC:
-```
-gpg --armor --output apache-seata-x.x.x-incubating-bin.tar.gz.asc
apache-seata-x.x.x-incubating-bin.tar.gz
-```
+`gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip`
-Verify the SHA-512 checksum:
+##### d. Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
-```
-shasum -c apache-seata-x.x.x-incubating-bin.tar.gz.sha512
-```
+Pull SVN directory:
-Verify the signature:
+`svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/`
-```
-gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip
-```
+Create release version path (in the dev path, folders must include "RC" to
indicate they are in a preparatory state), and move files into it:
-##### 2.2.4 Check Out SVN Locally, Create Release Version Path, and Move
Signature Files, Source, and Binary into It
+`cd seata`
-Check out the SVN directory:
+`mkdir x.x.xRCN`
-```
-svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/
-```
+`mv ….. x.x.x`
-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:
+After moving files in, it should look like this:
```
-rw-r--r--@ 1 fe-work staff 180M 9 20 10:16
apache-seata-2.2.0-incubating-bin.tar.gz
@@ -293,60 +262,122 @@ After executing the above commands, the structure should
look approximately like
-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.
+Ensure the KEYS file in the parent seata directory has been updated with your
public key as mentioned in step 1.
-Run the following commands:
+Execute:
-```
-svn add x.x.x
-svn commit -m "submit x.x.x version"
-```
+`svn add x.x.x`
-If you updated the KEYS file, you need to run `svn update KEYS` before
committing.
+`svn commit -m "submit x.x.x version" `
-After executing the commit, you will be prompted to enter your Apache LDAP
username and password. Enter them to successfully submit the changes.
+If you've updated the KEYS file, execute `svn update KEYS` before committing.
+
+After the commit command, you'll be prompted to enter your Apache LDAP
username and password. Once entered, the submission will be successful:
```
➜ 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 (bin) 2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz
+Adding (bin) 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 (bin) 2.2.0/apache-seata-2.2.0-incubating-src.zip
+Adding (bin) 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...
+Transmitting file data......done
+Reading transaction
Committed revision 71769.
```
-#### 2.3 Creating Tag and Release Note
+#### 3) Create tag and release note
+
+##### a. Create tag
+
+In the x.x.x branch, execute:
+
+`git tag vx.x.x -m 'release: release for x.x.x'`
-##### 2.3.1 Creating a Tag
+`git push upstream(seata repository repo) vx.x.x`
-Execute the following command in the x.x.x branch:
+##### b. Create release note
+
+Create a release note through [New release · apache/incubator-seata
(github.com)](https://github.com/apache/incubator-seata/releases/new) and set
"Choose a tag" to the corresponding tag.
+
+Mark it as "Set as a pre-release". After the overall vote passes, set it as
"Set as the latest release".
+
+
+
+### 2.3 Verify Release Candidates
+
+A full check list can be found
[here](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+First, download the Release Candidate to your local environment from the
following address:
```
-Copy Codegit tag vx.x.x -m 'release: release for x.x.x'
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
```
-Then push the tag to the upstream (seata repository):
+Then, proceed to the validation phase, which includes but is not limited to
the following items and formats:
+#### Check information such as signatures and hashes
+
+##### Verify the SHA-512 hash
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
```
-Copy Codegit push upstream vx.x.x
-```
+#### Check the GPG signature
+
+If this is your first time verifying, you will need to import the public key
first.
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # Download
the public key to your local machine
+ $ gpg --import KEYS # Import the public keys
+ $ gpg --edit-key xxx # Replace 'xxx' with your Apache ID
+ > trust # Type the 'trust' command to trust user xxx
+ ```
+Then, use the following command to verify the signature
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### Verify the contents of the source package
+
+Extract the archive`apache-seata-${release_version}-incubating-src.tar.gz`,
and perform the following checks:
-##### 2.3.2 Creating a Release Note
+- Directory with 'incubating' in name
+ `apache-seata-${release_version}-incubating-src`
+- DISCLAIMER exists
+- LICENSE and NOTICE exists and contents are good
+- All files and no binary files exist
+- All files has standard ASF License header
+- Can compile from source
+- All unit tests can pass
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- Release candidates match with corresponding tags, you can find tag link and
hash in vote email.
+ - check the version number in pom.xml are the same
+ - check there are no extra files or directories in the source package, for
example, no empty directories or useless log files.Pay special attention to
line break consistency, which can be checked using the command:`diff -r rc_dir
tag_dir`
+ - check the top n tag commits, dive into the related files and check if the
source package has the same changes
-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.
+#### Verify the contents of the binary package
-Set it as "Set as a pre-release." After the overall vote passes, change it to
"Set as the latest release."
+Extract the archive`apache-seata-${release_version}-incubating-bin.tar.gz`,
and perform the following checks:
-# 3. Voting Phase
+* Check signatures are good
+* 'incubating' in name
+* LICENSE and NOTICE exists and contents are good
-## 3.1 Internal Community Voting
+Note: If the binary package includes third-party dependencies, it is necessary
to update the LICENSE file by adding the licenses of those third-party
dependencies. If a third-party dependency is licensed under Apache 2.0 and its
project includes a NOTICE file, the NOTICE file must also be updated
accordingly.
+Additionally, if a dependency is dual/multiple licensed, you only need to
include the most permissive one. You may refer to this article: [ASF
Third-Party License Policy](https://apache.org/legal/resolved.html)
-**Voting lasts at least 72 hours and requires 3 +1 binding votes.**
+### 2.4 Voting Stage
+
+#### 1) Community Internal Voting
+
+**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
Send to:
@@ -354,18 +385,18 @@ Send to:
[email protected]
```
-Title:
+Subject:
-```
-[VOTE] Release Apache Seata (Incubating) x.x.x-RCN (RoundN)
-```
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN)`
+
+Where N in RoundN represents the number of attempts. If a vote doesn't pass
and the version is modified for a new vote, N should be incremented (e.g., if
Round1 doesn't pass, the next vote would be Round2).
-In this context, "N" in RC N and Round N represents the number of times the
voting has occurred for that version.
+Body:
```
Hi Seata Community,
-This is a call for vote to release Apache Seata(incubating) v2.2.0-rc1.
+This is a call for vote to release Apache Seata(incubating) vx.x.x.
The release candidates:
https://dist.apache.org/repos/dist/dev/incubator/seata/x.x.x/
@@ -377,14 +408,14 @@ Git tag for the release:
https://github.com/apache/incubator-seata/releases/tag/vx.x.x
Hash for the release tag:
-lasr commit id
+ID of the last commit on the tag branch
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] ]
+[ email like [email protected] ]
which can be found in the keys file:
https://downloads.apache.org/incubator/seata/KEYS
@@ -392,7 +423,7 @@ Build Environment: JDK 8+, Apache Maven 3.6.0+.
/mvnw clean package -DskipTests=true
CI Test Workflow:
-last commit ci:
+CI pipeline links for the last commit of this version, such as:
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
@@ -418,15 +449,15 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-### 3.1.2 Completing the Vote
+#### 2) Complete the vote
-Send the release vote approval via email.
+Send a vote passed email:
```
Hi Community,
-The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+The vote to release Apache Seata (Incubating) vx.x.x has passed
with 3 +1 binding votes, and no +0 or -1 votes.
3 (+1 binding)
@@ -441,6 +472,7 @@ no further 0 or -1 votes.
The vote thread:
+The link to the corresponding vote email thread, e.g.:
https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
Thank you for reviewing and voting for our release candidate.
@@ -448,33 +480,34 @@ Thank you for reviewing and voting for our release
candidate.
We will soon launch the second stage of voting.
```
+#### 3) Voting in the Incubator
-
-#### 3.2.1 Voting in the Incubator
-
-Similar to community voting, but it is necessary to include the relevant
thread links from the community vote to demonstrate that consensus has been
reached within the community.
+Similar to community voting, but you need to add links to the community vote
thread to prove consensus was reached within the community.
Send an email to `[email protected]`
Subject:
-`[VOTE] Release Apache Seata (Incubating) x.x.x-RCN`
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN)`
-The vote will last for at least 72 hours and must receive 3 +1 binding votes.
+**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
```
Hello everyone,
-This is a call for vote to release Apache Seata(incubating)
+This is a call for vote to release Apache Seata(incubating) vx.x.x
The Apache Seata community has voted and approved the release of Apache
-Seata(incubating) v2.2.0. We now kindly request the IPMC members
+Seata(incubating) vx.x.x. We now kindly request the IPMC members
review and vote for this release.
+
The vote thread:
+Community vote thread link, e.g.:
https://lists.apache.org/thread/rwco6lms9qo10whjj8gg1dr8j7drl2gf
Vote Result:
+Community vote result thread link, e.g.:
https://lists.apache.org/thread/ybo9c5hrx2h2glg2bdgs3t22xg734y7r
The release candidates:
@@ -487,14 +520,14 @@ Git tag for the release:
https://github.com/apache/incubator-seata/releases/tag/vx.x.x
Hash for the release tag:
-last commit id
+ID of the last commit on the tag branch
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] ]
+[ email like [email protected] ]
which can be found in the keys file:
https://downloads.apache.org/incubator/seata/KEYS
@@ -502,7 +535,7 @@ Build Environment: JDK 8+, Apache Maven 3.6.0+.
/mvnw clean package -DskipTests=true
CI Test Workflow:
-last commit ci:
+CI pipeline links for the last commit of this version, such as:
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
@@ -527,18 +560,18 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-### 3.2.2 Announcement of Incubator Vote Results
+#### 4) Announce the Incubator vote result
-After 72 hours, if there are at least 3 votes in favor and no opposing votes,
send the results following the email template below.
+After 72 hours, if there are at least 3 passing votes and no opposing votes,
send an email as follows:
Send an email to `[email protected]`
-Subject: `[RESULT][VOTE] Release Apache Seata (Incubating) x.x.x-RCN`
+Subject: `[RESULT][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
```
Hi Incubator PMC,
-The vote to release Apache Seata(incubating) X.X.X-RCN has passed with
+The vote to release Apache Seata(incubating) X.X.X has passed with
3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes.
Binding votes:
@@ -560,29 +593,42 @@ announcement soon.
```
+#### 5) Vote Interruption
+If issues are found during the voting process, such as license problems or
bugs that need to be fixed before release, the vote must be interrupted.
-# 4. Completing the Release
+Subject: `[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
-### 4.1 Release Version
+```
+Hi Incubator PMC,
+I'm cancelling this vote:
+Link to the previous vote
-1. From the Apache Nexus repository, select the previously closed
orgapache-seata-XXX and click the Release icon to publish.
+Describe the reason for cancellation: such as missing licenses, or bugs in the
version
+
+```
-2. Move the signature files, src, and bin from the dev directory to the
release path using the following command:
+Note: After cancelling a vote in the Incubator, a new vote must start again
from within the community.
- ```
- svn mv
https://dist.apache.org/repos/dist/dev/incubator/seata/incubator-seata/x.x.x-RCN
https://dist.apache.org/repos/dist/release/incubator/seata/x.x.x -m "Release
Seata X.X.X"
- ```
+### 2.5 Complete the Release
-3. Set the previous release note as "Set as the latest release" and submit it.
+#### 1) Release the Version
-4. Update the documentation for x.x.x on the Seata official website, including
the download links for the corresponding binary and source.
+1. From Apache Nexus repository, select the previously closed
**orgapacheseata-XXX** and click the `Release` icon to publish.
-### 4.2 Version Announcement
+2. Move the signature files, src, and bin from the dev path to the release
path using the following command:
-Send an email to` [email protected]`
+ `svn mv
https://dist.apache.org/repos/dist/dev/incubator/seata/incubator-seata/x.x.x-RCN
https://dist.apache.org/repos/dist/release/incubator/seata/x.x.x -m "Release
Seata X.X.X"`
-Subject: `[ANNOUNCE] Apache Seata (Incubating) vx.x.x available`
+3. Set the previous release note to "Set as the latest release" and submit.
+
+4. Update the documentation for version x.x.x on the Seata official website,
and add download links for the binary and source packages.
+
+#### 2) Announce the Release
+
+Send an email to `[email protected]`
+
+Subject: `[ANNOUNCE] Apache Seata(Incubating) vx.x.x available`
```
Hi All,
@@ -602,3 +648,11 @@ Resources:
- Issue: https://github.com/apache/incubator-seata/issues
- Mailing list: [email protected]
```
+
+#### 3) Archiving Old Versions
+After releasing a new version, the previous version must be archived to ensure
that only the latest version of the same maintenance branch is retained in the
[download](https://downloads.apache.org/incubator/seata/) directory. Archived
versions are automatically synchronized to the
[archive](https://archive.apache.org/dist/incubator/seata/) when a new release
is published. Therefore, it is sufficient to delete older versions from the
[download](https://downloads.apache.org/incubator/seat [...]
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/en/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
b/i18n/en/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
index 0aaae7f0f60..4a5a1ca9f38 100644
---
a/i18n/en/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/en/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
@@ -8,7 +8,7 @@ description: Release Guide.
## 1. Introduction
-#### 1.1 Apache Seata™ (incubating) Release Documentation
+### 1.1 Apache Seata™ (incubating) Release Documentation
Refer to the following links to understand the ASF release process:
@@ -16,7 +16,7 @@ Refer to the following links to understand the ASF release
process:
- [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 Signatures
+### 1.2 PGP Signatures
Following the Apache Release Guidelines, release versions must be signed,
allowing users to verify if downloaded versions have been tampered with.
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM Configuration
+### 1.3 POM Configuration
Configure the POM file to deploy versions to the ASF Nexus repository.
@@ -179,21 +179,21 @@ Configure the POM file to deploy versions to the ASF
Nexus repository.
**Tips:** It's recommended to use [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) to
encrypt `gpg.passphrase`
-#### 1.5 Publishing Release Notes
+#### 1.4 Publishing Release Notes
Build Release Notes for the respective version through the
[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md).
## 2. Release Process
-### 1. Preparing the Branch
+### 2.1 Preparing the Branch
Create a new branch from the main branch as the release branch. For instance,
if you're releasing version `${release_version}`, create a new branch
`${release_version}` from the development branch. All changes, tags, and fixes
related to the `${release_version}` Release Candidates should be made on this
branch. Ensure all GitHub Actions CI tests pass on this branch. After the
release is completed, merge it back into the main branch.
Example: To release Java SDK version `2.2.0`, create a new branch `2.2.0` from
the `2.x` branch, and commit changes to replace the Snapshot version number
with the `2.2.0` version number on this branch.
-### 2. Pre-Release Binary Packages
+### 2.2 Pre-Release Binary Packages
-#### 2.1 Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
+#### 1) Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
```
mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
@@ -203,19 +203,19 @@ At this point, the Seata SDK is published to the [staging
repository](https://re
Note: If closing fails, it's likely because the public key corresponding to
your signing key is not available on keys.openpgp.org. Please verify through
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
-#### 2.2 Submit Source & Binary to SVN Repository
+#### 2) Submit Source & Binary to SVN Repository
-##### 2.2.1 Install SVN
+##### a. Install SVN
Download and install [Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
Or install via `brew install subversion`
-##### 2.2.2 Compile seata-server and seata-namingserver
+##### b. Compile seata-server and seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 Sign Source and Binary packages
+##### c. Sign Source and Binary packages
For the Source package, it's recommended to download the zip directly from the
corresponding version branch on GitHub (e.g., 2.2.0) to avoid local environment
contamination, then rename it to apache-seata-x.x.x-incubating-src.zip
@@ -237,7 +237,7 @@ Verify ASC:
`gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip`
-##### 2.2.4 Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
+##### d. Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
Pull SVN directory:
@@ -288,9 +288,9 @@ Reading transaction
Committed revision 71769.
```
-#### 2.3 Create tag and release note
+#### 3) Create tag and release note
-##### 2.3.1 Create tag
+##### a. Create tag
In the x.x.x branch, execute:
@@ -298,15 +298,84 @@ In the x.x.x branch, execute:
`git push upstream(seata repository repo) vx.x.x`
-##### 2.3.2 Create release note
+##### b. Create release note
Create a release note through [New release · apache/incubator-seata
(github.com)](https://github.com/apache/incubator-seata/releases/new) and set
"Choose a tag" to the corresponding tag.
Mark it as "Set as a pre-release". After the overall vote passes, set it as
"Set as the latest release".
-### 3. Voting Stage
-#### 3.1 Community Internal Voting
+
+### 2.3 Verify Release Candidates
+
+A full check list can be found
[here](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+First, download the Release Candidate to your local environment from the
following address:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+Then, proceed to the validation phase, which includes but is not limited to
the following items and formats:
+
+#### Check information such as signatures and hashes
+
+##### Verify the SHA-512 hash
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+#### Check the GPG signature
+
+If this is your first time verifying, you will need to import the public key
first.
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # Download
the public key to your local machine
+ $ gpg --import KEYS # Import the public keys
+ $ gpg --edit-key xxx # Replace 'xxx' with your Apache ID
+ > trust # Type the 'trust' command to trust user xxx
+ ```
+Then, use the following command to verify the signature
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### Verify the contents of the source package
+
+Extract the archive`apache-seata-${release_version}-incubating-src.tar.gz`,
and perform the following checks:
+
+- Directory with 'incubating' in name
+ `apache-seata-${release_version}-incubating-src`
+- DISCLAIMER exists
+- LICENSE and NOTICE exists and contents are good
+- All files and no binary files exist
+- All files has standard ASF License header
+- Can compile from source
+- All unit tests can pass
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- Release candidates match with corresponding tags, you can find tag link and
hash in vote email.
+ - check the version number in pom.xml are the same
+ - check there are no extra files or directories in the source package, for
example, no empty directories or useless log files.Pay special attention to
line break consistency, which can be checked using the command:`diff -r rc_dir
tag_dir`
+ - check the top n tag commits, dive into the related files and check if the
source package has the same changes
+
+#### Verify the contents of the binary package
+
+Extract the archive`apache-seata-${release_version}-incubating-bin.tar.gz`,
and perform the following checks:
+
+* Check signatures are good
+* 'incubating' in name
+* LICENSE and NOTICE exists and contents are good
+
+Note: If the binary package includes third-party dependencies, it is necessary
to update the LICENSE file by adding the licenses of those third-party
dependencies. If a third-party dependency is licensed under Apache 2.0 and its
project includes a NOTICE file, the NOTICE file must also be updated
accordingly.
+Additionally, if a dependency is dual/multiple licensed, you only need to
include the most permissive one. You may refer to this article: [ASF
Third-Party License Policy](https://apache.org/legal/resolved.html)
+
+### 2.4 Voting Stage
+
+#### 1) Community Internal Voting
**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
@@ -380,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 Complete the vote
+#### 2) Complete the vote
Send a vote passed email:
@@ -411,7 +480,7 @@ Thank you for reviewing and voting for our release
candidate.
We will soon launch the second stage of voting.
```
-#### 3.2.1 Voting in the Incubator
+#### 3) Voting in the Incubator
Similar to community voting, but you need to add links to the community vote
thread to prove consensus was reached within the community.
@@ -491,7 +560,7 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 Announce the Incubator vote result
+#### 4) Announce the Incubator vote result
After 72 hours, if there are at least 3 passing votes and no opposing votes,
send an email as follows:
@@ -524,7 +593,7 @@ announcement soon.
```
-### 3.2.3 Vote Interruption
+#### 5) Vote Interruption
If issues are found during the voting process, such as license problems or
bugs that need to be fixed before release, the vote must be interrupted.
@@ -541,9 +610,9 @@ Describe the reason for cancellation: such as missing
licenses, or bugs in the v
Note: After cancelling a vote in the Incubator, a new vote must start again
from within the community.
-# 4. Complete the Release
+### 2.5 Complete the Release
-### 4.1 Release the Version
+#### 1) Release the Version
1. From Apache Nexus repository, select the previously closed
**orgapacheseata-XXX** and click the `Release` icon to publish.
@@ -555,7 +624,7 @@ Note: After cancelling a vote in the Incubator, a new vote
must start again from
4. Update the documentation for version x.x.x on the Seata official website,
and add download links for the binary and source packages.
-### 4.2 Announce the Release
+#### 2) Announce the Release
Send an email to `[email protected]`
@@ -579,3 +648,11 @@ Resources:
- Issue: https://github.com/apache/incubator-seata/issues
- Mailing list: [email protected]
```
+
+#### 3) Archiving Old Versions
+After releasing a new version, the previous version must be archived to ensure
that only the latest version of the same maintenance branch is retained in the
[download](https://downloads.apache.org/incubator/seata/) directory. Archived
versions are automatically synchronized to the
[archive](https://archive.apache.org/dist/incubator/seata/) when a new release
is published. Therefore, it is sufficient to delete older versions from the
[download](https://downloads.apache.org/incubator/seat [...]
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/en/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
b/i18n/en/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
index 0aaae7f0f60..4a5a1ca9f38 100644
---
a/i18n/en/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
+++
b/i18n/en/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
@@ -8,7 +8,7 @@ description: Release Guide.
## 1. Introduction
-#### 1.1 Apache Seata™ (incubating) Release Documentation
+### 1.1 Apache Seata™ (incubating) Release Documentation
Refer to the following links to understand the ASF release process:
@@ -16,7 +16,7 @@ Refer to the following links to understand the ASF release
process:
- [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 Signatures
+### 1.2 PGP Signatures
Following the Apache Release Guidelines, release versions must be signed,
allowing users to verify if downloaded versions have been tampered with.
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM Configuration
+### 1.3 POM Configuration
Configure the POM file to deploy versions to the ASF Nexus repository.
@@ -179,21 +179,21 @@ Configure the POM file to deploy versions to the ASF
Nexus repository.
**Tips:** It's recommended to use [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) to
encrypt `gpg.passphrase`
-#### 1.5 Publishing Release Notes
+#### 1.4 Publishing Release Notes
Build Release Notes for the respective version through the
[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md).
## 2. Release Process
-### 1. Preparing the Branch
+### 2.1 Preparing the Branch
Create a new branch from the main branch as the release branch. For instance,
if you're releasing version `${release_version}`, create a new branch
`${release_version}` from the development branch. All changes, tags, and fixes
related to the `${release_version}` Release Candidates should be made on this
branch. Ensure all GitHub Actions CI tests pass on this branch. After the
release is completed, merge it back into the main branch.
Example: To release Java SDK version `2.2.0`, create a new branch `2.2.0` from
the `2.x` branch, and commit changes to replace the Snapshot version number
with the `2.2.0` version number on this branch.
-### 2. Pre-Release Binary Packages
+### 2.2 Pre-Release Binary Packages
-#### 2.1 Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
+#### 1) Prepare the SDK release according to [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
guidelines.
```
mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn
@@ -203,19 +203,19 @@ At this point, the Seata SDK is published to the [staging
repository](https://re
Note: If closing fails, it's likely because the public key corresponding to
your signing key is not available on keys.openpgp.org. Please verify through
[OpenPGP Keyserver (ubuntu.com)](https://keyserver.ubuntu.com/)
-#### 2.2 Submit Source & Binary to SVN Repository
+#### 2) Submit Source & Binary to SVN Repository
-##### 2.2.1 Install SVN
+##### a. Install SVN
Download and install [Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
Or install via `brew install subversion`
-##### 2.2.2 Compile seata-server and seata-namingserver
+##### b. Compile seata-server and seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 Sign Source and Binary packages
+##### c. Sign Source and Binary packages
For the Source package, it's recommended to download the zip directly from the
corresponding version branch on GitHub (e.g., 2.2.0) to avoid local environment
contamination, then rename it to apache-seata-x.x.x-incubating-src.zip
@@ -237,7 +237,7 @@ Verify ASC:
`gpg --verify apache-seata-x.x.x-incubating-src.zip.asc
apache-seata-x.x.x-incubating-src.zip`
-##### 2.2.4 Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
+##### d. Pull SVN locally, create release version path, and move the signed
files and Source/Binary packages into it
Pull SVN directory:
@@ -288,9 +288,9 @@ Reading transaction
Committed revision 71769.
```
-#### 2.3 Create tag and release note
+#### 3) Create tag and release note
-##### 2.3.1 Create tag
+##### a. Create tag
In the x.x.x branch, execute:
@@ -298,15 +298,84 @@ In the x.x.x branch, execute:
`git push upstream(seata repository repo) vx.x.x`
-##### 2.3.2 Create release note
+##### b. Create release note
Create a release note through [New release · apache/incubator-seata
(github.com)](https://github.com/apache/incubator-seata/releases/new) and set
"Choose a tag" to the corresponding tag.
Mark it as "Set as a pre-release". After the overall vote passes, set it as
"Set as the latest release".
-### 3. Voting Stage
-#### 3.1 Community Internal Voting
+
+### 2.3 Verify Release Candidates
+
+A full check list can be found
[here](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+First, download the Release Candidate to your local environment from the
following address:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+Then, proceed to the validation phase, which includes but is not limited to
the following items and formats:
+
+#### Check information such as signatures and hashes
+
+##### Verify the SHA-512 hash
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+#### Check the GPG signature
+
+If this is your first time verifying, you will need to import the public key
first.
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # Download
the public key to your local machine
+ $ gpg --import KEYS # Import the public keys
+ $ gpg --edit-key xxx # Replace 'xxx' with your Apache ID
+ > trust # Type the 'trust' command to trust user xxx
+ ```
+Then, use the following command to verify the signature
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### Verify the contents of the source package
+
+Extract the archive`apache-seata-${release_version}-incubating-src.tar.gz`,
and perform the following checks:
+
+- Directory with 'incubating' in name
+ `apache-seata-${release_version}-incubating-src`
+- DISCLAIMER exists
+- LICENSE and NOTICE exists and contents are good
+- All files and no binary files exist
+- All files has standard ASF License header
+- Can compile from source
+- All unit tests can pass
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- Release candidates match with corresponding tags, you can find tag link and
hash in vote email.
+ - check the version number in pom.xml are the same
+ - check there are no extra files or directories in the source package, for
example, no empty directories or useless log files.Pay special attention to
line break consistency, which can be checked using the command:`diff -r rc_dir
tag_dir`
+ - check the top n tag commits, dive into the related files and check if the
source package has the same changes
+
+#### Verify the contents of the binary package
+
+Extract the archive`apache-seata-${release_version}-incubating-bin.tar.gz`,
and perform the following checks:
+
+* Check signatures are good
+* 'incubating' in name
+* LICENSE and NOTICE exists and contents are good
+
+Note: If the binary package includes third-party dependencies, it is necessary
to update the LICENSE file by adding the licenses of those third-party
dependencies. If a third-party dependency is licensed under Apache 2.0 and its
project includes a NOTICE file, the NOTICE file must also be updated
accordingly.
+Additionally, if a dependency is dual/multiple licensed, you only need to
include the most permissive one. You may refer to this article: [ASF
Third-Party License Policy](https://apache.org/legal/resolved.html)
+
+### 2.4 Voting Stage
+
+#### 1) Community Internal Voting
**The vote must last at least 72 hours and receive at least 3 +1 binding
votes**
@@ -380,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 Complete the vote
+#### 2) Complete the vote
Send a vote passed email:
@@ -411,7 +480,7 @@ Thank you for reviewing and voting for our release
candidate.
We will soon launch the second stage of voting.
```
-#### 3.2.1 Voting in the Incubator
+#### 3) Voting in the Incubator
Similar to community voting, but you need to add links to the community vote
thread to prove consensus was reached within the community.
@@ -491,7 +560,7 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 Announce the Incubator vote result
+#### 4) Announce the Incubator vote result
After 72 hours, if there are at least 3 passing votes and no opposing votes,
send an email as follows:
@@ -524,7 +593,7 @@ announcement soon.
```
-### 3.2.3 Vote Interruption
+#### 5) Vote Interruption
If issues are found during the voting process, such as license problems or
bugs that need to be fixed before release, the vote must be interrupted.
@@ -541,9 +610,9 @@ Describe the reason for cancellation: such as missing
licenses, or bugs in the v
Note: After cancelling a vote in the Incubator, a new vote must start again
from within the community.
-# 4. Complete the Release
+### 2.5 Complete the Release
-### 4.1 Release the Version
+#### 1) Release the Version
1. From Apache Nexus repository, select the previously closed
**orgapacheseata-XXX** and click the `Release` icon to publish.
@@ -555,7 +624,7 @@ Note: After cancelling a vote in the Incubator, a new vote
must start again from
4. Update the documentation for version x.x.x on the Seata official website,
and add download links for the binary and source packages.
-### 4.2 Announce the Release
+#### 2) Announce the Release
Send an email to `[email protected]`
@@ -579,3 +648,11 @@ Resources:
- Issue: https://github.com/apache/incubator-seata/issues
- Mailing list: [email protected]
```
+
+#### 3) Archiving Old Versions
+After releasing a new version, the previous version must be archived to ensure
that only the latest version of the same maintenance branch is retained in the
[download](https://downloads.apache.org/incubator/seata/) directory. Archived
versions are automatically synchronized to the
[archive](https://archive.apache.org/dist/incubator/seata/) when a new release
is published. Therefore, it is sufficient to delete older versions from the
[download](https://downloads.apache.org/incubator/seat [...]
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/release-guide/release-guide_dev.md
b/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/release-guide/release-guide_dev.md
index 6c10788d802..3a84b3cca84 100644
---
a/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/release-guide/release-guide_dev.md
+++
b/i18n/zh-cn/docusaurus-plugin-content-docs/current/developers/release-guide/release-guide_dev.md
@@ -332,7 +332,7 @@ $ shasum -c
apache-seata-${release_version}-incubating-src.tar.gz.sha512
```sh
$ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # 下载公钥到本地
$ gpg --import KEYS # 导入公钥
- $ gpg --edit-key xxx # xxx为你的apache id,如xingfudeshi
+ $ gpg --edit-key xxx # xxx为你的apache id
> trust # 输入 trust 命令,信任xxx用户
```
然后使用如下命令检查签名
diff --git
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
index 98d7138b5cd..3a84b3cca84 100644
---
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.2/developers/ppmc-guide/release-guide_dev.md
@@ -4,11 +4,11 @@ keywords: [Seata]
description: Release Guide.
---
-# 发布手册
+# Apache Seata™ (incubating) 发布手册
## 1. 前言
-#### 1.1 Apache 版本发布文档
+### 1.1 Apache 版本发布文档
参考以下链接,了解 ASF 版本发布流程:
@@ -16,7 +16,7 @@ description: Release Guide.
- [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 签名
+### 1.2 PGP 签名
遵循 Apache 版本发布指南,对发布版本签名,用户也可据此判断下载的版本是否被篡改。
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM 配置
+### 1.3 POM 配置
配置 POM 文件,以便将版本部署到 ASF Nexus 仓库。
@@ -179,21 +179,21 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
**Tips:** 推荐使用 [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) 加密
`gpg.passphrase`
-#### 1.5 发布 Release Notes
+### 1.4 发布 Release Notes
通过[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md)构建出对应版本的Release
Notes
## 2.发布流程
-### 1. 准备分支
+### 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.2 预发布二进制包
-#### 2.1 SDK根据 [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
的说明准备发布。
+#### 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
@@ -203,19 +203,19 @@ mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.ap
注:如果close失败很可能是因为签名的秘钥对应的公钥在keys.openpgp.org中无法获取到,请自行通过[OpenPGP Keyserver
(ubuntu.com)](https://keyserver.ubuntu.com/) 检查
-#### 2.2 Source&Binary提交至svn仓库
+#### 2) Source&Binary提交至svn仓库
-##### 2.2.1 安装svn
+##### a. 安装svn
下载并安装[Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
或通过 `brew install subversion` 一键安装
-##### 2.2.2 编译seata-server及seata-namingserver
+##### b. 编译seata-server及seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 将Source及Binary进行签名
+##### c. 将Source及Binary进行签名
Source 建议直接通过github 对应版本分支如2.2.0
进行下载zip包,避免本地环境污染Source包内容,然后重命名为apache-seata-x.x.x-incubating-src.zip
@@ -237,17 +237,17 @@ 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移入其中
+##### d. 拉取svn至本地,并构建发布版本路径,并将签名文件及Source和Binary移入其中
拉取svn目录
`svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/`
-创建发布版本路径,并将文件移入其中
+创建发布版本路径(dev路径中的文件夹必须携带RC代表其实一个预备状态),并将文件移入其中
`cd seata`
-`mkdir x.x.x`
+`mkdir x.x.xRCN`
`mv ….. x.x.x`
@@ -288,9 +288,9 @@ asc验证
提交后的版本为 71769。
```
-#### 2.3 创建tag及releasenote
+#### 3) 创建tag及releasenote
-##### 2.3.1 创建tag
+##### a. 创建tag
在x.x.x分支下执行
@@ -298,15 +298,83 @@ asc验证
git push upstream(seata仓库repo) vx.x.x
-##### 2.3.2 创建release note
+##### b. 创建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.投票阶段
+### 2.3 验证Release Candidates
-#### 3.1 社区内部投票
+详细的检查列表请参考官方的[check
list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+首先,从以下地址下载要发布的Release Candidate到本地环境:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+然后,开始验证环节,验证包含但不限于以下内容和形式
+
+#### 检查签名和hash等信息
+
+##### 检查sha512哈希
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+
+#### 检查gpg签名
+
+如果是第一次检查,需要首先导入公钥。
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # 下载公钥到本地
+ $ gpg --import KEYS # 导入公钥
+ $ gpg --edit-key xxx # xxx为你的apache id
+ > trust # 输入 trust 命令,信任xxx用户
+ ```
+然后使用如下命令检查签名
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### 检查源码包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-src.tar.gz`,进行如下检查:
+
+- 目录名称中包含 'incubating'
+ `apache-seata-${release_version}-incubating-src`
+- 存在DISCLAIMER文件
+- 存在LICENSE和NOTICE文件,且内容正确
+- 所有文件存在,且不包含二进制文件
+- 所有文件均带有符合ASF标准的许可证声明头
+- 能够从源代码编译
+- 所有单元测试均可通过
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- 确保发布候选版本与对应的标签一致,可在投票邮件中找到标签链接和哈希值。
+ - 检查pom.xml中的版本号是否一致
+ - 检查源代码包中是否有多余的文件或目录(例如空目录或无用的日志文件),此处需特别注意换行符是否一致,可以用`diff -r rc_dir
tag_dir`命令来检查
+ - 检查标签最新的n个提交,深入查看相关文件并确认源代码包是否包含相同的修改
+
+#### 检查二进制包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-bin.tar.gz`,进行如下检查:
+
+* 检查签名是否正确有效
+* 名称中包含"incubating"
+* 存在LICENSE和NOTICE文件,且内容无误
+
+注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache
2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件。
+同时,如果一个依赖项是双重/多重许可的,只需选择最宽松的一个。
可以参考这篇文章:[ASF第三方许可政策](https://apache.org/legal/resolved.html)
+
+### 2.4 投票阶段
+
+#### 1) 社区内部投票
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -318,9 +386,10 @@ [email protected]
标题:
-`[VOTE]Release Apache Seata (Incubating) x.x.x-RCN (RoundN) `
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN) `
-RC N和Round N的N代表次数,该版本的第几次投票
+Round N的N代表次数,该版本的该阶段的第几次投票
+如: 投票不通过该版本经修改后重新投票时需要N+1,如Round1投票不通过,下次投票就为Round2.
正文:
@@ -380,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 完成投票
+#### 2) 完成投票
发布投票通过邮件
@@ -388,7 +457,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
Hi Community,
-The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+The vote to release Apache Seata (Incubating) vx.x.x has passed
with 3 +1 binding votes, and no +0 or -1 votes.
3 (+1 binding)
@@ -413,7 +482,7 @@ We will soon launch the second stage of voting.
-#### 3.2.1 孵化器中投票
+#### 3) 孵化器中投票
与社区投票类似,但是需要增加社区投票相关的thread链接,以证明已在社区内达成一致
@@ -421,7 +490,7 @@ We will soon launch the second stage of voting.
标题:
-`[VOTE]Release Apache Seata (Incubating) x.x.x-RCN `
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN) `
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -493,18 +562,18 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 公示孵化器投票结果
+#### 4) 公示孵化器投票结果
72 小时后,若至少有 3 票通过而没有反对票,则参考如下邮件进行发送结果
发送邮件至 `[email protected]`
-标题:`[RESULT][VOTE] Release Apache Seata (incubating) x.x.x-RCN`
+标题:`[RESULT][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
```
Hi Incubator PMC,
-The vote to release Apache Seata(incubating) X.X.X-RCN has passed with
+The vote to release Apache Seata(incubating) X.X.X has passed with
3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes.
Binding votes:
@@ -526,11 +595,25 @@ announcement soon.
```
+#### 5) 投票中断
+如出现在投票过程中验证不通过,如license,或者版本存在bug等,经评估需要修复后才能发版,那么需要中断本次投票
+标题:`[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
-# 4.完成发布
+```
+Hi Incubator PMC,
+I'm cancelling this vote:
+之前投票的链接
-### 4.1 release 版本
+描述为何中断的原因: 如license缺漏,或者版本存在bug等
+
+```
+
+注: 孵化器中投票终止后,新的投票需要从社区内部重新开始
+
+### 2.5.完成发布
+
+#### 1) release 版本
1. 从Apache Nexus 仓库, 选择之前进行close过的的 **orgapacheseata-XXX** 点击 `Release` 图标发布
@@ -542,7 +625,7 @@ announcement soon.
4. 将x.x.x的文档更新至seata官网中,并补充对应binary和source的下载链接
-### 4.2 版本公示
+#### 2) 版本公示
发送邮件至 `[email protected]`
@@ -567,3 +650,10 @@ Resources:
- Mailing list: [email protected]
```
+#### 3) 归档老版本
+发布新版本后,需要将上一个版本归档,确保在[download](https://downloads.apache.org/incubator/seata/)
只保留同一维护分支的最新版本。Archive
版本在发布新版本时会自动同步到[归档](https://archive.apache.org/dist/incubator/seata/)。因此,只需要删除[download](https://downloads.apache.org/incubator/seata/)
中老的版本即可,参考命令如下:
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
index 98d7138b5cd..3a84b3cca84 100644
---
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.3/developers/ppmc-guide/release-guide_dev.md
@@ -4,11 +4,11 @@ keywords: [Seata]
description: Release Guide.
---
-# 发布手册
+# Apache Seata™ (incubating) 发布手册
## 1. 前言
-#### 1.1 Apache 版本发布文档
+### 1.1 Apache 版本发布文档
参考以下链接,了解 ASF 版本发布流程:
@@ -16,7 +16,7 @@ description: Release Guide.
- [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 签名
+### 1.2 PGP 签名
遵循 Apache 版本发布指南,对发布版本签名,用户也可据此判断下载的版本是否被篡改。
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM 配置
+### 1.3 POM 配置
配置 POM 文件,以便将版本部署到 ASF Nexus 仓库。
@@ -179,21 +179,21 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
**Tips:** 推荐使用 [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) 加密
`gpg.passphrase`
-#### 1.5 发布 Release Notes
+### 1.4 发布 Release Notes
通过[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md)构建出对应版本的Release
Notes
## 2.发布流程
-### 1. 准备分支
+### 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.2 预发布二进制包
-#### 2.1 SDK根据 [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
的说明准备发布。
+#### 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
@@ -203,19 +203,19 @@ mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.ap
注:如果close失败很可能是因为签名的秘钥对应的公钥在keys.openpgp.org中无法获取到,请自行通过[OpenPGP Keyserver
(ubuntu.com)](https://keyserver.ubuntu.com/) 检查
-#### 2.2 Source&Binary提交至svn仓库
+#### 2) Source&Binary提交至svn仓库
-##### 2.2.1 安装svn
+##### a. 安装svn
下载并安装[Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
或通过 `brew install subversion` 一键安装
-##### 2.2.2 编译seata-server及seata-namingserver
+##### b. 编译seata-server及seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 将Source及Binary进行签名
+##### c. 将Source及Binary进行签名
Source 建议直接通过github 对应版本分支如2.2.0
进行下载zip包,避免本地环境污染Source包内容,然后重命名为apache-seata-x.x.x-incubating-src.zip
@@ -237,17 +237,17 @@ 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移入其中
+##### d. 拉取svn至本地,并构建发布版本路径,并将签名文件及Source和Binary移入其中
拉取svn目录
`svn co --depth=empty https://dist.apache.org/repos/dist/dev/incubator/seata/`
-创建发布版本路径,并将文件移入其中
+创建发布版本路径(dev路径中的文件夹必须携带RC代表其实一个预备状态),并将文件移入其中
`cd seata`
-`mkdir x.x.x`
+`mkdir x.x.xRCN`
`mv ….. x.x.x`
@@ -288,9 +288,9 @@ asc验证
提交后的版本为 71769。
```
-#### 2.3 创建tag及releasenote
+#### 3) 创建tag及releasenote
-##### 2.3.1 创建tag
+##### a. 创建tag
在x.x.x分支下执行
@@ -298,15 +298,83 @@ asc验证
git push upstream(seata仓库repo) vx.x.x
-##### 2.3.2 创建release note
+##### b. 创建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.投票阶段
+### 2.3 验证Release Candidates
-#### 3.1 社区内部投票
+详细的检查列表请参考官方的[check
list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+首先,从以下地址下载要发布的Release Candidate到本地环境:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+然后,开始验证环节,验证包含但不限于以下内容和形式
+
+#### 检查签名和hash等信息
+
+##### 检查sha512哈希
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+
+#### 检查gpg签名
+
+如果是第一次检查,需要首先导入公钥。
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # 下载公钥到本地
+ $ gpg --import KEYS # 导入公钥
+ $ gpg --edit-key xxx # xxx为你的apache id
+ > trust # 输入 trust 命令,信任xxx用户
+ ```
+然后使用如下命令检查签名
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### 检查源码包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-src.tar.gz`,进行如下检查:
+
+- 目录名称中包含 'incubating'
+ `apache-seata-${release_version}-incubating-src`
+- 存在DISCLAIMER文件
+- 存在LICENSE和NOTICE文件,且内容正确
+- 所有文件存在,且不包含二进制文件
+- 所有文件均带有符合ASF标准的许可证声明头
+- 能够从源代码编译
+- 所有单元测试均可通过
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- 确保发布候选版本与对应的标签一致,可在投票邮件中找到标签链接和哈希值。
+ - 检查pom.xml中的版本号是否一致
+ - 检查源代码包中是否有多余的文件或目录(例如空目录或无用的日志文件),此处需特别注意换行符是否一致,可以用`diff -r rc_dir
tag_dir`命令来检查
+ - 检查标签最新的n个提交,深入查看相关文件并确认源代码包是否包含相同的修改
+
+#### 检查二进制包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-bin.tar.gz`,进行如下检查:
+
+* 检查签名是否正确有效
+* 名称中包含"incubating"
+* 存在LICENSE和NOTICE文件,且内容无误
+
+注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache
2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件。
+同时,如果一个依赖项是双重/多重许可的,只需选择最宽松的一个。
可以参考这篇文章:[ASF第三方许可政策](https://apache.org/legal/resolved.html)
+
+### 2.4 投票阶段
+
+#### 1) 社区内部投票
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -318,9 +386,10 @@ [email protected]
标题:
-`[VOTE]Release Apache Seata (Incubating) x.x.x-RCN (RoundN) `
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN) `
-RC N和Round N的N代表次数,该版本的第几次投票
+Round N的N代表次数,该版本的该阶段的第几次投票
+如: 投票不通过该版本经修改后重新投票时需要N+1,如Round1投票不通过,下次投票就为Round2.
正文:
@@ -380,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 完成投票
+#### 2) 完成投票
发布投票通过邮件
@@ -388,7 +457,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
Hi Community,
-The vote to release Apache Seata (Incubating) vx.x.x-RCN has passed
+The vote to release Apache Seata (Incubating) vx.x.x has passed
with 3 +1 binding votes, and no +0 or -1 votes.
3 (+1 binding)
@@ -413,7 +482,7 @@ We will soon launch the second stage of voting.
-#### 3.2.1 孵化器中投票
+#### 3) 孵化器中投票
与社区投票类似,但是需要增加社区投票相关的thread链接,以证明已在社区内达成一致
@@ -421,7 +490,7 @@ We will soon launch the second stage of voting.
标题:
-`[VOTE]Release Apache Seata (Incubating) x.x.x-RCN `
+`[VOTE]Release Apache Seata (Incubating) x.x.x(RoundN) `
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -493,18 +562,18 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 公示孵化器投票结果
+#### 4) 公示孵化器投票结果
72 小时后,若至少有 3 票通过而没有反对票,则参考如下邮件进行发送结果
发送邮件至 `[email protected]`
-标题:`[RESULT][VOTE] Release Apache Seata (incubating) x.x.x-RCN`
+标题:`[RESULT][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
```
Hi Incubator PMC,
-The vote to release Apache Seata(incubating) X.X.X-RCN has passed with
+The vote to release Apache Seata(incubating) X.X.X has passed with
3 +1 binding and 1 +1 non-binding votes, no +0 or -1 votes.
Binding votes:
@@ -526,11 +595,25 @@ announcement soon.
```
+#### 5) 投票中断
+如出现在投票过程中验证不通过,如license,或者版本存在bug等,经评估需要修复后才能发版,那么需要中断本次投票
+标题:`[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
-# 4.完成发布
+```
+Hi Incubator PMC,
+I'm cancelling this vote:
+之前投票的链接
-### 4.1 release 版本
+描述为何中断的原因: 如license缺漏,或者版本存在bug等
+
+```
+
+注: 孵化器中投票终止后,新的投票需要从社区内部重新开始
+
+### 2.5.完成发布
+
+#### 1) release 版本
1. 从Apache Nexus 仓库, 选择之前进行close过的的 **orgapacheseata-XXX** 点击 `Release` 图标发布
@@ -542,7 +625,7 @@ announcement soon.
4. 将x.x.x的文档更新至seata官网中,并补充对应binary和source的下载链接
-### 4.2 版本公示
+#### 2) 版本公示
发送邮件至 `[email protected]`
@@ -567,3 +650,10 @@ Resources:
- Mailing list: [email protected]
```
+#### 3) 归档老版本
+发布新版本后,需要将上一个版本归档,确保在[download](https://downloads.apache.org/incubator/seata/)
只保留同一维护分支的最新版本。Archive
版本在发布新版本时会自动同步到[归档](https://archive.apache.org/dist/incubator/seata/)。因此,只需要删除[download](https://downloads.apache.org/incubator/seata/)
中老的版本即可,参考命令如下:
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
index 5835162b607..3a84b3cca84 100644
---
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
+++
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.4/developers/ppmc-guide/release-guide_dev.md
@@ -4,11 +4,11 @@ keywords: [Seata]
description: Release Guide.
---
-# 发布手册
+# Apache Seata™ (incubating) 发布手册
## 1. 前言
-#### 1.1 Apache 版本发布文档
+### 1.1 Apache 版本发布文档
参考以下链接,了解 ASF 版本发布流程:
@@ -16,7 +16,7 @@ description: Release Guide.
- [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 签名
+### 1.2 PGP 签名
遵循 Apache 版本发布指南,对发布版本签名,用户也可据此判断下载的版本是否被篡改。
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM 配置
+### 1.3 POM 配置
配置 POM 文件,以便将版本部署到 ASF Nexus 仓库。
@@ -179,21 +179,21 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
**Tips:** 推荐使用 [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) 加密
`gpg.passphrase`
-#### 1.5 发布 Release Notes
+### 1.4 发布 Release Notes
通过[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md)构建出对应版本的Release
Notes
## 2.发布流程
-### 1. 准备分支
+### 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.2 预发布二进制包
-#### 2.1 SDK根据 [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
的说明准备发布。
+#### 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
@@ -203,19 +203,19 @@ mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.ap
注:如果close失败很可能是因为签名的秘钥对应的公钥在keys.openpgp.org中无法获取到,请自行通过[OpenPGP Keyserver
(ubuntu.com)](https://keyserver.ubuntu.com/) 检查
-#### 2.2 Source&Binary提交至svn仓库
+#### 2) Source&Binary提交至svn仓库
-##### 2.2.1 安装svn
+##### a. 安装svn
下载并安装[Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
或通过 `brew install subversion` 一键安装
-##### 2.2.2 编译seata-server及seata-namingserver
+##### b. 编译seata-server及seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 将Source及Binary进行签名
+##### c. 将Source及Binary进行签名
Source 建议直接通过github 对应版本分支如2.2.0
进行下载zip包,避免本地环境污染Source包内容,然后重命名为apache-seata-x.x.x-incubating-src.zip
@@ -237,7 +237,7 @@ 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移入其中
+##### d. 拉取svn至本地,并构建发布版本路径,并将签名文件及Source和Binary移入其中
拉取svn目录
@@ -288,9 +288,9 @@ asc验证
提交后的版本为 71769。
```
-#### 2.3 创建tag及releasenote
+#### 3) 创建tag及releasenote
-##### 2.3.1 创建tag
+##### a. 创建tag
在x.x.x分支下执行
@@ -298,15 +298,83 @@ asc验证
git push upstream(seata仓库repo) vx.x.x
-##### 2.3.2 创建release note
+##### b. 创建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.投票阶段
+### 2.3 验证Release Candidates
-#### 3.1 社区内部投票
+详细的检查列表请参考官方的[check
list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+首先,从以下地址下载要发布的Release Candidate到本地环境:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+然后,开始验证环节,验证包含但不限于以下内容和形式
+
+#### 检查签名和hash等信息
+
+##### 检查sha512哈希
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+
+#### 检查gpg签名
+
+如果是第一次检查,需要首先导入公钥。
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # 下载公钥到本地
+ $ gpg --import KEYS # 导入公钥
+ $ gpg --edit-key xxx # xxx为你的apache id
+ > trust # 输入 trust 命令,信任xxx用户
+ ```
+然后使用如下命令检查签名
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### 检查源码包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-src.tar.gz`,进行如下检查:
+
+- 目录名称中包含 'incubating'
+ `apache-seata-${release_version}-incubating-src`
+- 存在DISCLAIMER文件
+- 存在LICENSE和NOTICE文件,且内容正确
+- 所有文件存在,且不包含二进制文件
+- 所有文件均带有符合ASF标准的许可证声明头
+- 能够从源代码编译
+- 所有单元测试均可通过
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- 确保发布候选版本与对应的标签一致,可在投票邮件中找到标签链接和哈希值。
+ - 检查pom.xml中的版本号是否一致
+ - 检查源代码包中是否有多余的文件或目录(例如空目录或无用的日志文件),此处需特别注意换行符是否一致,可以用`diff -r rc_dir
tag_dir`命令来检查
+ - 检查标签最新的n个提交,深入查看相关文件并确认源代码包是否包含相同的修改
+
+#### 检查二进制包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-bin.tar.gz`,进行如下检查:
+
+* 检查签名是否正确有效
+* 名称中包含"incubating"
+* 存在LICENSE和NOTICE文件,且内容无误
+
+注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache
2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件。
+同时,如果一个依赖项是双重/多重许可的,只需选择最宽松的一个。
可以参考这篇文章:[ASF第三方许可政策](https://apache.org/legal/resolved.html)
+
+### 2.4 投票阶段
+
+#### 1) 社区内部投票
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -381,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 完成投票
+#### 2) 完成投票
发布投票通过邮件
@@ -414,7 +482,7 @@ We will soon launch the second stage of voting.
-#### 3.2.1 孵化器中投票
+#### 3) 孵化器中投票
与社区投票类似,但是需要增加社区投票相关的thread链接,以证明已在社区内达成一致
@@ -494,7 +562,7 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 公示孵化器投票结果
+#### 4) 公示孵化器投票结果
72 小时后,若至少有 3 票通过而没有反对票,则参考如下邮件进行发送结果
@@ -527,7 +595,7 @@ announcement soon.
```
-### 3.2.3 投票中断
+#### 5) 投票中断
如出现在投票过程中验证不通过,如license,或者版本存在bug等,经评估需要修复后才能发版,那么需要中断本次投票
标题:`[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
@@ -543,9 +611,9 @@ I'm cancelling this vote:
注: 孵化器中投票终止后,新的投票需要从社区内部重新开始
-# 4.完成发布
+### 2.5.完成发布
-### 4.1 release 版本
+#### 1) release 版本
1. 从Apache Nexus 仓库, 选择之前进行close过的的 **orgapacheseata-XXX** 点击 `Release` 图标发布
@@ -557,7 +625,7 @@ I'm cancelling this vote:
4. 将x.x.x的文档更新至seata官网中,并补充对应binary和source的下载链接
-### 4.2 版本公示
+#### 2) 版本公示
发送邮件至 `[email protected]`
@@ -582,3 +650,10 @@ Resources:
- Mailing list: [email protected]
```
+#### 3) 归档老版本
+发布新版本后,需要将上一个版本归档,确保在[download](https://downloads.apache.org/incubator/seata/)
只保留同一维护分支的最新版本。Archive
版本在发布新版本时会自动同步到[归档](https://archive.apache.org/dist/incubator/seata/)。因此,只需要删除[download](https://downloads.apache.org/incubator/seata/)
中老的版本即可,参考命令如下:
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
diff --git
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
index cb5066b9e25..6c10788d802 100644
---
a/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
+++
b/i18n/zh-cn/docusaurus-plugin-content-docs/version-v2.5/developers/release-guide/release-guide_dev.md
@@ -8,7 +8,7 @@ description: Release Guide.
## 1. 前言
-#### 1.1 Apache 版本发布文档
+### 1.1 Apache 版本发布文档
参考以下链接,了解 ASF 版本发布流程:
@@ -16,7 +16,7 @@ description: Release Guide.
- [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 签名
+### 1.2 PGP 签名
遵循 Apache 版本发布指南,对发布版本签名,用户也可据此判断下载的版本是否被篡改。
@@ -125,7 +125,7 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
```
-#### 1.3 POM 配置
+### 1.3 POM 配置
配置 POM 文件,以便将版本部署到 ASF Nexus 仓库。
@@ -179,21 +179,21 @@ gpg: sending key XXXXXXXX to hkp server keys.openpgp.org
**Tips:** 推荐使用 [Maven's password encryption
capabilities](http://maven.apache.org/guides/mini/guide-encryption.html) 加密
`gpg.passphrase`
-#### 1.5 发布 Release Notes
+### 1.4 发布 Release Notes
通过[changelog](https://github.com/apache/incubator-seata/blob/2.x/changes/zh-cn/2.x.md)构建出对应版本的Release
Notes
## 2.发布流程
-### 1. 准备分支
+### 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.2 预发布二进制包
-#### 2.1 SDK根据 [publishing maven
artifacts](https://infra.apache.org/publishing-maven-artifacts.html) [4]
的说明准备发布。
+#### 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
@@ -203,19 +203,19 @@ mvn clean deploy -Prelease -DskipTests -e -B
-Dorg.slf4j.simpleLogger.log.org.ap
注:如果close失败很可能是因为签名的秘钥对应的公钥在keys.openpgp.org中无法获取到,请自行通过[OpenPGP Keyserver
(ubuntu.com)](https://keyserver.ubuntu.com/) 检查
-#### 2.2 Source&Binary提交至svn仓库
+#### 2) Source&Binary提交至svn仓库
-##### 2.2.1 安装svn
+##### a. 安装svn
下载并安装[Download Apache Subversion
Sources](https://subversion.apache.org/download.cgi#recommended-release)
或通过 `brew install subversion` 一键安装
-##### 2.2.2 编译seata-server及seata-namingserver
+##### b. 编译seata-server及seata-namingserver
- `mvn -Prelease-seata -Dmaven.test.skip=true -Dskip.npm=true -T4C
-Dpmd.skip=true clean install -U`
+ `mvn -Prelease-seata -Dmaven.test.skip=true -T4C -Dpmd.skip=true clean
install -U`
-##### 2.2.3 将Source及Binary进行签名
+##### c. 将Source及Binary进行签名
Source 建议直接通过github 对应版本分支如2.2.0
进行下载zip包,避免本地环境污染Source包内容,然后重命名为apache-seata-x.x.x-incubating-src.zip
@@ -237,7 +237,7 @@ 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移入其中
+##### d. 拉取svn至本地,并构建发布版本路径,并将签名文件及Source和Binary移入其中
拉取svn目录
@@ -288,9 +288,9 @@ asc验证
提交后的版本为 71769。
```
-#### 2.3 创建tag及releasenote
+#### 3) 创建tag及releasenote
-##### 2.3.1 创建tag
+##### a. 创建tag
在x.x.x分支下执行
@@ -298,15 +298,83 @@ asc验证
git push upstream(seata仓库repo) vx.x.x
-##### 2.3.2 创建release note
+##### b. 创建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.投票阶段
+### 2.3 验证Release Candidates
-#### 3.1 社区内部投票
+详细的检查列表请参考官方的[check
list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+首先,从以下地址下载要发布的Release Candidate到本地环境:
+
+```
+https://dist.apache.org/repos/dist/dev/incubator/seata/${release_version}/
+```
+
+然后,开始验证环节,验证包含但不限于以下内容和形式
+
+#### 检查签名和hash等信息
+
+##### 检查sha512哈希
+
+```sh
+$ shasum -c apache-seata-${release_version}-incubating-bin.tar.gz.sha512
+$ shasum -c apache-seata-${release_version}-incubating-src.tar.gz.sha512
+```
+
+#### 检查gpg签名
+
+如果是第一次检查,需要首先导入公钥。
+
+```sh
+ $ curl https://downloads.apache.org/incubator/seata/KEYS >> KEYS # 下载公钥到本地
+ $ gpg --import KEYS # 导入公钥
+ $ gpg --edit-key xxx # xxx为你的apache id,如xingfudeshi
+ > trust # 输入 trust 命令,信任xxx用户
+ ```
+然后使用如下命令检查签名
+
+ ```sh
+gpg --verify apache-seata-${release_version}-incubating-src.tar.gz.asc
apache-seata-${release_version}-incubating-src.tar.gz
+gpg --verify apache-seata-${release_version}-incubating-bin.tar.gz.asc
apache-seata-${release_version}-incubating-bin.tar.gz
+ ```
+#### 检查源码包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-src.tar.gz`,进行如下检查:
+
+- 目录名称中包含 'incubating'
+ `apache-seata-${release_version}-incubating-src`
+- 存在DISCLAIMER文件
+- 存在LICENSE和NOTICE文件,且内容正确
+- 所有文件存在,且不包含二进制文件
+- 所有文件均带有符合ASF标准的许可证声明头
+- 能够从源代码编译
+- 所有单元测试均可通过
+ ```sh
+ ./mvnw clean package -DskipTests=true
+ ```
+- 确保发布候选版本与对应的标签一致,可在投票邮件中找到标签链接和哈希值。
+ - 检查pom.xml中的版本号是否一致
+ - 检查源代码包中是否有多余的文件或目录(例如空目录或无用的日志文件),此处需特别注意换行符是否一致,可以用`diff -r rc_dir
tag_dir`命令来检查
+ - 检查标签最新的n个提交,深入查看相关文件并确认源代码包是否包含相同的修改
+
+#### 检查二进制包的文件内容
+
+解压缩`apache-seata-${release_version}-incubating-bin.tar.gz`,进行如下检查:
+
+* 检查签名是否正确有效
+* 名称中包含"incubating"
+* 存在LICENSE和NOTICE文件,且内容无误
+
+注意,如果二进制包里面引入了第三方依赖,则需要更新LICENSE,加入第三方依赖的LICENSE,如果第三方依赖的LICENSE是Apache
2.0,并且对应的项目中包含了NOTICE,还需要更新NOTICE文件。
+同时,如果一个依赖项是双重/多重许可的,只需选择最宽松的一个。
可以参考这篇文章:[ASF第三方许可政策](https://apache.org/legal/resolved.html)
+
+### 2.4 投票阶段
+
+#### 1) 社区内部投票
**投票持续至少 72 小时并获得 3 个+1 binding票**
@@ -381,7 +449,7 @@ To learn more about Apache Seata , please see
https://seata.apache.org/
```
-#### 3.1.2 完成投票
+#### 2) 完成投票
发布投票通过邮件
@@ -414,7 +482,7 @@ We will soon launch the second stage of voting.
-#### 3.2.1 孵化器中投票
+#### 3) 孵化器中投票
与社区投票类似,但是需要增加社区投票相关的thread链接,以证明已在社区内达成一致
@@ -494,7 +562,7 @@ Checklist for reference:
To learn more about Apache Seata , please see https://seata.apache.org/
```
-#### 3.2.2 公示孵化器投票结果
+#### 4) 公示孵化器投票结果
72 小时后,若至少有 3 票通过而没有反对票,则参考如下邮件进行发送结果
@@ -527,7 +595,7 @@ announcement soon.
```
-### 3.2.3 投票中断
+#### 5) 投票中断
如出现在投票过程中验证不通过,如license,或者版本存在bug等,经评估需要修复后才能发版,那么需要中断本次投票
标题:`[CANCEL][VOTE] Release Apache Seata (incubating) x.x.x(RoundN)`
@@ -543,9 +611,9 @@ I'm cancelling this vote:
注: 孵化器中投票终止后,新的投票需要从社区内部重新开始
-# 4.完成发布
+### 2.5.完成发布
-### 4.1 release 版本
+#### 1) release 版本
1. 从Apache Nexus 仓库, 选择之前进行close过的的 **orgapacheseata-XXX** 点击 `Release` 图标发布
@@ -557,7 +625,7 @@ I'm cancelling this vote:
4. 将x.x.x的文档更新至seata官网中,并补充对应binary和source的下载链接
-### 4.2 版本公示
+#### 2) 版本公示
发送邮件至 `[email protected]`
@@ -582,3 +650,10 @@ Resources:
- Mailing list: [email protected]
```
+#### 3) 归档老版本
+发布新版本后,需要将上一个版本归档,确保在[download](https://downloads.apache.org/incubator/seata/)
只保留同一维护分支的最新版本。Archive
版本在发布新版本时会自动同步到[归档](https://archive.apache.org/dist/incubator/seata/)。因此,只需要删除[download](https://downloads.apache.org/incubator/seata/)
中老的版本即可,参考命令如下:
+
+```yaml
+svn delete x.x.x
+svn commit -m "archive seata-x.x.x"
+```
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]