blob: 4abe26744891799f98b8139685e77d425c5f6e60 [file] [log] [blame] [view]
---
title: ShenYu client Golang Release Guide
sidebar_position: 14
description: Apache ShenYu-client-golang Release Guide
cover: "/img/architecture/shenyu-framework.png"
---
## Update release notes
Update [RELEASE-NOTES](https://github.com/apache/shenyu-client-golang/blob/master/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-golang.git ~/shenyu-client-golang
cd ~/shenyu-client-golang/
git checkout master
git tag -a ${PUBLISH.VERSION} -m "${PUBLISH.VERSION} release shenyu client golang"
```
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-golang/${PUBLISH.VERSION}
git archive --format=tar --prefix=shenyu-client-golang-${PUBLISH.VERSION}/ ${PUBLISH.VERSION} | gzip > shenyu-client-golang-${PUBLISH.VERSION}-src.tar.gz
cd ~/svn_release/dev/shenyu/shenyu-client-golang/${PUBLISH.VERSION}
cp -f ~/shenyu/shenyu-client-golang/*.src.tar.gz ~/svn_release/dev/shenyu/shenyu-client-golang/${PUBLISH.VERSION}
cp -f ~/shenyu/shenyu-client-golang/*.src.tar.gz.asc ~/svn_release/dev/shenyu/shenyu-client-golang/${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-golang-${PUBLISH.VERSION}-src.tar.gz > shenyu-client-golang-${PUBLISH.VERSION}-src.tar.gz.sha512
```
**4. Submit the new release**
```shell
cd ~/svn_release/dev/shenyu/shenyu-client-golang
svn add ${PUBLISH.VERSION}/
svn --username=${LDAP ID} commit -m "release shenyu-client-golang ${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-golang-${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-golang/${PUBLISH.VERSION}
gpg --verify shenyu-client-golang-${PUBLISH.VERSION}-src.tar.gz.asc shenyu-client-golang-${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-golang/archive/v${PUBLISH.VERSION}.zip
unzip v${PUBLISH.VERSION}.zip
mv shenyu-client-golang-${PUBLISH.VERSION} shenyu-client-golang-${PUBLISH.VERSION}-src
unzip shenyu-client-golang-${PUBLISH.VERSION}.zip
diff -r -x "shenyu-examples" -x "shenyu-integrated-test" -x "static" shenyu-client-golang-${PUBLISH.VERSION}-src shenyu-client-golang-${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:
```
dev@shenyu.apache.org
```
Title:
```
[VOTE] Release Apache ShenYu Client Golang ${PUBLISH.VERSION}
```
Content:
```
Hello ShenYu Community,
This is a call for vote to release Apache ShenYu Client Golang version ${PUBLISH.VERSION}
Release notes:
https://github.com/apache/shenyu-client-golang/blob/master/RELEASE-NOTES.md
The release candidates:
https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-golang/${PUBLISH.VERSION}/
Git tag for the release:
https://github.com/apache/shenyu-client-golang/tree/v${PUBLISH.VERSION}/
Release Commit ID:
https://github.com/apache/shenyu-client-golang/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-golang-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 Golang repo.
[ ] All files have license headers if necessary.
[ ] No compiled archives bundled in source archive.
```
**2. Announcement of voting results**
To:
```
dev@shenyu.apache.org
```
Title:
```
[RESULT][VOTE] Release Apache ShenYu Client Golang ${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-golang/${PUBLISH.VERSION} https://dist.apache.org/repos/dist/release/shenyu/shenyu-client-golang/${PUBLISH.VERSION} -m "transfer packages for ${PUBLISH.VERSION}"
svn delete https://dist.apache.org/repos/dist/dev/shenyu/shenyu-client-golang/${PREVIOUS.RELEASE.VERSION}
```
**2. Finish GitHub release**
Edit [Releases](https://github.com/apache/shenyu-client-golang/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: `announce@apache.org` 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:
```
dev@shenyu.apache.org
announce@apache.org
```
Title:
```
[ANNOUNCE] Apache ShenYu Client Golang ${PUBLISH.VERSION} available
```
Content:
```
Hi,
Apache ShenYu Team is glad to announce the new release of Apache ShenYu Client Golang ${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-golang/blob/master/RELEASE-NOTES.md
Website: https://shenyu.apache.org/
ShenYu Resources:
- Issue: https://github.com/apache/shenyu/issues
- Mailing list: dev@shenyu.apache.org
- 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:
```
dev@shenyu.apache.org
```
Title:
```
[CANCEL][VOTE] Release Apache ShenYu Client Golang ${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`.
**3Deleting 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-golang/${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 Golang ${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