This is an automated email from the ASF dual-hosted git repository. liuhongyu pushed a commit to branch feature/add_python_client_release_note in repository https://gitbox.apache.org/repos/asf/shenyu-website.git
commit 0b3a0560f1fa54a3ed72daa0570b8f3e854ef566 Author: liuhy <[email protected]> AuthorDate: Thu Jan 2 15:46:17 2025 +0800 [type:feat] add more client release note --- community/18-shenyu-client-python-release-guide.md | 530 ++++++++++++++++++++ community/19-shenyu-client-rust-release-guide.md | 530 ++++++++++++++++++++ .../18-shenyu-client-python-release-guide.md | 533 +++++++++++++++++++++ .../current/19-shenyu-client-rust-release-guide.md | 533 +++++++++++++++++++++ 4 files changed, 2126 insertions(+) diff --git a/community/18-shenyu-client-python-release-guide.md b/community/18-shenyu-client-python-release-guide.md new file mode 100644 index 0000000000..a1ef16649f --- /dev/null +++ b/community/18-shenyu-client-python-release-guide.md @@ -0,0 +1,530 @@ +--- +title: ShenYu client Python Release Guide +sidebar_position: 18 +description: Apache ShenYu-client-python Release Guide +cover: "/img/architecture/shenyu-framework.png" +--- + +## Update release notes + +Update [RELEASE-NOTES](https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md) in the following format: + +``` +## ${PUBLISH.VERSION} + +### New Features + +1. xxx +1. xxx +... + +### API Changes + +1. xxx +1. xxx +... + +### Enhancement + +1. xxx +1. xxx +... + +### Refactor + +1. xxx +1. xxx +... + +### Bug Fix + +1. xxx +1. xxx +... +``` + +## Create GPG KEY + +> Each release manager only creates a GPG KEY for the first release, which can be reused for subsequent releases. + +**1. Create KEY** + +Install [GnuPG](https://www.gnupg.org/download/index.html). + +Follow [OpenPGP KEY Management](https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management) [1] instructions. + +```shell +gpg --full-gen-key +``` + +Steps (the following are from console output). + +```shell +gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) +Your selection? 1 +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (2048) 4096 +Requested keysize is 4096 bits +Please specify how long the key should be valid. + 0 = key does not expire + <n> = key expires in n days + <n>w = key expires in n weeks + <n>m = key expires in n months + <n>y = key expires in n years +Key is valid for? (0) +Key does not expire at all +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: (Set username)(use your apache id) +Email address: (Set email address) (use your apache email) +Comment: (Fill in the comments) +You selected this USER-ID: + "username (comments) <email>" + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +You need a Passphrase to protect your secret key. (Set password) +``` + +**2. Verify KEY** + +Follow [Operational GPG Commands](https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands) [2] instructions. + +```shell +gpg --list-keys +``` + +Output: + +```shell +pub rsa4096 2019-03-11 [SC] + 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +uid username (comments) <email> +sub rsa4096 2019-03-11 [E] +``` + +Public key is `095E0D21BC28CFC7A8B8076DF7DF28D237A8048C`. + +**3. Upload public key** + +Follow [Dirmngr Options](https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options) [3] instructions. + +```shell +gpg --send-key 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +``` + +## Publish Prepare Work + +**1. Publish with a new Tag** + +Download and install [Git](https://git-scm.com/downloads). + +Create tag and switch to `${PUBLISH.VERSION}`. + +```shell +git clone https://github.com/apache/shenyu-client-python.git ~/shenyu-client-python +cd ~/shenyu-client-python/ +git checkout main +git tag -a ${PUBLISH.VERSION} -m "${PUBLISH.VERSION} release shenyu client python" +``` + +Submit the code with updated version number and new tags. + +```shell +git push origin --tags +``` + +## Publish to SVN dev repository + +Install [SVN](https://tortoisesvn.net/downloads.html). + +**1. Update KEYS file** + +> If the release manager has not yet appended his or her public key to the KEYS file, do the following. Otherwise, skip this step. + +Follow [signing basics](https://infra.apache.org/release-signing.html#signing-basics) [5] instructions. + +```shell +mkdir -p ~/keys/release/ +cd ~/keys/release/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/release/shenyu +cd ~/keys/release/shenyu +gpg -a --export ${GPG username} >> KEYS +svn --username=${LDAP ID} commit -m "append to KEYS" +``` + +**2. Adding source code packages and binary packages** + +Follow [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] instructions. + +```shell +mkdir -p ~/svn_release/dev/ +cd ~/svn_release/dev/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/dev/shenyu +mkdir -p ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +git archive --format=tar --prefix=shenyu-client-python-${PUBLISH.VERSION}/ ${PUBLISH.VERSION} | gzip > shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz +cd ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-python/*.src.tar.gz ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-python/*.src.tar.gz.asc ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +``` + +**3. Adding hashes** + +Follow [Requirements for cryptographic signatures and checksums](https://infra.apache.org/release-distribution#sigs-and-sums) [7] instructions. + +```shell +shasum -a 512 shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz > shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**4. Submit the new release** + +```shell +cd ~/svn_release/dev/shenyu/shenyu-client-python +svn add ${PUBLISH.VERSION}/ +svn --username=${LDAP ID} commit -m "release shenyu-client-python ${PUBLISH.VERSION}" +``` + +## Check Release + +**1. Verify sha512 checksum** + +Follow [Checking Hashes](https://www.apache.org/info/verification.html#CheckingHashes) [8] instructions. + +```shell +shasum -c shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**2. Verifying GPG Signatures** + +Follow [Checking Signatures](https://www.apache.org/info/verification.html#CheckingSignatures) [9] instructions. + +```shell +curl https://downloads.apache.org/shenyu/KEYS >> KEYS +gpg --import KEYS +cd ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +gpg --verify shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.asc shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz +``` + +**3. Ensure that SVN is consistent with GitHub source code** + +Follow [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] instructions. + +``` +wget https://github.com/apache/shenyu-client-python/archive/v${PUBLISH.VERSION}.zip +unzip v${PUBLISH.VERSION}.zip +mv shenyu-client-python-${PUBLISH.VERSION} shenyu-client-python-${PUBLISH.VERSION}-src +unzip shenyu-client-python-${PUBLISH.VERSION}.zip +diff -r -x "shenyu-examples" -x "shenyu-integrated-test" -x "static" shenyu-client-python-${PUBLISH.VERSION}-src shenyu-client-python-${PUBLISH.VERSION} +``` + +**4. Check the source code package** + +Follow [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] instructions. + +- `LICENSE` and `NOTICE` files exist +- The year in the `NOTICE` file is correct +- All files have ASF licenses at the beginning +- There are no `LICENSE` and `NOTICE` that do not depend on the software +- There are no binaries that do not meet expectations +- Compilation passes (. /mvnw install) (JAVA 8 is currently supported) +- If there are third-party code dependencies. + - License compatibility for third-party code dependencies + - All licenses of third-party code dependencies are named in the `LICENSE` file + - The full version of the third-party code dependency license is in the `license` directory + - If the dependency is an Apache license and there are `NOTICE` files, then these `NOTICE` files need to be added to the project's `NOTICE` file + +**5. Check the binary package** + +Follow [Binary distributions](https://infra.apache.org/licensing-howto.html#binary) [11] instructions. + +- `LICENSE` and `NOTICE` files exist +- The year in the `NOTICE` file is correct +- All text files start with an ASF license +- No `LICENSE` and `NOTICE` for undependent software +- If third-party code dependencies exist. + - Third-party code dependent licenses are compatible + - All licenses of third-party code dependencies are named in the `LICENSE` file + - The full version of the third-party code dependency license is in the `LICENSE` directory + - If the dependency is an Apache license and there are `NOTICE` files, then these `NOTICE` files need to be added to the project's `NOTICE` file + +## Voting Process + +Follow [RELEASE APPROVAL](https://www.apache.org/legal/release-policy.html#release-approval) [12], [Releases](https://incubator.apache.org/policy/incubation.html#Releases) [13], [voting](https://www.apache.org/foundation/voting.html) [14] instructions. + +### ShenYu community vote + +**1. Voting lasts for at least 72 hours and receives 3 `+1 binding` votes** + +To: + +``` [email protected] +``` + +Title: + +``` +[VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +Content: + +``` +Hello ShenYu Community, + +This is a call for vote to release Apache ShenYu Client Python version ${PUBLISH.VERSION} + +Release notes: +https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md + +The release candidates: +https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION}/ + +Git tag for the release: +https://github.com/apache/shenyu-client-python/tree/v${PUBLISH.VERSION}/ + +Release Commit ID: +https://github.com/apache/shenyu-client-python/commit/xxxxxxxxxxxxxxxxxxxxxxx + +Keys to verify the Release Candidate: +https://downloads.apache.org/shenyu/KEYS + +Look at here for how to verify this release candidate: +https://shenyu.apache.org/community/shenyu-client-python-release-guide/#check-release + +The vote will be open for at least 72 hours or until necessary number of votes are reached. + +Please vote accordingly: + +[ ] +1 approve + +[ ] +0 no opinion + +[ ] -1 disapprove with the reason + +Checklist for reference: + +[ ] Download links are valid. + +[ ] Checksums and PGP signatures are valid. + +[ ] Source code distributions have correct names matching the current release. + +[ ] LICENSE and NOTICE files are correct for each ShenYu Client Python repo. + +[ ] All files have license headers if necessary. + +[ ] No compiled archives bundled in source archive. +``` + +**2. Announcement of voting results** + +To: + +``` [email protected] +``` + +Title: + +``` +[RESULT][VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +Content: + +``` +We’ve received 3 +1 binding votes and 2 +1 non-binding votes: + ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (non-binding) ++1, xxx (non-binding) + +Vote thread: +https://lists.apache.org/thread/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +Thanks everyone for taking the time to verify and vote for the release! +``` + +## Finish publishing + +**1. Finish SVN release** + +Follow [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] instructions. + +```shell +svn mv https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} https://dist.apache.org/repos/dist/release/shenyu/shenyu-client-python/${PUBLISH.VERSION} -m "transfer packages for ${PUBLISH.VERSION}" +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PREVIOUS.RELEASE.VERSION} +``` + +**2. Finish GitHub release** + +Edit [Releases](https://github.com/apache/shenyu-client-python/releases) `${PUBLISH.VERSION}` and click release. + +```shell +git tag -d ${PUBLISH.VERSION} +git push origin :refs/tags/${PUBLISH.VERSION} +``` + +**3. Update download page** + +Follow [Release Download Pages for Projects](https://infra.apache.org/release-download-pages.html) [15], [Normal distribution on the Apache downloads site](https://infra.apache.org/release-publishing.html#normal) [16] instructions. + +After the Apache mirror links take effect (at least one hour), update the download page for: +[English version](https://shenyu.apache.org/download/) and +[Chinese version](https://shenyu.apache.org/zh/download/) + +> Note: Project download links should use https://www.apache.org/dyn/closer.lua instead of closer.cgi or mirrors.cgi +> +> Note: Download links for GPG signature files and hash-check files must use this prefix: `https://downloads.apache.org/shenyu/` + +**4. Update documentation** + +Archive the `${PUBLISH.VERSION}` version of the [document](https://github.com/apache/shenyu-website) and update the [version page](https://shenyu.apache.org/versions/). + +**5. Update event page** + +Add new release [event](https://shenyu.apache.org/event/${PUBLISH.VERSION}-release). + +**6. Update news page** + +Add new release [news](https://shenyu.apache.org/zh/news). + +## Release Announcement + +> Note: `[email protected]` address requires the email to be sent in plain text format. If you are using Gmail, you can check `Plain Text Mode` in the edit screen. + +To: + +``` [email protected] [email protected] +``` + +Title: + +``` +[ANNOUNCE] Apache ShenYu Client Python ${PUBLISH.VERSION} available +``` + +Content: + +``` +Hi, + +Apache ShenYu Team is glad to announce the new release of Apache ShenYu Client Python ${PUBLISH.VERSION}. + +Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway. +Support various languages (http protocol), support Dubbo, Spring-Cloud, Grpc, Motan, Sofa, Tars and other protocols. +Plugin design idea, plugin hot swap, easy to expand. +Flexible flow filtering to meet various flow control. +Built-in rich plugin support, authentication, limiting, fuse, firewall, etc. +Dynamic flow configuration, high performance. +Support cluster deployment, A/B Test, blue-green release. + +Download Links: https://shenyu.apache.org/download/ + +Release Notes: https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md + +Website: https://shenyu.apache.org/ + +ShenYu Resources: +- Issue: https://github.com/apache/shenyu/issues +- Mailing list: [email protected] +- Documents: https://shenyu.apache.org/docs/index/ + + +- Apache ShenYu Team + +``` + +## Reissue (not required) + +> Note: You only need to republish if the vote did not pass. + +**1. Cancellation of voting email template** + +To: + +``` [email protected] +``` + +Title: + +``` +[CANCEL][VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +Content: + +``` +Hi, + +I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process. +The detail of the modifications are as follows: + +1. xxxxxx +2. xxxxxx + +Thanks a lot for all your help. +``` + +**2. Clean stagingRepositories** + +Go to https://repository.apache.org/#stagingRepositories, After logging in with your Apache LDAP account, select the previous `Close` version and click `Drop`. + +**3。Deleting GitHub branches and tags** + +```shell +git push origin --delete ${PUBLISH.VERSION}-release +git branch -D ${PUBLISH.VERSION}-release +git push origin --delete tag v${PUBLISH.VERSION} +git tag -d v${PUBLISH.VERSION} +``` + +**4. Deleting SVN content to be published** + +```shell +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} -m "delete ${PUBLISH.VERSION}" +``` + +**5. Update email title** + +After completing the above steps, you can start the re-posting operation. The next poll email title needs to have the `[ROUND ${n}]` suffix added. For example. + +``` +[VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} [ROUND 2] +``` + +Voting result and announcement emails do not need to be suffixed. + +**The content refers to** + +- [1] https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management +- [2] https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands +- [3] https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options +- [4] https://infra.apache.org/publishing-maven-artifacts.html +- [5] https://infra.apache.org/release-signing.html#signing-basics +- [6] https://infra.apache.org/release-publishing.html#uploading +- [7] https://infra.apache.org/release-distribution#sigs-and-sums +- [8] https://www.apache.org/info/verification.html#CheckingHashes +- [9] https://www.apache.org/info/verification.html#CheckingSignatures +- [10] https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist +- [11] https://infra.apache.org/licensing-howto.html#binary +- [12] https://www.apache.org/legal/release-policy.html#release-approval +- [13] https://incubator.apache.org/policy/incubation.html#Releases +- [14] https://www.apache.org/foundation/voting.html +- [15] https://infra.apache.org/release-download-pages.html +- [16] https://infra.apache.org/release-publishing.html#normal diff --git a/community/19-shenyu-client-rust-release-guide.md b/community/19-shenyu-client-rust-release-guide.md new file mode 100644 index 0000000000..5ee91622e9 --- /dev/null +++ b/community/19-shenyu-client-rust-release-guide.md @@ -0,0 +1,530 @@ +--- +title: ShenYu client Rust Release Guide +sidebar_position: 19 +description: Apache ShenYu-client-rust Release Guide +cover: "/img/architecture/shenyu-framework.png" +--- + +## Update release notes + +Update [RELEASE-NOTES](https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md) in the following format: + +``` +## ${PUBLISH.VERSION} + +### New Features + +1. xxx +1. xxx +... + +### API Changes + +1. xxx +1. xxx +... + +### Enhancement + +1. xxx +1. xxx +... + +### Refactor + +1. xxx +1. xxx +... + +### Bug Fix + +1. xxx +1. xxx +... +``` + +## Create GPG KEY + +> Each release manager only creates a GPG KEY for the first release, which can be reused for subsequent releases. + +**1. Create KEY** + +Install [GnuPG](https://www.gnupg.org/download/index.html). + +Follow [OpenPGP KEY Management](https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management) [1] instructions. + +```shell +gpg --full-gen-key +``` + +Steps (the following are from console output). + +```shell +gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) +Your selection? 1 +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (2048) 4096 +Requested keysize is 4096 bits +Please specify how long the key should be valid. + 0 = key does not expire + <n> = key expires in n days + <n>w = key expires in n weeks + <n>m = key expires in n months + <n>y = key expires in n years +Key is valid for? (0) +Key does not expire at all +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: (Set username)(use your apache id) +Email address: (Set email address) (use your apache email) +Comment: (Fill in the comments) +You selected this USER-ID: + "username (comments) <email>" + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +You need a Passphrase to protect your secret key. (Set password) +``` + +**2. Verify KEY** + +Follow [Operational GPG Commands](https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands) [2] instructions. + +```shell +gpg --list-keys +``` + +Output: + +```shell +pub rsa4096 2019-03-11 [SC] + 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +uid username (comments) <email> +sub rsa4096 2019-03-11 [E] +``` + +Public key is `095E0D21BC28CFC7A8B8076DF7DF28D237A8048C`. + +**3. Upload public key** + +Follow [Dirmngr Options](https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options) [3] instructions. + +```shell +gpg --send-key 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +``` + +## Publish Prepare Work + +**1. Publish with a new Tag** + +Download and install [Git](https://git-scm.com/downloads). + +Create tag and switch to `${PUBLISH.VERSION}`. + +```shell +git clone https://github.com/apache/shenyu-client-rust.git ~/shenyu-client-rust +cd ~/shenyu-client-rust/ +git checkout main +git tag -a ${PUBLISH.VERSION} -m "${PUBLISH.VERSION} release shenyu client rust" +``` + +Submit the code with updated version number and new tags. + +```shell +git push origin --tags +``` + +## Publish to SVN dev repository + +Install [SVN](https://tortoisesvn.net/downloads.html). + +**1. Update KEYS file** + +> If the release manager has not yet appended his or her public key to the KEYS file, do the following. Otherwise, skip this step. + +Follow [signing basics](https://infra.apache.org/release-signing.html#signing-basics) [5] instructions. + +```shell +mkdir -p ~/keys/release/ +cd ~/keys/release/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/release/shenyu +cd ~/keys/release/shenyu +gpg -a --export ${GPG username} >> KEYS +svn --username=${LDAP ID} commit -m "append to KEYS" +``` + +**2. Adding source code packages and binary packages** + +Follow [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] instructions. + +```shell +mkdir -p ~/svn_release/dev/ +cd ~/svn_release/dev/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/dev/shenyu +mkdir -p ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +git archive --format=tar --prefix=shenyu-client-rust-${PUBLISH.VERSION}/ ${PUBLISH.VERSION} | gzip > shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz +cd ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-rust/*.src.tar.gz ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-rust/*.src.tar.gz.asc ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +``` + +**3. Adding hashes** + +Follow [Requirements for cryptographic signatures and checksums](https://infra.apache.org/release-distribution#sigs-and-sums) [7] instructions. + +```shell +shasum -a 512 shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz > shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**4. Submit the new release** + +```shell +cd ~/svn_release/dev/shenyu/shenyu-client-rust +svn add ${PUBLISH.VERSION}/ +svn --username=${LDAP ID} commit -m "release shenyu-client-rust ${PUBLISH.VERSION}" +``` + +## Check Release + +**1. Verify sha512 checksum** + +Follow [Checking Hashes](https://www.apache.org/info/verification.html#CheckingHashes) [8] instructions. + +```shell +shasum -c shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**2. Verifying GPG Signatures** + +Follow [Checking Signatures](https://www.apache.org/info/verification.html#CheckingSignatures) [9] instructions. + +```shell +curl https://downloads.apache.org/shenyu/KEYS >> KEYS +gpg --import KEYS +cd ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +gpg --verify shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.asc shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz +``` + +**3. Ensure that SVN is consistent with GitHub source code** + +Follow [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] instructions. + +``` +wget https://github.com/apache/shenyu-client-rust/archive/v${PUBLISH.VERSION}.zip +unzip v${PUBLISH.VERSION}.zip +mv shenyu-client-rust-${PUBLISH.VERSION} shenyu-client-rust-${PUBLISH.VERSION}-src +unzip shenyu-client-rust-${PUBLISH.VERSION}.zip +diff -r -x "shenyu-examples" -x "shenyu-integrated-test" -x "static" shenyu-client-rust-${PUBLISH.VERSION}-src shenyu-client-rust-${PUBLISH.VERSION} +``` + +**4. Check the source code package** + +Follow [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] instructions. + +- `LICENSE` and `NOTICE` files exist +- The year in the `NOTICE` file is correct +- All files have ASF licenses at the beginning +- There are no `LICENSE` and `NOTICE` that do not depend on the software +- There are no binaries that do not meet expectations +- Compilation passes (. /mvnw install) (JAVA 8 is currently supported) +- If there are third-party code dependencies. + - License compatibility for third-party code dependencies + - All licenses of third-party code dependencies are named in the `LICENSE` file + - The full version of the third-party code dependency license is in the `license` directory + - If the dependency is an Apache license and there are `NOTICE` files, then these `NOTICE` files need to be added to the project's `NOTICE` file + +**5. Check the binary package** + +Follow [Binary distributions](https://infra.apache.org/licensing-howto.html#binary) [11] instructions. + +- `LICENSE` and `NOTICE` files exist +- The year in the `NOTICE` file is correct +- All text files start with an ASF license +- No `LICENSE` and `NOTICE` for undependent software +- If third-party code dependencies exist. + - Third-party code dependent licenses are compatible + - All licenses of third-party code dependencies are named in the `LICENSE` file + - The full version of the third-party code dependency license is in the `LICENSE` directory + - If the dependency is an Apache license and there are `NOTICE` files, then these `NOTICE` files need to be added to the project's `NOTICE` file + +## Voting Process + +Follow [RELEASE APPROVAL](https://www.apache.org/legal/release-policy.html#release-approval) [12], [Releases](https://incubator.apache.org/policy/incubation.html#Releases) [13], [voting](https://www.apache.org/foundation/voting.html) [14] instructions. + +### ShenYu community vote + +**1. Voting lasts for at least 72 hours and receives 3 `+1 binding` votes** + +To: + +``` [email protected] +``` + +Title: + +``` +[VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +Content: + +``` +Hello ShenYu Community, + +This is a call for vote to release Apache ShenYu Client Rust version ${PUBLISH.VERSION} + +Release notes: +https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md + +The release candidates: +https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION}/ + +Git tag for the release: +https://github.com/apache/shenyu-client-rust/tree/v${PUBLISH.VERSION}/ + +Release Commit ID: +https://github.com/apache/shenyu-client-rust/commit/xxxxxxxxxxxxxxxxxxxxxxx + +Keys to verify the Release Candidate: +https://downloads.apache.org/shenyu/KEYS + +Look at here for how to verify this release candidate: +https://shenyu.apache.org/community/shenyu-client-rust-release-guide/#check-release + +The vote will be open for at least 72 hours or until necessary number of votes are reached. + +Please vote accordingly: + +[ ] +1 approve + +[ ] +0 no opinion + +[ ] -1 disapprove with the reason + +Checklist for reference: + +[ ] Download links are valid. + +[ ] Checksums and PGP signatures are valid. + +[ ] Source code distributions have correct names matching the current release. + +[ ] LICENSE and NOTICE files are correct for each ShenYu Client Rust repo. + +[ ] All files have license headers if necessary. + +[ ] No compiled archives bundled in source archive. +``` + +**2. Announcement of voting results** + +To: + +``` [email protected] +``` + +Title: + +``` +[RESULT][VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +Content: + +``` +We’ve received 3 +1 binding votes and 2 +1 non-binding votes: + ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (non-binding) ++1, xxx (non-binding) + +Vote thread: +https://lists.apache.org/thread/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +Thanks everyone for taking the time to verify and vote for the release! +``` + +## Finish publishing + +**1. Finish SVN release** + +Follow [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] instructions. + +```shell +svn mv https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} https://dist.apache.org/repos/dist/release/shenyu/shenyu-client-rust/${PUBLISH.VERSION} -m "transfer packages for ${PUBLISH.VERSION}" +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PREVIOUS.RELEASE.VERSION} +``` + +**2. Finish GitHub release** + +Edit [Releases](https://github.com/apache/shenyu-client-rust/releases) `${PUBLISH.VERSION}` and click release. + +```shell +git tag -d ${PUBLISH.VERSION} +git push origin :refs/tags/${PUBLISH.VERSION} +``` + +**3. Update download page** + +Follow [Release Download Pages for Projects](https://infra.apache.org/release-download-pages.html) [15], [Normal distribution on the Apache downloads site](https://infra.apache.org/release-publishing.html#normal) [16] instructions. + +After the Apache mirror links take effect (at least one hour), update the download page for: +[English version](https://shenyu.apache.org/download/) and +[Chinese version](https://shenyu.apache.org/zh/download/) + +> Note: Project download links should use https://www.apache.org/dyn/closer.lua instead of closer.cgi or mirrors.cgi +> +> Note: Download links for GPG signature files and hash-check files must use this prefix: `https://downloads.apache.org/shenyu/` + +**4. Update documentation** + +Archive the `${PUBLISH.VERSION}` version of the [document](https://github.com/apache/shenyu-website) and update the [version page](https://shenyu.apache.org/versions/). + +**5. Update event page** + +Add new release [event](https://shenyu.apache.org/event/${PUBLISH.VERSION}-release). + +**6. Update news page** + +Add new release [news](https://shenyu.apache.org/zh/news). + +## Release Announcement + +> Note: `[email protected]` address requires the email to be sent in plain text format. If you are using Gmail, you can check `Plain Text Mode` in the edit screen. + +To: + +``` [email protected] [email protected] +``` + +Title: + +``` +[ANNOUNCE] Apache ShenYu Client Rust ${PUBLISH.VERSION} available +``` + +Content: + +``` +Hi, + +Apache ShenYu Team is glad to announce the new release of Apache ShenYu Client Rust ${PUBLISH.VERSION}. + +Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway. +Support various languages (http protocol), support Dubbo, Spring-Cloud, Grpc, Motan, Sofa, Tars and other protocols. +Plugin design idea, plugin hot swap, easy to expand. +Flexible flow filtering to meet various flow control. +Built-in rich plugin support, authentication, limiting, fuse, firewall, etc. +Dynamic flow configuration, high performance. +Support cluster deployment, A/B Test, blue-green release. + +Download Links: https://shenyu.apache.org/download/ + +Release Notes: https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md + +Website: https://shenyu.apache.org/ + +ShenYu Resources: +- Issue: https://github.com/apache/shenyu/issues +- Mailing list: [email protected] +- Documents: https://shenyu.apache.org/docs/index/ + + +- Apache ShenYu Team + +``` + +## Reissue (not required) + +> Note: You only need to republish if the vote did not pass. + +**1. Cancellation of voting email template** + +To: + +``` [email protected] +``` + +Title: + +``` +[CANCEL][VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +Content: + +``` +Hi, + +I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process. +The detail of the modifications are as follows: + +1. xxxxxx +2. xxxxxx + +Thanks a lot for all your help. +``` + +**2. Clean stagingRepositories** + +Go to https://repository.apache.org/#stagingRepositories, After logging in with your Apache LDAP account, select the previous `Close` version and click `Drop`. + +**3。Deleting GitHub branches and tags** + +```shell +git push origin --delete ${PUBLISH.VERSION}-release +git branch -D ${PUBLISH.VERSION}-release +git push origin --delete tag v${PUBLISH.VERSION} +git tag -d v${PUBLISH.VERSION} +``` + +**4. Deleting SVN content to be published** + +```shell +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} -m "delete ${PUBLISH.VERSION}" +``` + +**5. Update email title** + +After completing the above steps, you can start the re-posting operation. The next poll email title needs to have the `[ROUND ${n}]` suffix added. For example. + +``` +[VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} [ROUND 2] +``` + +Voting result and announcement emails do not need to be suffixed. + +**The content refers to** + +- [1] https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management +- [2] https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands +- [3] https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options +- [4] https://infra.apache.org/publishing-maven-artifacts.html +- [5] https://infra.apache.org/release-signing.html#signing-basics +- [6] https://infra.apache.org/release-publishing.html#uploading +- [7] https://infra.apache.org/release-distribution#sigs-and-sums +- [8] https://www.apache.org/info/verification.html#CheckingHashes +- [9] https://www.apache.org/info/verification.html#CheckingSignatures +- [10] https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist +- [11] https://infra.apache.org/licensing-howto.html#binary +- [12] https://www.apache.org/legal/release-policy.html#release-approval +- [13] https://incubator.apache.org/policy/incubation.html#Releases +- [14] https://www.apache.org/foundation/voting.html +- [15] https://infra.apache.org/release-download-pages.html +- [16] https://infra.apache.org/release-publishing.html#normal diff --git a/i18n/zh/docusaurus-plugin-content-docs-community/current/18-shenyu-client-python-release-guide.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/18-shenyu-client-python-release-guide.md new file mode 100755 index 0000000000..8f4930aa32 --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs-community/current/18-shenyu-client-python-release-guide.md @@ -0,0 +1,533 @@ +--- +title: ShenYu python语言客户端发布指南 +sidebar_position: 18 +description: Apache ShenYu python语言客户端发布指南 +cover: "/img/architecture/shenyu-framework.png" +--- + +## 更新发布公告 + +按照如下格式更新[发布公告](https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md): + +``` +## ${PUBLISH.VERSION} + +### New Features + +1. xxx +1. xxx +... + +### API Changes + +1. xxx +1. xxx +... + +### Enhancement + +1. xxx +1. xxx +... + +### Refactor + +1. xxx +1. xxx +... + +### Bug Fix + +1. xxx +1. xxx +... +``` + +## 创建 GPG KEY + +> 每个发布经理只在第一次发布时创建 GPG KEY,以后发布可复用此 KEY。 + +**1. 创建 KEY** + +安装 [GnuPG](https://www.gnupg.org/download/index.html)。 + +按照 [OpenPGP KEY Management](https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management) [1] 的说明创建 KEY: + +```shell +gpg --full-gen-key +``` + +创建步骤(以下内容来自控制台输出): + +```shell +gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) +Your selection? 1 +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (2048) 4096 +Requested keysize is 4096 bits +Please specify how long the key should be valid. + 0 = key does not expire + <n> = key expires in n days + <n>w = key expires in n weeks + <n>m = key expires in n months + <n>y = key expires in n years +Key is valid for? (0) +Key does not expire at all +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: (设置用户名)(使用apache id) +Email address: (设置邮件地址)(使用apache邮箱) +Comment: (填写注释) +You selected this USER-ID: + "用户名 (注释) <邮件地址>" + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +You need a Passphrase to protect your secret key. (设置密码) +``` + +**2. 检查 KEY** + +按照 [Operational GPG Commands](https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands) [2] 的说明检查 KEY: + +```shell +gpg --list-keys +``` + +命令输出: + +```shell +pub rsa4096 2019-03-11 [SC] + 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +uid 用户名 (注释) <邮件地址> +sub rsa4096 2019-03-11 [E] +``` + +公钥为 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C。 + +**3. 上传公钥** + +按照 [Dirmngr Options](https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options) [3] 的说明上传公钥: + +```shell +gpg --send-key 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +``` + +## 发布前的准备工作 + +**1. 发布一个新标签** + +下载并安装 [Git](https://git-scm.com/downloads). + +创建并切换到 `${PUBLISH.VERSION}` 标签. + +```shell +git clone https://github.com/apache/shenyu-client-python.git ~/shenyu-client-python +cd ~/shenyu-client-python/ +git checkout main +git tag -a ${PUBLISH.VERSION} -m "${PUBLISH.VERSION} release shenyu client python" +``` + +提交更新版本号后的代码和新标签。 + +```shell +git push origin --tags +``` + +## 发布到 SVN 预发仓库 + +下载并安装[SVN](https://tortoisesvn.net/downloads.html)。 + +**1. 更新 KEYS 文件** + +> 如果发布经理还没有将自己的公钥追加到 KEYS 文件中,请执行以下操作。否则,跳过此步骤。 + +根据 [signing basics](https://infra.apache.org/release-signing.html#signing-basics) [5] 的说明更新 KEYS 文件。 + +```shell +mkdir -p ~/keys/release/ +cd ~/keys/release/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/release/shenyu +cd ~/keys/release/shenyu +gpg -a --export ${GPG 用户名} >> KEYS +svn --username=${LDAP ID} commit -m "append to KEYS" +``` + +**2. 添加源码包和二进制文件包** + +根据 [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] 的说明添加源码包和二进制文件包。 + +```shell +mkdir -p ~/svn_release/dev/ +cd ~/svn_release/dev/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/dev/shenyu +mkdir -p ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +git archive --format=tar --prefix=shenyu-client-python-${PUBLISH.VERSION}/ ${PUBLISH.VERSION} | gzip > shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz +cd ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-python/*.src.tar.gz ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-python/*.src.tar.gz.asc ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +``` + +**3. 添加校验文件** + +根据 [Requirements for cryptographic signatures and checksums](https://infra.apache.org/release-distribution#sigs-and-sums) [7] 的说明添加校验文件。 + +```shell +shasum -a 512 shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz > shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**4. 提交新版本** + +```shell +cd ~/svn_release/dev/shenyu/shenyu-client-python +svn add ${PUBLISH.VERSION}/ +svn --username=${LDAP ID} commit -m "release shenyu-client-python ${PUBLISH.VERSION}" +``` + +## 预发版本验证 + +**1. 验证 sha512 校验和** + +根据 [Checking Hashes](https://www.apache.org/info/verification.html#CheckingHashes) [8] 的说明验证 sha512 校验和。 + +```shell +shasum -c shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**2. 验证 GPG 签名** + +根据 [Checking Signatures](https://www.apache.org/info/verification.html#CheckingSignatures) [9] 的说明验证 GPG 签名。 + +```shell +curl https://downloads.apache.org/shenyu/KEYS >> KEYS +gpg --import KEYS +cd ~/svn_release/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} +gpg --verify shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz.asc shenyu-client-python-${PUBLISH.VERSION}-src.tar.gz +``` + +**3. 确保 SVN 与 GitHub 源码一致** + +根据 [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] 的说明确保 SVN 与 GitHub 源码一致。 + +``` +wget https://github.com/apache/shenyu-client-python/archive/v${PUBLISH.VERSION}.zip +unzip v${PUBLISH.VERSION}.zip +mv shenyu-client-python-${PUBLISH.VERSION} shenyu-client-python-${PUBLISH.VERSION}-src +unzip shenyu-client-python-${PUBLISH.VERSION}.zip +diff -r -x "shenyu-examples" -x "shenyu-integrated-test" -x "static" shenyu-client-python-${PUBLISH.VERSION}-src shenyu-client-python-${PUBLISH.VERSION} +``` + +**4. 检查源码包** + +根据 [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] 的说明检查源码包。 + +- 存在 `LICENSE` 和 `NOTICE` 文件 +- `NOTICE` 文件中的年份正确 +- 所有文件的开头都有 ASF 许可证 +- 不存在未依赖软件的 `LICENSE` 和 `NOTICE` +- 不存在不符合预期的二进制文件 +- 编译通过 (./mvnw install) (目前支持 JAVA 8) +- 如果存在第三方代码依赖: + - 第三方代码依赖的许可证兼容 + - 所有第三方代码依赖的许可证都在 `LICENSE` 文件中声名 + - 第三方代码依赖许可证的完整版全部在 `license` 目录 + - 如果依赖的是 Apache 许可证并且有 `NOTICE` 文件,那么这些 `NOTICE` 文件需要加入到项目的 `NOTICE` 文件中 + +**5. 检查二进制包** + +根据 [Binary distributions](https://infra.apache.org/licensing-howto.html#binary) [11] 的说明检查二进制包。 + +- 存在 `LICENSE` 和 `NOTICE` 文件 +- `NOTICE` 文件中的年份正确 +- 所有文本文件开头都有 ASF 许可证 +- 不存在未依赖软件的 `LICENSE` 和 `NOTICE` +- 如果存在第三方代码依赖: + - 第三方代码依赖的许可证兼容 + - 所有第三方代码依赖的许可证都在 `LICENSE` 文件中声名 + - 第三方代码依赖许可证的完整版全部在 `license` 目录 + - 如果依赖的是 Apache 许可证并且有 `NOTICE` 文件,那么这些 `NOTICE` 文件需要加入到项目的 `NOTICE` 文件中 + +## 投票流程 + +根据 [RELEASE APPROVAL](https://www.apache.org/legal/release-policy.html#release-approval) [12], [Releases](https://incubator.apache.org/policy/incubation.html#Releases) [13], [voting](https://www.apache.org/foundation/voting.html) [14] 的说明进行社区投票。 + +### ShenYu 社区投票 + +**1. 投票持续至少 72 小时并获得 3 个`+1 binding`票** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +正文: + +``` +Hello ShenYu Community, + +This is a call for vote to release Apache ShenYu Client Python version ${PUBLISH.VERSION} + +Release notes: +https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md + +The release candidates: +https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION}/ + +Git tag for the release: +https://github.com/apache/shenyu-client-python/tree/v${PUBLISH.VERSION}/ + +Release Commit ID: +https://github.com/apache/shenyu-client-python/commit/xxxxxxxxxxxxxxxxxxxxxxx + +Keys to verify the Release Candidate: +https://downloads.apache.org/shenyu/KEYS + +Look at here for how to verify this release candidate: +https://shenyu.apache.org/community/shenyu-client-python-release-guide/#check-release + +The vote will be open for at least 72 hours or until necessary number of votes are reached. + +Please vote accordingly: + +[ ] +1 approve + +[ ] +0 no opinion + +[ ] -1 disapprove with the reason + +Checklist for reference: + +[ ] Download links are valid. + +[ ] Checksums and PGP signatures are valid. + +[ ] Source code distributions have correct names matching the current release. + +[ ] LICENSE and NOTICE files are correct for each ShenYu Client Python repo. + +[ ] All files have license headers if necessary. + +[ ] No compiled archives bundled in source archive. +``` + +**2. 宣布投票结果** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[RESULT][VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +正文: + +``` +We’ve received 3 +1 binding votes and 2 +1 non-binding votes: + ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (non-binding) ++1, xxx (non-binding) + +Vote thread: +https://lists.apache.org/thread/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +Thanks everyone for taking the time to verify and vote for the release! +``` + +## 完成发布 + +**1. 完成 SVN 发布** + +根据 [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] 的说明将新版本从 dev 目录转移到 release 目录。 + +```shell +svn mv https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} https://dist.apache.org/repos/dist/release/shenyu/shenyu-client-python/${PUBLISH.VERSION} -m "transfer packages for ${PUBLISH.VERSION}" +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PREVIOUS.RELEASE.VERSION} +``` + +**2. 完成 GitHub 发布** + +Edit [Releases](https://github.com/apache/shenyu-client-python/releases) `${PUBLISH.VERSION}` and click release. + +从 GitHub Fork 一份代码,并执行以下命令: + +```shell +git tag -d ${PUBLISH.VERSION} +git push origin :refs/tags/${PUBLISH.VERSION} +``` + + +**3. 更新下载页面** + +根据 [Release Download Pages for Projects](https://infra.apache.org/release-download-pages.html) [15], [Normal distribution on the Apache downloads site](https://infra.apache.org/release-publishing.html#normal) [16] 的说明更新下载页面。 + +Apache 镜像连接生效后(至少一小时),更新下载页面: +[英文版](https://shenyu.apache.org/download/) 和 +[中文版](https://shenyu.apache.org/zh/download/) + +> 注意:项目下载链接应该使用 https://www.apache.org/dyn/closer.lua 而不是 closer.cgi 或者 mirrors.cgi +> +> 注意:GPG 签名文件和哈希校验文件的下载连接必须使用这个前缀:`https://downloads.apache.org/shenyu/` + +**4. 更新文档** + +将 `${PUBLISH.VERSION}` 版本的[文档](https://github.com/apache/shenyu-website)进行归档,并更新[版本页面](https://shenyu.apache.org/zh/versions)。 + +**5. 更新事件页面** + +添加新版本[事件](https://shenyu.apache.org/zh/event/${PUBLISH.VERSION}-release)。 + +**6. 更新新闻页面** + +添加新版本[新闻](https://shenyu.apache.org/zh/news)。 + +## 发布公告 + +> 注意:`[email protected]` 地址要求以纯文本格式发送邮件。如果你使用的是 Gmail,可以在编辑界面勾选`纯文本模式`。 + +发送至: + +``` [email protected] [email protected] +``` + +标题: + +``` +[ANNOUNCE] Apache ShenYu Client Python ${PUBLISH.VERSION} available +``` + +正文: + +``` +Hi, + +Apache ShenYu Team is glad to announce the new release of Apache ShenYu Client Python ${PUBLISH.VERSION}. + +Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway. +Support various languages (http protocol), support Dubbo, Spring-Cloud, Grpc, Motan, Sofa, Tars and other protocols. +Plugin design idea, plugin hot swap, easy to expand. +Flexible flow filtering to meet various flow control. +Built-in rich plugin support, authentication, limiting, fuse, firewall, etc. +Dynamic flow configuration, high performance. +Support cluster deployment, A/B Test, blue-green release. + +Download Links: https://shenyu.apache.org/download/ + +Release Notes: https://github.com/apache/shenyu-client-python/blob/main/RELEASE-NOTES.md + +Website: https://shenyu.apache.org/ + +ShenYu Resources: +- Issue: https://github.com/apache/shenyu/issues +- Mailing list: [email protected] +- Documents: https://shenyu.apache.org/docs/index/ + + +- Apache ShenYu Team + +``` + +## 重新发布(非必需) + +> 注意:只有在投票没有通过的情况下才需要重新发布。 + +**1. 取消投票邮件模板** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[CANCEL][VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} +``` + +正文: + +``` +Hi, + +I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process. +The detail of the modifications are as follows: + +1. xxxxxx +2. xxxxxx + +Thanks a lot for all your help. +``` + +**2. 清理预发仓库** + +访问 https://repository.apache.org/#stagingRepositories, 使用 Apache 的 LDAP 账户登录后,选中之前 `Close` 的版本,点击 `Drop`。 + +**3. 删除 GitHub 分支和标签** + +```shell +git push origin --delete ${PUBLISH.VERSION}-release +git branch -D ${PUBLISH.VERSION}-release +git push origin --delete tag v${PUBLISH.VERSION} +git tag -d v${PUBLISH.VERSION} +``` + +**4. 删除 SVN 待发布内容** + +```shell +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-python/${PUBLISH.VERSION} -m "delete ${PUBLISH.VERSION}" +``` + +**5. 更新邮件标题** + +完成以上步骤后,可以开始重新进行发布操作。接下来的投票邮件标题需要增加 `[ROUND ${n}]` 后缀。例如: + +``` +[VOTE] Release Apache ShenYu Client Python ${PUBLISH.VERSION} [ROUND 2] +``` + +投票结果和通知邮件不需要加后缀。 + +**以上内容参考** + +- [1] https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management +- [2] https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands +- [3] https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options +- [4] https://infra.apache.org/publishing-maven-artifacts.html +- [5] https://infra.apache.org/release-signing.html#signing-basics +- [6] https://infra.apache.org/release-publishing.html#uploading +- [7] https://infra.apache.org/release-distribution#sigs-and-sums +- [8] https://www.apache.org/info/verification.html#CheckingHashes +- [9] https://www.apache.org/info/verification.html#CheckingSignatures +- [10] https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist +- [11] https://infra.apache.org/licensing-howto.html#binary +- [12] https://www.apache.org/legal/release-policy.html#release-approval +- [13] https://incubator.apache.org/policy/incubation.html#Releases +- [14] https://www.apache.org/foundation/voting.html +- [15] https://infra.apache.org/release-download-pages.html +- [16] https://infra.apache.org/release-publishing.html#normal diff --git a/i18n/zh/docusaurus-plugin-content-docs-community/current/19-shenyu-client-rust-release-guide.md b/i18n/zh/docusaurus-plugin-content-docs-community/current/19-shenyu-client-rust-release-guide.md new file mode 100755 index 0000000000..738b44bc9e --- /dev/null +++ b/i18n/zh/docusaurus-plugin-content-docs-community/current/19-shenyu-client-rust-release-guide.md @@ -0,0 +1,533 @@ +--- +title: ShenYu rust语言客户端发布指南 +sidebar_position: 19 +description: Apache ShenYu rust语言客户端发布指南 +cover: "/img/architecture/shenyu-framework.png" +--- + +## 更新发布公告 + +按照如下格式更新[发布公告](https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md): + +``` +## ${PUBLISH.VERSION} + +### New Features + +1. xxx +1. xxx +... + +### API Changes + +1. xxx +1. xxx +... + +### Enhancement + +1. xxx +1. xxx +... + +### Refactor + +1. xxx +1. xxx +... + +### Bug Fix + +1. xxx +1. xxx +... +``` + +## 创建 GPG KEY + +> 每个发布经理只在第一次发布时创建 GPG KEY,以后发布可复用此 KEY。 + +**1. 创建 KEY** + +安装 [GnuPG](https://www.gnupg.org/download/index.html)。 + +按照 [OpenPGP KEY Management](https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management) [1] 的说明创建 KEY: + +```shell +gpg --full-gen-key +``` + +创建步骤(以下内容来自控制台输出): + +```shell +gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc. +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. + +Please select what kind of key you want: + (1) RSA and RSA (default) + (2) DSA and Elgamal + (3) DSA (sign only) + (4) RSA (sign only) +Your selection? 1 +RSA keys may be between 1024 and 4096 bits long. +What keysize do you want? (2048) 4096 +Requested keysize is 4096 bits +Please specify how long the key should be valid. + 0 = key does not expire + <n> = key expires in n days + <n>w = key expires in n weeks + <n>m = key expires in n months + <n>y = key expires in n years +Key is valid for? (0) +Key does not expire at all +Is this correct? (y/N) y + +GnuPG needs to construct a user ID to identify your key. + +Real name: (设置用户名)(使用apache id) +Email address: (设置邮件地址)(使用apache邮箱) +Comment: (填写注释) +You selected this USER-ID: + "用户名 (注释) <邮件地址>" + +Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O +You need a Passphrase to protect your secret key. (设置密码) +``` + +**2. 检查 KEY** + +按照 [Operational GPG Commands](https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands) [2] 的说明检查 KEY: + +```shell +gpg --list-keys +``` + +命令输出: + +```shell +pub rsa4096 2019-03-11 [SC] + 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +uid 用户名 (注释) <邮件地址> +sub rsa4096 2019-03-11 [E] +``` + +公钥为 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C。 + +**3. 上传公钥** + +按照 [Dirmngr Options](https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options) [3] 的说明上传公钥: + +```shell +gpg --send-key 095E0D21BC28CFC7A8B8076DF7DF28D237A8048C +``` + +## 发布前的准备工作 + +**1. 发布一个新标签** + +下载并安装 [Git](https://git-scm.com/downloads). + +创建并切换到 `${PUBLISH.VERSION}` 标签. + +```shell +git clone https://github.com/apache/shenyu-client-rust.git ~/shenyu-client-rust +cd ~/shenyu-client-rust/ +git checkout main +git tag -a ${PUBLISH.VERSION} -m "${PUBLISH.VERSION} release shenyu client rust" +``` + +提交更新版本号后的代码和新标签。 + +```shell +git push origin --tags +``` + +## 发布到 SVN 预发仓库 + +下载并安装[SVN](https://tortoisesvn.net/downloads.html)。 + +**1. 更新 KEYS 文件** + +> 如果发布经理还没有将自己的公钥追加到 KEYS 文件中,请执行以下操作。否则,跳过此步骤。 + +根据 [signing basics](https://infra.apache.org/release-signing.html#signing-basics) [5] 的说明更新 KEYS 文件。 + +```shell +mkdir -p ~/keys/release/ +cd ~/keys/release/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/release/shenyu +cd ~/keys/release/shenyu +gpg -a --export ${GPG 用户名} >> KEYS +svn --username=${LDAP ID} commit -m "append to KEYS" +``` + +**2. 添加源码包和二进制文件包** + +根据 [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] 的说明添加源码包和二进制文件包。 + +```shell +mkdir -p ~/svn_release/dev/ +cd ~/svn_release/dev/ +svn --username=${LDAP ID} co https://dist.apache.org/repos/dist/dev/shenyu +mkdir -p ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +git archive --format=tar --prefix=shenyu-client-rust-${PUBLISH.VERSION}/ ${PUBLISH.VERSION} | gzip > shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz +cd ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-rust/*.src.tar.gz ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +cp -f ~/shenyu/shenyu-client-rust/*.src.tar.gz.asc ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +``` + +**3. 添加校验文件** + +根据 [Requirements for cryptographic signatures and checksums](https://infra.apache.org/release-distribution#sigs-and-sums) [7] 的说明添加校验文件。 + +```shell +shasum -a 512 shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz > shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**4. 提交新版本** + +```shell +cd ~/svn_release/dev/shenyu/shenyu-client-rust +svn add ${PUBLISH.VERSION}/ +svn --username=${LDAP ID} commit -m "release shenyu-client-rust ${PUBLISH.VERSION}" +``` + +## 预发版本验证 + +**1. 验证 sha512 校验和** + +根据 [Checking Hashes](https://www.apache.org/info/verification.html#CheckingHashes) [8] 的说明验证 sha512 校验和。 + +```shell +shasum -c shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.sha512 +``` + +**2. 验证 GPG 签名** + +根据 [Checking Signatures](https://www.apache.org/info/verification.html#CheckingSignatures) [9] 的说明验证 GPG 签名。 + +```shell +curl https://downloads.apache.org/shenyu/KEYS >> KEYS +gpg --import KEYS +cd ~/svn_release/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} +gpg --verify shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz.asc shenyu-client-rust-${PUBLISH.VERSION}-src.tar.gz +``` + +**3. 确保 SVN 与 GitHub 源码一致** + +根据 [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] 的说明确保 SVN 与 GitHub 源码一致。 + +``` +wget https://github.com/apache/shenyu-client-rust/archive/v${PUBLISH.VERSION}.zip +unzip v${PUBLISH.VERSION}.zip +mv shenyu-client-rust-${PUBLISH.VERSION} shenyu-client-rust-${PUBLISH.VERSION}-src +unzip shenyu-client-rust-${PUBLISH.VERSION}.zip +diff -r -x "shenyu-examples" -x "shenyu-integrated-test" -x "static" shenyu-client-rust-${PUBLISH.VERSION}-src shenyu-client-rust-${PUBLISH.VERSION} +``` + +**4. 检查源码包** + +根据 [Incubator Release Checklist](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist) [10] 的说明检查源码包。 + +- 存在 `LICENSE` 和 `NOTICE` 文件 +- `NOTICE` 文件中的年份正确 +- 所有文件的开头都有 ASF 许可证 +- 不存在未依赖软件的 `LICENSE` 和 `NOTICE` +- 不存在不符合预期的二进制文件 +- 编译通过 (./mvnw install) (目前支持 JAVA 8) +- 如果存在第三方代码依赖: + - 第三方代码依赖的许可证兼容 + - 所有第三方代码依赖的许可证都在 `LICENSE` 文件中声名 + - 第三方代码依赖许可证的完整版全部在 `license` 目录 + - 如果依赖的是 Apache 许可证并且有 `NOTICE` 文件,那么这些 `NOTICE` 文件需要加入到项目的 `NOTICE` 文件中 + +**5. 检查二进制包** + +根据 [Binary distributions](https://infra.apache.org/licensing-howto.html#binary) [11] 的说明检查二进制包。 + +- 存在 `LICENSE` 和 `NOTICE` 文件 +- `NOTICE` 文件中的年份正确 +- 所有文本文件开头都有 ASF 许可证 +- 不存在未依赖软件的 `LICENSE` 和 `NOTICE` +- 如果存在第三方代码依赖: + - 第三方代码依赖的许可证兼容 + - 所有第三方代码依赖的许可证都在 `LICENSE` 文件中声名 + - 第三方代码依赖许可证的完整版全部在 `license` 目录 + - 如果依赖的是 Apache 许可证并且有 `NOTICE` 文件,那么这些 `NOTICE` 文件需要加入到项目的 `NOTICE` 文件中 + +## 投票流程 + +根据 [RELEASE APPROVAL](https://www.apache.org/legal/release-policy.html#release-approval) [12], [Releases](https://incubator.apache.org/policy/incubation.html#Releases) [13], [voting](https://www.apache.org/foundation/voting.html) [14] 的说明进行社区投票。 + +### ShenYu 社区投票 + +**1. 投票持续至少 72 小时并获得 3 个`+1 binding`票** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +正文: + +``` +Hello ShenYu Community, + +This is a call for vote to release Apache ShenYu Client Rust version ${PUBLISH.VERSION} + +Release notes: +https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md + +The release candidates: +https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION}/ + +Git tag for the release: +https://github.com/apache/shenyu-client-rust/tree/v${PUBLISH.VERSION}/ + +Release Commit ID: +https://github.com/apache/shenyu-client-rust/commit/xxxxxxxxxxxxxxxxxxxxxxx + +Keys to verify the Release Candidate: +https://downloads.apache.org/shenyu/KEYS + +Look at here for how to verify this release candidate: +https://shenyu.apache.org/community/shenyu-client-rust-release-guide/#check-release + +The vote will be open for at least 72 hours or until necessary number of votes are reached. + +Please vote accordingly: + +[ ] +1 approve + +[ ] +0 no opinion + +[ ] -1 disapprove with the reason + +Checklist for reference: + +[ ] Download links are valid. + +[ ] Checksums and PGP signatures are valid. + +[ ] Source code distributions have correct names matching the current release. + +[ ] LICENSE and NOTICE files are correct for each ShenYu Client Rust repo. + +[ ] All files have license headers if necessary. + +[ ] No compiled archives bundled in source archive. +``` + +**2. 宣布投票结果** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[RESULT][VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +正文: + +``` +We’ve received 3 +1 binding votes and 2 +1 non-binding votes: + ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (binding) ++1, xxx (non-binding) ++1, xxx (non-binding) + +Vote thread: +https://lists.apache.org/thread/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + +Thanks everyone for taking the time to verify and vote for the release! +``` + +## 完成发布 + +**1. 完成 SVN 发布** + +根据 [Uploading packages](https://infra.apache.org/release-publishing.html#uploading) [6] 的说明将新版本从 dev 目录转移到 release 目录。 + +```shell +svn mv https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} https://dist.apache.org/repos/dist/release/shenyu/shenyu-client-rust/${PUBLISH.VERSION} -m "transfer packages for ${PUBLISH.VERSION}" +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PREVIOUS.RELEASE.VERSION} +``` + +**2. 完成 GitHub 发布** + +Edit [Releases](https://github.com/apache/shenyu-client-rust/releases) `${PUBLISH.VERSION}` and click release. + +从 GitHub Fork 一份代码,并执行以下命令: + +```shell +git tag -d ${PUBLISH.VERSION} +git push origin :refs/tags/${PUBLISH.VERSION} +``` + + +**3. 更新下载页面** + +根据 [Release Download Pages for Projects](https://infra.apache.org/release-download-pages.html) [15], [Normal distribution on the Apache downloads site](https://infra.apache.org/release-publishing.html#normal) [16] 的说明更新下载页面。 + +Apache 镜像连接生效后(至少一小时),更新下载页面: +[英文版](https://shenyu.apache.org/download/) 和 +[中文版](https://shenyu.apache.org/zh/download/) + +> 注意:项目下载链接应该使用 https://www.apache.org/dyn/closer.lua 而不是 closer.cgi 或者 mirrors.cgi +> +> 注意:GPG 签名文件和哈希校验文件的下载连接必须使用这个前缀:`https://downloads.apache.org/shenyu/` + +**4. 更新文档** + +将 `${PUBLISH.VERSION}` 版本的[文档](https://github.com/apache/shenyu-website)进行归档,并更新[版本页面](https://shenyu.apache.org/zh/versions)。 + +**5. 更新事件页面** + +添加新版本[事件](https://shenyu.apache.org/zh/event/${PUBLISH.VERSION}-release)。 + +**6. 更新新闻页面** + +添加新版本[新闻](https://shenyu.apache.org/zh/news)。 + +## 发布公告 + +> 注意:`[email protected]` 地址要求以纯文本格式发送邮件。如果你使用的是 Gmail,可以在编辑界面勾选`纯文本模式`。 + +发送至: + +``` [email protected] [email protected] +``` + +标题: + +``` +[ANNOUNCE] Apache ShenYu Client Rust ${PUBLISH.VERSION} available +``` + +正文: + +``` +Hi, + +Apache ShenYu Team is glad to announce the new release of Apache ShenYu Client Rust ${PUBLISH.VERSION}. + +Apache ShenYu is an asynchronous, high-performance, cross-language, responsive API gateway. +Support various languages (http protocol), support Dubbo, Spring-Cloud, Grpc, Motan, Sofa, Tars and other protocols. +Plugin design idea, plugin hot swap, easy to expand. +Flexible flow filtering to meet various flow control. +Built-in rich plugin support, authentication, limiting, fuse, firewall, etc. +Dynamic flow configuration, high performance. +Support cluster deployment, A/B Test, blue-green release. + +Download Links: https://shenyu.apache.org/download/ + +Release Notes: https://github.com/apache/shenyu-client-rust/blob/main/RELEASE-NOTES.md + +Website: https://shenyu.apache.org/ + +ShenYu Resources: +- Issue: https://github.com/apache/shenyu/issues +- Mailing list: [email protected] +- Documents: https://shenyu.apache.org/docs/index/ + + +- Apache ShenYu Team + +``` + +## 重新发布(非必需) + +> 注意:只有在投票没有通过的情况下才需要重新发布。 + +**1. 取消投票邮件模板** + +发送至: + +``` [email protected] +``` + +标题: + +``` +[CANCEL][VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} +``` + +正文: + +``` +Hi, + +I'm cancelling this vote because of xxxxxx issues. I'll fix them and start the round ${n} vote process. +The detail of the modifications are as follows: + +1. xxxxxx +2. xxxxxx + +Thanks a lot for all your help. +``` + +**2. 清理预发仓库** + +访问 https://repository.apache.org/#stagingRepositories, 使用 Apache 的 LDAP 账户登录后,选中之前 `Close` 的版本,点击 `Drop`。 + +**3. 删除 GitHub 分支和标签** + +```shell +git push origin --delete ${PUBLISH.VERSION}-release +git branch -D ${PUBLISH.VERSION}-release +git push origin --delete tag v${PUBLISH.VERSION} +git tag -d v${PUBLISH.VERSION} +``` + +**4. 删除 SVN 待发布内容** + +```shell +svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-rust/${PUBLISH.VERSION} -m "delete ${PUBLISH.VERSION}" +``` + +**5. 更新邮件标题** + +完成以上步骤后,可以开始重新进行发布操作。接下来的投票邮件标题需要增加 `[ROUND ${n}]` 后缀。例如: + +``` +[VOTE] Release Apache ShenYu Client Rust ${PUBLISH.VERSION} [ROUND 2] +``` + +投票结果和通知邮件不需要加后缀。 + +**以上内容参考** + +- [1] https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html#OpenPGP-Key-Management +- [2] https://www.gnupg.org/documentation/manuals/gnupg/Operational-GPG-Commands.html#Operational-GPG-Commands +- [3] https://www.gnupg.org/documentation/manuals/gnupg/Dirmngr-Options.html#Dirmngr-Options +- [4] https://infra.apache.org/publishing-maven-artifacts.html +- [5] https://infra.apache.org/release-signing.html#signing-basics +- [6] https://infra.apache.org/release-publishing.html#uploading +- [7] https://infra.apache.org/release-distribution#sigs-and-sums +- [8] https://www.apache.org/info/verification.html#CheckingHashes +- [9] https://www.apache.org/info/verification.html#CheckingSignatures +- [10] https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist +- [11] https://infra.apache.org/licensing-howto.html#binary +- [12] https://www.apache.org/legal/release-policy.html#release-approval +- [13] https://incubator.apache.org/policy/incubation.html#Releases +- [14] https://www.apache.org/foundation/voting.html +- [15] https://infra.apache.org/release-download-pages.html +- [16] https://infra.apache.org/release-publishing.html#normal
