This is an automated email from the ASF dual-hosted git repository.
ccondit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-site.git
The following commit(s) were added to refs/heads/master by this push:
new 746b34ea8a [YUNIKORN-1812] Update release procedure (#315)
746b34ea8a is described below
commit 746b34ea8a16932ce406147feef3c42dbbb4c718
Author: Wilfred Spiegelenburg <[email protected]>
AuthorDate: Tue Jun 20 12:14:27 2023 -0500
[YUNIKORN-1812] Update release procedure (#315)
* No elliptic curve key signing possible for helm charts
* Limited access to docker hub (2 per PMC only)
* Add "release-notes" label on JIRA for writing release announcement
* More detail for release announcement content
Closes: #315
Signed-off-by: Craig Condit <[email protected]>
---
src/pages/community/release_procedure.md | 175 ++++++++++++++++++++++---------
1 file changed, 125 insertions(+), 50 deletions(-)
diff --git a/src/pages/community/release_procedure.md
b/src/pages/community/release_procedure.md
index 4d4d01562c..b151acb232 100644
--- a/src/pages/community/release_procedure.md
+++ b/src/pages/community/release_procedure.md
@@ -30,20 +30,23 @@ The instructions and tools obey the ASF [release
policy](http://www.apache.org/l
* [Release procedure](#release-procedure)
* [Step-by-step procedure](#step-by-step-procedure)
- * [Tag and update release for version](#tag-and-update-release-for-version)
+ * [Branching](#branching)
+ * [Tag for RCs](#tag-for-rcs)
+ * [Update references based on tags](#update-references-based-on-tags)
* [Update the CHANGELOG](#update-the-changelog)
* [Run the release tool](#run-the-release-tool)
* [Create Signature](#create-signature)
* [Create Checksum](#create-checksum)
* [Upload Release Candidate Artifacts](#upload-release-candidate-artifacts)
* [Start Voting Thread](#start-voting-thread)
+ * [Tag for release](#tag-for-release)
* [Publish the Release](#publish-the-release)
* [Release Docker images](#release-docker-images)
* [Release Helm Charts](#release-helm-charts)
* [Update the website](#update-the-website)
* [Cleanup](#cleanup)
* [Create the GIT releases](#create-the-git-releases)
- * [Verify the release](#verify-the-release)
+ * [Verify the release publishing](#verify-the-release-publishing)
* [Website updates for a new release](#website-updates-for-a-new-release)
* [Version the documentation](#version-the-documentation)
* [Release announcement](#release-announcement)
@@ -54,62 +57,90 @@ The instructions and tools obey the ASF [release
policy](http://www.apache.org/l
## Release Procedure
Simplified release procedure:
-1. Create a release branch for the target release in all git repos, such as
`branch-0.8`
+1. Create a release branch for the target release in all git repos, such as
`branch-1.3`
2. Stabilize the release by fixing test failures and bugs only
-3. Tag update release for a new version to prepare a release candidate, e.g
`v0.8.0-1` for RC1
+3. Tag update release for a new version to prepare a release candidate, e.g
`v1.3.0-1` for RC1
4. Update the CHANGELOG
5. Configure
[release-configs.json](https://github.com/apache/yunikorn-release/tree/master/tools/release-configs.json)
6. Run script
[build-release.py](https://github.com/apache/yunikorn-release/tree/master/tools/build-release.py)
to generate source code tarball, checksum and signature.
7. Voting and releasing the candidate
## Step-by-step procedure
-### Tag and update release for version
Branching and tagging can, and in most cases will, require changes in the go
mod files.
+
+### Branching
Branching is part of the release preparation and often has happened some time
before the release process starts.
+As an example the steps to create the branch for the `v1.3.0` release:
+```shell script
+git checkout -b branch-1.3 master
+git push -u origin branch-1.3
+```
+
+### Tag for RCs
A release needs to be tagged in git before starting the release process.
As an example check
[YUNIKORN-358](https://issues.apache.org/jira/browse/YUNIKORN-358) and
[YUNIKORN-1004](https://issues.apache.org/jira/browse/YUNIKORN-1004).
-Release candidates should be tagged with the version and build number of the
release candidate.
-For example, artifacts used to build 0.8.0 RC2 should be tagged `v0.8.0-2` and
releases created in GitHub.
-Once the release is finalized, git tags and GitHub releases should be created
for `v0.8.0` pointing to the same commits.
-Under no circumstances should an existing tag be removed or moved. This will
break golang dependency resolution for downstream users.
-
-The tagging is multistep process, all actions are done on the branch that will
be released, like `branch-0.8`:
-1. Tag the web and scheduler interface with the release tag.
-2. Update the `go.mod` file in the core using `go get
github.com/apache/yunikorn-scheduler-interface`
-Add the tag and commit the changes.
-3. Update the `go.mod` file in the shim using `go get
github.com/apache/yunikorn-scheduler-interface` and
-`go get github.com/apache/yunikorn-core`. Add the tag and commit the changes.
-4. Create a new branch in the yunikorn-release repo, set the correct chart
version in
[Chart.yaml](https://github.com/apache/yunikorn-release/tree/master/helm-charts/yunikorn/Chart.yaml),
and then create the tag.
+Release candidates should be tagged with the version **and** build number of
the release candidate.
+For example artifacts used to build 1.3.0 RC1 should be tagged `v1.3.0-1`.
+Releases are **not** created in GitHub for RCs.
+
+Example for creating an annotated tag on the checked out commit for RC1 for
`v1.3.0`:
+```shell script
+git tag -a v1.3.0-1 -m "RC1 for v1.3.0"
+git push origin v1.3.0-1
+```
+:::caution
+Under **no** circumstances should an existing tag be removed or moved.
+This will break golang dependency resolution for downstream users.
+:::
+
+### Update references based on tags
+The tagging is multistep process, all actions are done on the branch that will
be released, like `branch-1.3`:
+1. Tag the web and scheduler interface with the release candidate tag: i.e.
`v1.3.0-1`.
+2. Update the `go.mod` file in the core using:
+ ```shell script
+ go get github.com/apache/yunikorn-scheduler-interface
+ ```
+ Add the same tag as in the previous step and commit the changes.
+3. Update the `go.mod` file in the shim using
+ ```shell script
+ go get github.com/apache/yunikorn-scheduler-interface
+ go get github.com/apache/yunikorn-core
+ ```
+ Add the same tag as in the previous step and commit the changes.
+4. Create a new branch in the yunikorn-release repo, set the correct chart
version in
[Chart.yaml](https://github.com/apache/yunikorn-release/tree/master/helm-charts/yunikorn/Chart.yaml),
and then create the same tag in this repository.
### Update the CHANGELOG
In the release artifacts a
[CHANGELOG](https://github.com/apache/yunikorn-release/tree/master/release-top-level-artifacts/CHANGELOG)
is added for each release.
The CHANGELOG should contain the list of jiras fixed in the release.
Follow these steps to generate the list:
- Go to the [releases page in
jira](https://issues.apache.org/jira/projects/YUNIKORN?selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page&status=released-unreleased)
-- Click on the version that is about to be released, i.e. `0.8.0`
+- Click on the version that is about to be released, i.e. `1.3.0`
- Click on the `Release Notes` link on the top of the page
- Click the button `Configure Release Notes`
- Select the style `Text` and click `create`
- Scroll to the bottom of the page and copy the content of the text area and
update the CHANGELOG file in the ../release-top-level-artifacts directory.
### Run the release tool
+Please check the [signing your first release](#signing-your-first-release)
before proceeding here for details on signing a release.
+Limitations apply to the key that can be used for signing.
+
A tool has been written to handle most of the release tasks.
The tool requires a simple
[json](https://github.com/apache/yunikorn-release/tree/master/tools/release-configs.json)
input file to be updated before running.
This configuration points to the tag to use in the release and the version to
release.
Update the version to release and the tag for each repository.
The version used must be the _exact_ version that you intend to release.
-So `0.8.0` or `0.12.2` **without** any additional references like a `RC1` or
something similar.
+So `0.12.2` or `1.3.0` **without** any additional references like a `RC1` or
something similar.
The version is used as part of the source code, inside the Makefile etc., and
to name the release artefact and cannot be changed anymore.
-The tag format is as described in the [step tag and release
version](#tag-and-update-release-for-version)
+The tag format is as described in the [step tag for released
version](#tag-for-release)
-As an example when releasing the first release candidate for `0.8.0` the json
file should contain version and tag information like below:
+As an example when releasing the first release candidate for `1.3.0` the json
file should contain version and tag information like below:
```json
{
"release": {
- "version": "0.8.0"
+ "version": "1.3.0"
},
- "tag": "v0.8.0-1",
+ "tag": "v1.3.0-1",
"repository": "https://github..."
}
```
@@ -135,23 +166,23 @@ Run the release tool using the option `--sign
<email-address>` to auto sign the
Manually creating the signature for the file generated by the tool:
```shell script
-gpg --local-user <email-address> --armor --output
apache-yunikorn-0.8.0-src.tar.gz.asc --detach-sig
apache-yunikorn-0.8.0-src.tar.gz
+gpg --local-user <email-address> --armor --output
apache-yunikorn-1.3.0-src.tar.gz.asc --detach-sig
apache-yunikorn-1.3.0-src.tar.gz
```
-This will create the signature in the file:
`apache-yunikorn-0.8.0-src.tar.gz.asc`
+This will create the signature in the file:
`apache-yunikorn-1.3.0-src.tar.gz.asc`
Verify that the signature is correct using:
```shell script
-gpg --verify apache-yunikorn-0.8.0-src.tar.gz.asc
apache-yunikorn-0.8.0-src.tar.gz
+gpg --verify apache-yunikorn-1.3.0-src.tar.gz.asc
apache-yunikorn-1.3.0-src.tar.gz
```
#### Create Checksum
This step is included in the release after generation of the source tar ball,
if the release tool is used this step can be skipped.
```shell script
-shasum -a 512 apache-yunikorn-0.8.0-src.tar.gz >
apache-yunikorn-0.8.0-src.tar.gz.sha512
+shasum -a 512 apache-yunikorn-1.3.0-src.tar.gz >
apache-yunikorn-1.3.0-src.tar.gz.sha512
```
-This will create the checksum in the file:
`apache-yunikorn-0.8.0-src.tar.gz.sha512`
+This will create the checksum in the file:
`apache-yunikorn-1.3.0-src.tar.gz.sha512`
Verify that the checksum is correct using:
```shell script
-shasum -a 512 -c apache-yunikorn-0.8.0-src.tar.gz.sha512
+shasum -a 512 -c apache-yunikorn-1.3.0-src.tar.gz.sha512
```
### Upload Release Candidate Artifacts
@@ -162,7 +193,7 @@ The release artifacts consist of three parts:
The three artefacts need to be uploaded to:
`https://dist.apache.org/repos/dist/dev/yunikorn/`
-Create a release directory based on the version, i.e. `0.8.0`, add the three
files to directory.
+Create a release directory based on the version, i.e. `1.3.0`, add the three
files to directory.
Commit the changes.
If you have not done so already make sure to [add your
signature](#add-the-signature-to-the-project-keys-file) to the KEYS file.
@@ -175,6 +206,17 @@ According to the Apache [release approval
doc](http://www.apache.org/legal/relea
A voting thread must be created on `[email protected]` and run for at
least 72 hours.
At least three +1 votes are required and more +1 votes than -1 votes.
+### Tag for release
+Once the release has passed voting, git tags and GitHub releases should be
created for final release tag, example `v1.3.0`
+The final tag must point to the same commit as the approved release candidate
tag, example `v1.3.0-1`
+Check the step [Create the GIT releases](#create-the-git-releases) later in
the procedure for the release updates.
+
+Adding the final release tag, again annotated, on the checked out commit:
+```shell script
+git tag -a v1.3.0 -m "Apache YuniKorn v1.3.0"
+git push origin v1.3.0
+```
+
### Publish the Release
Once the voting is passed, move the release artefacts from the staging area to
the release location `https://dist.apache.org/repos/dist/release/yunikorn/`.
Once moved to this space, the content will be automatically synced to
`https://downloads.apache.org/yunikorn/` which must be used as the final
location for all release files.
@@ -187,6 +229,13 @@ Cleanup of the older release is handled after the website
has been updated in th
#### Release Docker images
As part of the release convenience images are build and uploaded to the Apache
account on DockerHub.
+
+:::note
+Each Apache project has a limited number of people with write access to the
Apache Docker organisation.
+Not all PMC members can be given access.
+Reach out to the private@ list to get help if you have not published images
before or have trouble accessing Docker Hub.
+:::
+
As we added multi architecture support the release of the images has become a
bit more complex and is now tool driven.
The Go compiler built-in in functionality is leveraged to cross-compile the
executables for the scheduler and admission controller.
@@ -265,8 +314,8 @@ Helm charts _must_ be signed on release.
Contrary to the source code tar ball signing, signing the helm charts requires
manual entry of the key passphrase.
There is no option to provide the passphrase any other way to the helm tool.
The helm package will generate two files:
-- helm package: example `yunikorn-0.8.0.tgz`
-- provenance or signature file: example `yunikorn-0.8.0.tgz.prov`
+- helm package: example `yunikorn-1.3.0.tgz`
+- provenance or signature file: example `yunikorn-1.3.0.tgz.prov`
Both files _must_ be attached to the [release in
GIT](#create-the-git-releases) for the release repository.
@@ -276,11 +325,13 @@ First the `index.yaml` file:
The `digest` mentioned in the index.yaml file is the digest that gets printed
by the tool (unsigned package) or stored in the provenance file.
It can be generated manually using:
```shell script
-shasum -a 256 yunikorn-0.8.0.tgz
+shasum -a 256 yunikorn-1.3.0.tgz
```
-Note: do not use the `helm repo index` command to update the `index.yaml`
file. The command does not handle the enhanced information stored in the
`index.yaml` file nicely.
+:::caution
+Do not use the `helm repo index` command to update the `index.yaml` file. The
command does not handle the enhanced information stored in the `index.yaml`
file nicely.
Update the file manually.
+:::
In the same PR update the `index.md` file. In most cases the change is limited
to the supported Kubernetes versions.
If there are no changes for the release this step can be skipped. Larger
changes should be tracked as a separate jira not as a work item for a release.
@@ -294,7 +345,7 @@ Any change in supported Kubernetes versions _must_ be
mentioned in the [release
- Create a new documentation version on YuniKorn website based on the latest
content in the `docs` directory.
Refer to [these steps](#version-the-documentation) on how to create the new
documentation version.
- Create the release announcement to be referenced from download page on the
website.
- The release announcement is a markdown file based on the version:
`0.8.0.md`.
+ The release announcement is a markdown file based on the version:
`1.3.0.md`.
The steps on how to create the [release announcement](#release-announcement)
explains the content and where to add the file.
- Update the [download page](/community/download) of the website as per the
[steps](#update-the-download-page).
@@ -305,7 +356,9 @@ Update the announcement bar to the correct release.
At this point all changes for the release are done and an announcement email
can be sent to the `[email protected]` email list.
#### Cleanup
-**NOTE**: this step should be performed after the website updates have been
made as the download links change.
+:::info
+This step should be performed after the website updates have been made as the
download links change.
+:::
There should only be one release, the latest, in the release area.
Any release that has been in the release area will be automatically copied to
the archive.
@@ -317,12 +370,15 @@ The releases need to clean up in two locations:
* Remove the non-current release from the _release_ area by removing the old
release directory.
For the location see [release location](#publish-the-release)
-**NOTE**: If there are multiple releases actively maintained then there could
be multiple releases in the release area.
+:::note
+If there are multiple releases actively maintained then there could be
multiple releases in the release area.
We _must_ have only one release per active branch in the _release_ area, i.e.
one for 1.0, one for 1.1 etc.
For detailed information you can check the [release distribution
policy](https://infra.apache.org/release-distribution.html).
+:::
#### Create the GIT releases
-In the GIT repositories finish the release process by creating a release based
on the git tag that was added.
+In the GIT repositories finish the release process by creating a release based
on the release git tag that was added.
+Do not use any of the RC tags for a release.
Repeat these steps for all five repositories (core, k8shim, web,
scheduler-interface and release):
- Go to the `tags` page
- click the `...` at the right-hand side of the page that you want to release,
select `Create Release` from the drop down
@@ -330,7 +386,7 @@ Repeat these steps for all five repositories (core, k8shim,
web, scheduler-inter
- add the packaged helm chart files (yunikorn-release repository only)
- click `Publish Release` to finish the steps
-### Verify the release
+### Verify the release publishing
After the whole procedure has been finalised verify the documentation on the
website.
Check that the released artifacts can be downloaded from the download page.
@@ -348,30 +404,41 @@ Open a PR and commit all the changes below to the
**master** branch, once the au
Documentation versioning uses the simple **MAJOR.MINOR.PATCH** semver version
of the release.
This means no letters, release candidate tags or anything like that:
```shell script
-yarn release 0.8.0
+yarn release 1.3.0
```
This command will snapshot all the docs from the current `docs` directory, and
copy all files to another new directory
-under `versioned_docs`, e.g `versioned_docs/version-0.8.0`.
+under `versioned_docs`, e.g `versioned_docs/version-1.3.0`.
A similar copy will be generated for the sidebar under `versioned_sidebars`
that belongs to the documentation version.
This process will also update the `version.json` file in the root and add the
new release as a line item.
### Release announcement
The release announcement is a static Markdown file added to the directory
`src/pages/release-announce`.
-The file name is the same a simple semver version of the release:
+
+Jiras that are labeled with the `release-notes` label must be mentioned in the
announcement.
+For an overview of which Jiras are marked for inclusion in the release notes
the following Jira search can be used:
+[YuniKorn Release note
needed](https://issues.apache.org/jira/issues/?filter=12352474).
+All committers have access to the filter and can update the version to be
checked. *Login is required to run and see the filter.
+
+The file name must be the same as the semver version of the release without
the 'v':
```
-src/pages/release-announce/0.8.0.md
+src/pages/release-announce/1.3.0.md
```
-The page is in Markdown format and should follow the example of the already
existing pages:
+All releases are automatically added to the [index
list](https://yunikorn.apache.org/release-announce/).
+
+The page itself is in Markdown format and should follow the example of the
already existing pages:
* id and title definition (docusaurus syntax)
* Apache license
* Following headings
- * Overview of the release (level 2)
+ * Overview of the release (level 2)
+ This contains the generic overview of the release, including the release
manager and date etc.
+ The link to the included Jiras for the release must be available to
anyone, and not require a login.
* Incompatible changes
- Details for incompatible changes at level 3 heading
+ Details for incompatible changes at level 3 heading, referencing a Jira
via a link to provide more details.
* Highlights (level 2)
- Chosen highlights at level 3 heading
- * Community update (level 2)
+ Chosen highlights or features at level 3 heading, referencing a Jira via
a link to provide more details.
+ * Community update (level 2)
+ Mention all new committers and or PMC members added since the last
release.
### Update the download page
The download page contains the link to the Apache source download, signatures
etc.
@@ -384,7 +451,7 @@ Duplicate the first row of the table and change the links
and details to reflect
All links must be updated:
* 3 for the download (source tar, checksum and signature)
* 3 for the docker images (scheduler, admission controller and web)
-* 1 release announcement using a link in the form of `/release-announce/0.8.0`
+* 1 release announcement using a link in the form of `/release-announce/1.3.0`
For the second row update the download links for the source tar, checksum and
signature.
@@ -400,6 +467,12 @@ Older releases not mentioned in the table can still be
accessed via the archive
If you haven't signed any releases before, read the documentation to [generate
signing key](https://infra.apache.org/openpgp.html#generate-key)
Follow the steps below to add the key you can use to sign.
+:::caution
+The current releases of helm do not allow signing helm charts with an elliptic
curve based key (ECDSA).
+There is no change planned in helm v3 as stated in [this
issue](https://github.com/helm/helm/issues/11634) in the Helm GitHub repository.
+Please create a RSA based key. The minimum is 2048-bit, recommended is a
3072-bit or 4096-bit, RSA key.
+:::
+
### Generate a Key
Generate a new PGP key (skip this step if you already have an Apache linked
key):
```shell script
@@ -426,4 +499,6 @@ More detail can be found in the document: [Signing a
Release](https://infra.apac
Add the content of the generated file to the existing KEYS list at
`https://dist.apache.org/repos/dist/release/yunikorn/KEYS`
Never remove a key from this list!
-NOTE: you will need to install subversion to access this repo (use your apache
ID). You can use any SVN client, e.g. svnX, for convenience.
+:::note
+You will need to install subversion to access this repo (use your apache ID).
You can use any SVN client, e.g. svnX, for convenience.
+:::
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]