Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the release doc for the Kvrocks controller #227

Merged
merged 2 commits into from
Jun 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
212 changes: 212 additions & 0 deletions community/create-a-kvrocks-controller-release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
---
id: create-a-kvrocks-controller-release
title: Create a kvrocks controller release
---

This document mainly introduces how the Release Manager releases a new version in accordance with the Apache requirements.

## Introduction

Apache Kvrocks™ Controller is a cluster management tool for Apache Kvrocks™. And the release process and policy of Apache Kvrocks Controller is similar to Apache Kvrocks™:

* Source Release is the key point which Apache values, also, is necessary for a release;
* Binary Release is optional. Apache Kvrocks™ Controller can choose whether to release the binary package to the Apache repository or not.

Note that for binary distribution packages, it is necessary to check that the new version does not contain third-party dependencies.

Please remember that publishing software has legal consequences. This guide complements the foundation-wide policies and guides:

* [Release Policy](https://www.apache.org/legal/release-policy.html)
* [Release Distribution Policy](https://infra.apache.org/release-distribution)
* [Release Creation Process](https://infra.apache.org/release-publishing.html)

For the first release manager, you need to add your PGP key to the KEYS file in the repository, please refer to [Adding GPG KEY](https://kvrocks.apache.org/community/create-a-release/#adding-gpg-key).

## Create source releases and stage

1. Checkout to the RELEASE BRANCH and cherry-pick commits to release
2. Use `./x.py package source -v ${release_version} -rc ${candidate_number}` to create release tarball
3. Make sure it compiles good and push tag to GitHub

## Upload artifacts to SVN dist repo

:::info

SVN is required for this step.

:::

The svn repository of the dev branch is: https://dist.apache.org/repos/dist/dev/kvrocks/kvrocks-controller

First, checkout Kvrocks controller to local directory:

```shell
# As this step will copy all the versions, it will take some time. If the network is broken, please use svn cleanup to delete the lock before re-execute it.
svn co https://dist.apache.org/repos/dist/dev/kvrocks/kvrocks-controller kvrocks-controller-dist-dev
```

Then, upload the artifacts:

```shell
cd kvrocks-controller-dist-dev
mkdir ${release_version} # create a directory named by version
cp ${repo_dir}/apache-kvrocks-controller-${release_version}-src.tar.gz* ${release_version}/ # copy source code and signature package to the versioned directory
svn status # check svn status
svn add ${release_version} # add to svn
svn status # check svn status
svn commit -m "Prepare for ${release_version}" # commit to SVN remote server
```

## Draft release note

[Draft a new release note](https://github.com/apache/kvrocks-controller/releases/new).

You should choose the current release candidate tag. GitHub can automatically generate the content of release note, but you need to group it.

For some important content, highlight it at the beginning.

## Voting

### Kvrocks community vote

Kvrocks community vote,send email to: `[email protected]`:

```text
[VOTE] Release Apache Kvrocks Controller ${release_version}

Hello Apache Kvrocks PMC and Community,

This is a call for a vote to release Apache Kvrocks Controller version ${release_version}.

The tag to be voted on is ${release_version}-rc${candidate_number}.

The release candidate:

https://dist.apache.org/repos/dist/dev/kvrocks/kvrocks-controller/${release_version}/


Keys to verify the release candidate:

https://downloads.apache.org/kvrocks/KEYS


Git tag for the release:

https://github.com/apache/kvrocks-controller/releases/tag/${release_version}-rc${candidate_number}

Please download, verify, and test.

The VOTE will remain open for at least 72 hours.

[ ] +1 approve
[ ] +0 no opinion
[ ] -1 disapprove with the reason

To learn more about apache kvrocks, please see
https://kvrocks.apache.org/

Checklist for reference:

[ ] Download links are valid.
[ ] Checksums and signatures.
[ ] LICENSE/NOTICE files exist
[ ] No unexpected binary files
[ ] All source files have ASF headers
[ ] Can compile from source
[ ] All Tests Passed

More detailed checklist please refer to:
https://kvrocks.apache.org/community/verify-a-release-candidate

Thanks
```

After at least 72 hours with at least 3 +1 binding vote (from Kvrocks PMC member) and no veto, claim the vote result:

```text
[RESULT][VOTE] Release Apache Kvrocks Controller ${release_version}

The vote to release Apache Kvrocks Controller ${release_version} has passed.

The vote PASSED with xxx binding +1 and 0 -1 votes:

Binding votes:
- XXX
- XXX
- XXX

No Binding votes:
- XXX
- XXX
- XXX

Vote thread:

${vote_thread_url}

Thank you to all the above members to help us to verify and vote for the
${release_version} release.

Thanks
```

## Officially released

### Publish artifacts to SVN RELEASE branch

```shell
svn mv https://dist.apache.org/repos/dist/dev/kvrocks/kvrocks-controller/${release_version} https://dist.apache.org/repos/dist/release/kvrocks/kvrocks-controller/${release_version} -m "Release ${release_version}"
```

### Publish release note

Edit the title of the draft release note and use the new ${release_version} tag, which github will create automatically.

Then, publish release.

### Update website links

Update [releases data file](https://github.com/apache/kvrocks-website/blob/main/src/components/Releases/kvrocks-controller.tsx).

### Send the announcement

Send the release announcement to `[email protected]` and CC `[email protected]`:

> You have to use `${name}@apache.org` post email to `[email protected]`

```html
[ANNOUNCE] Release Apache Kvrocks Controller ${release_version}

Hi all,

The Apache Kvrocks community is pleased to announce
that Apache Kvrocks Controller ${release_version} has been released!

Apache Kvrocks Controller is a cluster management tool for Apache Kvrocks, including the following key features:

- Failover - controller will failover or remove the master/slave node when probing failed
- Scale out the cluster in one line command
- Manage many clusters in one controller cluster
- Support multi metadata storages like etcd and so on

This release contains a number of new features, bug fixes and
improvements compared to the last version released before.
The notable changes since ${release_version} include:
1. xxxxx
2. yyyyyy
3. zzzzzz

Please refer to the change log for the complete list of changes:
https://github.com/apache/kvrocks-controller/releases/tag/v${release_version}

Apache Kvrocks website: https://kvrocks.apache.org/

Download Links: https://kvrocks.apache.org/download/kvrocks-controller

Kvrocks Resources:
- Issue: https://github.com/apache/kvrocks-controller/issues
- Mailing list: [email protected]

Thanks
On behalf of Apache Kvrocks community
```
10 changes: 10 additions & 0 deletions community/verify-a-release-candidate.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,18 @@ However, you should clearly state which checks you did. The release manager need

Use the following command to download all artifacts, replace "${release_version}-${rc_version}" with the version ID of the version to be released:

### Kvrocks

```shell
svn co https://dist.apache.org/repos/dist/dev/kvrocks/${release_version}-${rc_version}/
```

### Kvrocks Controller

```shell
svn co https://dist.apache.org/repos/dist/dev/kvrocks/kvrocks-controller/${release_version}-${rc_version}/
```

## Verify signature and hash

Start the verification process, which includes but is not limited to the following content and verification methods.
Expand Down Expand Up @@ -140,6 +148,8 @@ fi
```
2. verify the sign and checksum

### Kvrocks

```shell
./release-verify.sh apache-kvrocks-${release_version}-src.tar.gz
```
Expand Down
20 changes: 20 additions & 0 deletions download/kvrocks-controller.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
title: Kvrocks Controller Official Download
---

## Apache Kvrocks™ Controller Downloads

Apache Kvrocks™ Controller is released as a source artifact. We are pleased to announce our release as below.

### Kvrocks Controller Source Releases

````mdx-code-block
import Releases from "../src/components/Releases/kvrocks-controller";

<Releases/>
````

Choose a source distribution in the *tar* format, and [verify](https://www.apache.org/dyn/closer.cgi#verify) using the corresponding *pgp* signature (using the committer file in [KEYS](https://downloads.apache.org/kvrocks/KEYS)). If you cannot do that, the *sha512* hash file may be used to check that the download has completed OK.

For fast downloads, current source distributions are hosted on mirror servers; older source distributions are in the
[archive](https://archive.apache.org/dist/kvrocks/kvrocks-controller). If a download from a mirror fails, retry, and the second download will likely succeed.
1 change: 1 addition & 0 deletions sidebarsCommunity.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ const sidebars = {
},
items: [
'create-a-release',
'create-a-kvrocks-controller-release',
'verify-a-release-candidate',
]
},
Expand Down
47 changes: 47 additions & 0 deletions src/components/Releases/kvrocks-controller.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import React from "react";

const controller_versions = []

type ReleaseData = {
name: string,
archive: string,
checksum: string,
signature: string,
}

function createReleaseData(version: string, vtag?: string): ReleaseData {
const fixedVTag = vtag ?? version;
const archive = `https://downloads.apache.org/kvrocks/kvrocks-controller/${version}/apache-kvrocks-controller-${fixedVTag}-src.tar.gz`
return {
name: fixedVTag,
archive: archive,
checksum: `${archive}.sha512`,
signature: `${archive}.asc`,
};
}

export default function Releases(): JSX.Element {
const releases = controller_versions.map(({ version, vtag }) => createReleaseData(version, vtag))
return <>
<table>
<thead>
<tr>
<th><b>Name</b></th>
<th><b>Archive</b></th>
<th><b>Checksum</b></th>
<th><b>Signature</b></th>
</tr>
</thead>
<tbody>
{releases.map(v => (
<tr key={v.name}>
<td>{v.name}</td>
<td><a href={v.archive}>tarball</a></td>
<td><a href={v.checksum}>sha512</a></td>
<td><a href={v.signature}>asc</a></td>
</tr>
))}
</tbody>
</table>
</>
}
Loading