This is an automated email from the ASF dual-hosted git repository.

chengpan pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-celeborn-website.git


The following commit(s) were added to refs/heads/main by this push:
     new f35553a  Add release guide (#30)
f35553a is described below

commit f35553a6b71a2ad321f0d04e9880256bfb1b1907
Author: Ethan Feng <[email protected]>
AuthorDate: Tue Jan 9 17:06:07 2024 +0800

    Add release guide (#30)
    
    * Add release guide
    
    * Update docs/community/release_guide.md
    
    Co-authored-by: Nicholas Jiang <[email protected]>
    
    * Update docs/community/release_guide.md
    
    Co-authored-by: Nicholas Jiang <[email protected]>
    
    * update doc
    
    * update doc
    
    * Update docs/community/release_guide.md
    
    * update docs
    
    * update docs
    
    * update docs
    
    * update docs
    
    * update docs
    
    * update docs
    
    * update docs
    
    * update docs
    
    * Update docs/community/release_guide.md
    
    Co-authored-by: Cheng Pan <[email protected]>
    
    * update docs
    
    * Update docs/community/release_guide.md
    
    ---------
    
    Co-authored-by: Nicholas Jiang <[email protected]>
    Co-authored-by: Fu Chen <[email protected]>
    Co-authored-by: Cheng Pan <[email protected]>
---
 docs/community/release_guide.md | 299 ++++++++++++++++++++++++++++++++++++++++
 mkdocs.yml                      |   1 +
 2 files changed, 300 insertions(+)

diff --git a/docs/community/release_guide.md b/docs/community/release_guide.md
new file mode 100644
index 0000000..aecdaa2
--- /dev/null
+++ b/docs/community/release_guide.md
@@ -0,0 +1,299 @@
+<!--
+- Licensed to the Apache Software Foundation (ASF) under one or more
+- contributor license agreements.  See the NOTICE file distributed with
+- this work for additional information regarding copyright ownership.
+- The ASF licenses this file to You under the Apache License, Version 2.0
+- (the "License"); you may not use this file except in compliance with
+- the License.  You may obtain a copy of the License at
+-
+-   http://www.apache.org/licenses/LICENSE-2.0
+-
+- Unless required by applicable law or agreed to in writing, software
+- distributed under the License is distributed on an "AS IS" BASIS,
+- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- See the License for the specific language governing permissions and
+- limitations under the License.
+-->
+
+Celeborn Release Guide
+====================
+
+## Introduction
+
+The Apache Celeborn (Incubating) project periodically declares and publishes 
releases. A release is one or more packages
+of the project artifact(s) that are approved for general public distribution 
and use. They may come with various
+degrees of caveat regarding their perceived quality and potential for change, 
such as "alpha", "beta", "incubating",
+"stable", etc.
+
+The Celeborn community treats releases with great importance. They are a 
public face of the project and most users
+interact with the project only through the releases. Releases are signed off 
by the entire Celeborn community in a
+public vote.
+
+Each release is executed by a Release Manager, who is selected among the 
Celeborn committers. This document describes
+the process that the Release Manager follows to perform a release. Any changes 
to this process should be discussed
+and adopted on the [dev mailing list](mailto:[email protected]).
+
+Please remember that publishing software has legal consequences. This guide 
complements the foundation-wide
+[Product Release Policy](https://www.apache.org/dev/release.html) and
+[Release Distribution Policy](https://www.apache.org/dev/release-distribution).
+
+### Overview
+
+The release process consists of several steps:
+
+1. Decide to release
+2. Prepare for the release
+3. Cut branch off for __major__ release
+4. Build a release candidate
+5. Vote on the release candidate
+6. If necessary, fix any issues and go back to step 3.
+7. Finalize the release
+8. Promote the release
+9. Remove the dist repo directories for deprecated release candidates
+
+## Decide to release
+
+Deciding to release and selecting a Release Manager is the first step of the 
release process. This is a consensus-based
+decision of the entire community.
+
+Anybody can propose a release on the [dev mailing 
list](mailto:[email protected]), giving a solid argument and
+nominating a committer as the Release Manager (including themselves). There’s 
no formal process, no vote requirements,
+and no timing requirements. Any objections should be resolved by consensus 
before starting the release.
+
+In general, the community prefers to have a rotating set of 1-2 Release 
Managers. Keeping a small core set of managers
+allows enough people to build expertise in this area and improve processes 
over time, without Release Managers needing
+to re-learn the processes for each release. That said, if you are a committer 
interested in serving the community in
+this way, please reach out to the community on the [dev mailing 
list](mailto:[email protected]).
+
+### Checklist to proceed to the next step
+
+1. Community agrees to release
+2. Community selects a Release Manager
+
+## Prepare for the release
+
+Before your first release, you should perform one-time configuration steps. 
This will set up your security keys for
+signing the release and access to various release repositories.
+
+### One-time setup instructions
+
+#### ASF authentication
+
+The environments `ASF_USERNAME` and `ASF_PASSWORD` have been used in several 
places and several times in the release
+process, you can either one-time set up them in `~/.bashrc` or `~/.zshrc`, or 
export them in terminal every time.
+
+```shell
+export ASF_USERNAME=<your apache username>
+export ASF_PASSWORD=<your apache password>
+```
+
+#### Java Home
+
+An available environment variable `JAVA_HOME`, you can do `echo $JAVA_HOME` to 
check it.
+
+!!! note
+    The Java version should be 8.
+
+#### Subversion
+
+Besides on `git`, `svn` is also required for Apache release, please refer to
+https://www.apache.org/dev/version-control.html#https-svn for details.
+
+#### GPG Key
+
+You need to have a GPG key to sign the release artifacts. Please be aware of 
the ASF-wide
+[release signing guidelines](https://www.apache.org/dev/release-signing.html). 
If you don’t have a GPG key associated
+with your Apache account, please create one according to the guidelines.
+
+Determine your Apache GPG Key and Key ID, as follows:
+
+```shell
+gpg --list-keys --keyid-format SHORT
+```
+
+This will list your GPG keys. One of these should reflect your Apache account, 
for example:
+
+```shell
+pub   rsa4096/37356FA0 2022-10-27 [SC] [expires: 2028-10-27]
+      FCF20BB29C7BEFDF58F998F76392F71F37356FA0
+uid         [ultimate] Ethan Feng <[email protected]>
+sub   rsa4096/D2ED4CBF 2022-10-27 [E] [expires: 2028-10-27]
+```
+
+!!! note
+    To follow the [Apache's release 
specification](https://infra.apache.org/release-signing.html#note), all new RSA 
keys generated should be at least 4096 bits. Do not generate new DSA keys.
+
+Here, the key ID is the 8-digit hex string in the pub line: `37356FA0`.
+
+To export the PGP public key, using:
+
+```shell
+gpg --armor --export 37356FA0
+```
+
+If you have more than one gpg key, you can specify the default key as the 
following:
+
+```
+echo 'default-key <key-fpr>' > ~/.gnupg/gpg.conf
+```
+
+The last step is to update the KEYS file with your code signing key
+https://www.apache.org/dev/openpgp.html#export-public-key
+
+```shell
+svn checkout --depth=files 
"https://dist.apache.org/repos/dist/release/incubator/celeborn/"; 
work/svn-celeborn
+
+(gpg --list-sigs "${ASF_USERNAME}@apache.org" && gpg --export --armor 
"${ASF_USERNAME}@apache.org") >> work/svn-celeborn/KEYS
+
+svn commit --username "${ASF_USERNAME}" --password "${ASF_PASSWORD}" --message 
"Update KEYS" work/svn-celeborn
+```
+
+## Cut branch if for major release
+
+celeborn use version pattern 
`{MAJOR_VERSION}.{MINOR_VERSION}.{PATCH_VERSION}[-{OPTIONAL_SUFFIX}]`, e.g. 
`0.3.1-incubating`.
+__Major Release__ means `MAJOR_VERSION` or `MINOR_VERSION` changed, and 
__Patch Release__ means `PATCH_VERSION` changed.
+
+The main step towards preparing a feature release is to create a release 
branch. This is done via standard Git branching
+mechanism and should be announced to the community once the branch is created.
+
+!!! note
+    If you are releasing a patch version, you can ignore this step.
+
+The release branch pattern is `branch-{MAJOR_VERSION}.{MINOR_VERSION}`, e.g. 
`branch-0.3`.
+
+After cutting release branch, don't forget bump version in `main` branch.
+
+## Build a release candidate
+
+> Don't forget to switch to the release branch!
+
+- Set environment variables.
+
+```shell
+# The RELEASE_VERSION will be extracted from the project's root `pom.xml`
+export RELEASE_RC_NO=<RC number, e.g. 0>
+```
+
+- Bump version.
+
+Considering that other committers may merge PRs during your release period, 
you should accomplish the version change
+first, and then come back to the release candidate tag to continue the rest 
release process.
+
+The tag pattern is `v${RELEASE_VERSION}-rc${RELEASE_RC_NO}`, e.g. 
`v0.3.1-incubating-rc0`
+
+!!! note
+    After all the voting passed, be sure to create a final tag with the 
pattern: `v${RELEASE_VERSION}-incubating`
+
+```shell
+# Bump to the release version
+# change the <project.version> in pom to ${RELEASE_VERSION}
+git commit -am "[RELEASE] Bump ${RELEASE_VERSION}"
+
+# Create tag
+git tag v${RELEASE_VERSION}-rc${RELEASE_RC_NO}
+
+# Push branch to apache remote repo
+git push apache
+
+# Push tag to apache remote repo
+git push apache v${RELEASE_VERSION}-rc${RELEASE_RC_NO}
+
+# Go back to release candidate tag 
+git checkout v${RELEASE_VERSION}-rc${RELEASE_RC_NO}
+```
+
+- Package source and binary artifacts, and upload them to the Apache staging 
SVN repo. Publish jars to the Apache
+  staging Maven repo.
+
+```shell
+build/release/release.sh publish
+```
+
+To make your release available in the staging repository, you must close the 
staging repo in the [Apache 
Nexus](https://repository.apache.org/#stagingRepositories). Until you close, 
you can re-run deploying to staging multiple times. But once closed, it will 
create a new staging repo. So ensure you close this, so that the next RC (if 
need be) is on a new repo. Once everything is good, close the staging 
repository on Apache Nexus.
+
+- Generate a pre-release note from GitHub for the subsequent voting.
+
+Goto the [release page](https://github.com/apache/incubator-celeborn/releases) 
and click the "Draft a new release" button, then it would jump to a new page to 
prepare the release.
+
+Filling in all the necessary information required by the form. And in the 
bottom of the form, choose the "This is a pre-release" checkbox. Finally, click 
the "Publish release" button to finish the step.
+
+!!! note
+    The pre-release note is used for voting purposes. It would be marked with 
a **Pre-release** tag. After all the voting works(dev and general) are 
finished, do not forget to inverse the "This is a pre-release" checkbox. The 
pre-release version comes from vx.y.z-rcN tags, and the final version should 
come from vx.y.z tags.
+
+## Vote on the release candidate
+
+The release voting takes place on the Apache Celeborn (Incubating) developers 
list (the (P)PMC is voting).
+
+- If possible, attach a draft of the release notes with the email.
+- Recommend represent voting closing time in UTC format.
+- Make sure the email is in text format and the links are correct.
+
+Once the vote is done, you should also send out a summary email with the 
totals, with a subject that looks
+something like __[VOTE][RESULT] Release Apache Celeborn(Incubating)  ...__
+
+Then, you can move the release vote on the general incubator mailing list. 
Also, you should send out a summary email like dev ML voting.
+
+!!! note
+    Any reason causes voting cancel. You should re-vote on the dev ML firstly.
+
+## Finalize the Release
+
+__Be Careful!__
+
+__THIS STEP IS IRREVERSIBLE so make sure you selected the correct staging 
repository.__
+__Once you move the artifacts into the release folder, they cannot be 
removed.__
+
+After the vote passes, to upload the binaries to Apache mirrors, you move the 
binaries from dev directory (this should
+be where they are voted) to release directory. This "moving" is the only way 
you can add stuff to the actual release
+directory. (Note: only (P)PMC members can move to release directory)
+
+Move the subdirectory in "dev" to the corresponding directory in "release". If 
you've added your signing key to the
+KEYS file, also update the release copy.
+
+```shell
+build/release/release.sh finalize
+```
+
+Verify that the resources are present in 
https://www.apache.org/dist/incubator/incubator/. It may take a while for them 
to be visible.
+This will be mirrored throughout the Apache network.
+
+For Maven Central Repository, you can Release from the [Apache Nexus 
Repository Manager](https://repository.apache.org/).
+Log in, open "Staging Repositories", find the one voted on, select and click 
"Release" and confirm. If successful, it
+should show up under 
https://repository.apache.org/content/repositories/releases/org/apache/celeborn/
 and the same under
+https://repository.apache.org/content/groups/maven-staging-group/org/apache/celeborn/
 (look for the correct release version).
+After some time this will be synced to [Maven 
Central](https://search.maven.org/) automatically.
+
+## Promote the release
+
+### Update Website
+
+Fork and clone [Apache Celeborn 
website](https://github.com/apache/incubator-celeborn-website)
+
+1. Add a new markdown file in `docs/community/release_notes/`
+2. Add a new segment in `docs/community/news.md`
+3. Update `releases` defined in `docs/download.md`
+4. Add the latest release version in `.github/workflows/site.yaml`
+5. Update the `stable_version` and `version` in `mkdocs.yml`
+
+### Create an Announcement
+
+Once everything is working, create an announcement and send an e-mail to the 
mailing list.
+The mailing list includes: `[email protected]`, 
`[email protected]`, 
+`[email protected]`, `[email protected]`,`[email protected]`.
+
+!!! note
+    You must use the apache.org email to send announce to 
`[email protected]`.
+
+Enjoy an adult beverage of your choice, and congratulations on making a 
Celeborn release.
+
+## Remove the dist repo directories for deprecated release candidates
+
+Remove the deprecated dist repo directories at last.
+
+```shell
+cd work/svn-dev
+svn delete 
https://dist.apache.org/repos/dist/dev/incubator/celeborn/{RELEASE_TAG} \
+  --username "${ASF_USERNAME}" \
+  --password "${ASF_PASSWORD}" \
+  --message "Remove deprecated Apache Celeborn ${RELEASE_TAG}" 
+```
diff --git a/mkdocs.yml b/mkdocs.yml
index 7a2feb4..047daba 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -84,6 +84,7 @@ nav:
       - Become a Committer: community/committer.md
       - Become a PPMC Member: community/ppmc.md
       - Latest News: community/news.md
+      - Release Guide: community/release_guide.md
       - Contributor Guide:
           - Build and Test: community/contributor_guide/build_and_test.md
           - Docs and Website: community/contributor_guide/docs_and_website.md

Reply via email to