You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@eventmesh.apache.org by xi...@apache.org on 2023/02/06 03:27:40 UTC

[incubator-eventmesh-site] branch master updated: docs: fetch the docs from apache/incubator-eventmesh

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

xiaoyang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-eventmesh-site.git


The following commit(s) were added to refs/heads/master by this push:
     new 54c58b56 docs: fetch the docs from apache/incubator-eventmesh
54c58b56 is described below

commit 54c58b56ffe30efd6befa7f214e42aaf9abc410f
Author: Xiaoyang Liu <si...@gmail.com>
AuthorDate: Sun Feb 5 19:27:14 2023 -0800

    docs: fetch the docs from apache/incubator-eventmesh
    
    Signed-off-by: Xiaoyang Liu <si...@gmail.com>
---
 docs/contribute/01-release.md                      | 192 ++++++
 docs/contribute/02-write-unit-test.md              |  77 +++
 docs/contribute/03-new-contributor-guidelines.md   | 145 ++++
 docs/contribute/_category_.json                    |   5 +
 docs/instruction/01-store-with-docker.md           |  26 +-
 docs/instruction/01-store.md                       |  14 +-
 docs/instruction/02-runtime-with-docker.md         |   5 +-
 docs/instruction/02-runtime.md                     |  10 +-
 docs/upgrade-guide/01-upgrade-guide.md             |   3 +-
 .../current/contribute/01-release.md               | 731 +++++++++++++++++++++
 .../current/contribute/02-write-unit-test.md       |  78 +++
 .../contribute/03-new-contributor-guidelines.md    | 262 ++++++++
 .../current/contribute/_category_.json             |   5 +
 .../current/design-document/05-metrics-export.md   |  14 +-
 .../current/design-document/11-prometheus.md       |   1 +
 .../current/design-document/_category_.json        |   2 +-
 .../current/design-document/https.md               |  32 +
 .../current/design-document/webhook.md             | 268 ++++++++
 .../current/instruction/00-eclipse.md              |  11 +-
 .../current/instruction/01-store-with-docker.md    |  10 +-
 .../current/instruction/_category_.json            |   2 +-
 .../current/introduction.md                        |   5 -
 .../current/sdk-java/01-intro.md                   |   4 +-
 .../current/upgrade-guide/01-upgrade-guide.md      |  16 -
 .../current/upgrade-guide/_category_.json          |   5 -
 25 files changed, 1846 insertions(+), 77 deletions(-)

diff --git a/docs/contribute/01-release.md b/docs/contribute/01-release.md
new file mode 100644
index 00000000..9fc3d31f
--- /dev/null
+++ b/docs/contribute/01-release.md
@@ -0,0 +1,192 @@
+# Release Creation Process
+
+:::caution
+The documentation of Release Creation Process is WIP (Work-in-Progress).
+:::
+
+## Understand the content and process of Apache publishing
+
+Source Release is the focus of Apache and a must for release; while Binary Release is optional,
+
+Please refer to the link below to find more publishing guidelines on ASF:
+
+- [Apache Release Guide](http://www.apache.org/dev/release-publishing)
+- [Apache Release Policy](http://www.apache.org/dev/release.html)
+- [Maven Release Info](http://www.apache.org/dev/publishing-maven-artifacts.html)
+
+
+## Local build environment preparation
+
+Mainly including signing tools, Maven warehouse certification related preparations
+
+### 1. Install GPG
+
+Download the installation package from [GnuPG official website](https://www.gnupg.org/download/index.html). The commands of GnuPG 1.x version and 2.x version are slightly different. The following instructions take **GnuPG-2.x** version as an example
+
+```sh
+$ gpg --version #Check the version, it should be 2.x
+```
+
+### 2. Generate key with gpg
+
+According to the prompt, generate the key
+
+> Note: Please use the Apache mailbox to generate the GPG Key
+
+```shell
+$ gpg --full-gen-key
+gpg (GnuPG) 2.0.12; Copyright (C) 2009 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 key size 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: ${enter username}
+Email address: ${email address}
+Comment: CODE SIGNING KEY
+You selected this USER-ID:
+    "${enter username} (CODE SIGNING KEY) <${email address}>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+You need a Passphrase to protect your secret key. # Fill in the password, which will be often used in the packaging process in the future
+```
+
+### 3. View key
+
+```shell
+$ gpg --list-keys
+pub rsa4096/579C25F5 2021-04-26 # 579C25F5 is the key id
+uid [ultimate] ${enter username} <${email address}>
+sub rsa4096 2021-04-26
+
+# Send public key to keyserver by key id
+$ gpg --keyserver pgpkeys.mit.edu --send-key 579C25F5
+# Among them, pgpkeys.mit.edu is a randomly selected keyserver, and the keyserver list is: https://sks-keyservers.net/status/, which are automatically synchronized with each other, and you can choose any one.
+$ gpg --keyserver hkp://pgpkeys.mit.edu --recv-keys 579C25F5 # Verify whether it is synchronized to the public network, if the network is not good, you may need to try a few more times
+```
+
+**Note: If there are multiple public keys, set the default key. ** Modify `~/.gnupg/gpg.conf`
+
+```sh
+# If you have more than 1 secret key in your keyring, you may want to
+# uncomment the following option and set your preferred keyid.
+default-key 28681CB1
+```
+
+**If there are multiple public keys, useless keys can also be deleted:**
+
+```shell
+$ gpg --delete-secret-keys 29BBC3CB # Delete the private key first and specify the key id
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 g10 Code GmbH
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+sec rsa4096/EE8DAE7D29BBC3CB 2021-04-27 mikexue <mi...@apache.org>
+
+Delete this key from the keyring? (y/N) y
+This is a secret key! - really delete? (y/N) y
+```
+
+```shell
+$ gpg --delete-keys 29BBC3CB # delete public key, specify key id
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 g10 Code GmbH
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+
+pub rsa4096/EE8DAE7D29BBC3CB 2021-04-27 mikexue <mi...@apache.org>
+
+Delete this key from the keyring? (y/N) y
+```
+
+Since the public key server has no checking mechanism, anyone can upload the public key in your name, so there is no way to guarantee the reliability of the public key on the server. Usually, you can publish a public key fingerprint on the website, so that others can check whether the downloaded public key is genuine.
+
+```shell
+# The fingerprint parameter generates a public key fingerprint:
+$ gpg --fingerprint mikexue
+pub rsa4096 2021-04-26 [SCA]
+       F84A 0041 D70B 37AF 9C7B F0B3 39F4 29D7 579C 25F5
+uid [ultimate] mikexue <mi...@apache.org>
+sub rsa4096 2021-04-26 [E]
+```
+
+Log in to [https://id.apache.org](https://id.apache.org/), paste the above fingerprint (ie F84A 0041 D70B 37AF 9C7B F0B3 39F4 29D7 579C 25F5) into your user information OpenPGP Public Key Primary Fingerprint
+
+
+
+## Publish the Apache Maven repository
+
+> Note: EventMesh uses Gradle to build, you need to modify the gradle related configuration
+
+### 1. Export the private key file
+
+```shell
+$ gpg --export-secret-keys -o secring.gpg #The private key file is kept properly, and it needs to be configured later
+```
+
+### 2. Prepare branch
+
+Pull the new branch from the trunk branch as the release branch. If you want to release the $`{release_version}` version now, pull the new branch `${release_version}-release` from the develop branch, and then `${release_version}` Release Candidates involves The modification and labeling of all files are carried out in the `${release_version}-release` branch, and merged into the main branch after the final release is completed.
+
+### 3. Update version description
+
+Update the following files of the official website project and submit them to the master branch:
+
+https://github.com/apache/incubator-eventmesh-site/tree/master/events/release-notes
+
+### 4. Configure the gradle.properties file under the root project
+
+```shell
+group=org.apache.eventmesh
+version=1.2.0-release
+#The last 8 digits of the 40-bit public key
+signing.keyId=579C25F5
+#passphrase filled in when generating the key
+signing.password=
+#Exported private key file secring.gpg path
+signing.secretKeyRingFile=../secring.gpg
+#apache account
+apacheUserName=
+#apache password
+apachePassWord=
+```
+
+### 5. Check the gradle.properties file under the submodule
+
+```shell
+group=org.apache.eventmesh
+version=${release_version}
+```
+
+### 6. Check and configure the build.gradle file under the root project
+
+```shell
+publishing {
+     publications {
+         mavenJava(MavenPublication) {
+             from components.java
+             artifact packageSources
+             artifact package Javadoc
+             versionMapping {
+                 usage('java-api') {
+                     fromResolutionOf('runtimeClasspath')
+                 }
diff --git a/docs/contribute/02-write-unit-test.md b/docs/contribute/02-write-unit-test.md
new file mode 100644
index 00000000..0c48e46b
--- /dev/null
+++ b/docs/contribute/02-write-unit-test.md
@@ -0,0 +1,77 @@
+# Unit Test Requirement
+
+- Each unit test case should use assertions instead of `System.out` output or `if` statement
+- Each unit test case shouldn't call other cases or depend on the order of execution.
+- Each unit test case should be repeatable and not depend on the external environment because the test might be executed in the continuous integration.
+- The scope of each unit test should be small enough to help locate the problem at the method level.
+
+## Location and Naming Rules
+
+- The unit test should be placed in `src/test/java`.
+- The unit test configuration file should be placed in `src/test/resources`. For example:
+  - Class to be tested: `src/main/java/org/apache/eventmesh/common/protocol/http/body/BaseResponseBody.java`
+  - Unit test: `src/test/java/org/apache/eventmesh/common/protocol/http/body/BaseResponseBodyTest.java`
+  - Unit test configuration: `src/test/resources/configuration.properties`
+- The package name of the unit test class should be identical to the class to be tested.
+- The name of the unit test class should be `{class or interface to be tested}Test`. For example:
+  - Class to be tested: `EventMeshUtil`
+  - Unit test class: `EventMeshUtilTest`
+- The name of each test case should be `test{method name}`. For example:
+  - Method to be tested: `addProp(String key, String val)`
+  - Unit test case: `testAddProp`
+
+## Assertion Usage
+
+### Common Assertion
+
+| Methods | Instructions |
+| :-------------- | :-------------- |
+| `assertEquals`    | Determines whether two objects or primitive types are equal |
+| `assertNotEquals` | Determines whether two objects or primitive types are not equal |
+| `assertTrue`      | Determines whether the given Boolean value is `true` |
+| `assertFalse`    | Determines whether the given Boolean value is `false` |
+| `assertNull`      | Determines whether the given object reference is `null` |
+| `assertNotNull`   | Determines whether the given object reference is not `null` |
+| `assertAll`       | When multiple decision logic are processed together if only one error is reported, the whole test will fail |
+
+### Example
+
+#### `assertEquals()`
+
+```java
+configuration.init();
+Assert.assertEquals("value1", configuration.eventMeshEnv);
+```
+
+#### `assertTrue()`
+
+```java
+BaseResponseHeader header = BaseResponseHeader.buildHeader("200");
+Assert.assertTrue(header.toMap().containsKey(ProtocolKey.REQUEST_CODE));
+```
+
+#### `assertFalse()`
+
+```java
+Class<NacosRegistryService> nacosRegistryServiceClass = NacosRegistryService.class;
+Field initStatus = nacosRegistryServiceClass.getDeclaredField("INIT_STATUS");
+initStatus.setAccessible(true);
+Object initStatusField = initStatus.get(nacosRegistryService);
+Assert.assertFalse((Boolean.parseBoolean(initStatusField.toString())));
+```
+
+#### `assertNull()`
+
+```java
+DefaultFullHttpResponse response = httpCommand.httpResponse();
+Assert.assertNull(response);
+```
+
+#### `assertNotNull()`
+
+```java
+Codec.Decoder cd = new Codec.Decoder();
+ArrayList<Object> result = new ArrayList<>();
+cd.decode(null, buf, result);
+Assert.assertNotNull(result.get(0));
+```
diff --git a/docs/contribute/03-new-contributor-guidelines.md b/docs/contribute/03-new-contributor-guidelines.md
new file mode 100644
index 00000000..1099734c
--- /dev/null
+++ b/docs/contribute/03-new-contributor-guidelines.md
@@ -0,0 +1,145 @@
+
+# How to Contribution
+
+If you are a new contributor who wants to contribute to the eventmesh community, please read this document, which describes how to contribute to the community, and if you find any questions in the document, feel free to leave comments or suggestions.
+
+## Preparation
+
+### Development environment
+
+- You should have the JDK installed in your development environment.
+
+### Code Style
+
+Import [EventMesh CheckStyle](https://github.com/apache/incubator-eventmesh/blob/master/style/checkStyle.xml) file to your IDEA.
+
+For IDEA, you can import check style file by:
+```shell
+    Editor -> Code Style -> Java -> Scheme -> Import Scheme -> CheckStyle Configuration
+```
+
+If you can't see CheckStyle Configuration section under Import Scheme, you can install CheckStyle-IDEA plugin first, and you will see it.
+
+You can also use `./gradlew check` to check the code style.  
+(Note: this command will check all file in project, when you submit a pr, the ci will only check the file has been changed in this pr).
+
+### Workflow
+
+Here are the workflow for contributors:
+
+1. Fork to your own
+
+2. Clone fork to local repository
+```git
+git clone git@github.com:yourgithub/incubator-eventmesh.git
+```
+
+3. Create a new branch and work on it
+```git
+git checkout -b fix_patch_xx
+```
+
+4. Keep your branch in sync
+```git
+git remote add upstream git@github.com:apache/incubator-eventmesh.git
+git fetch upstream master:upstream_master
+git rebase upstream_master
+```
+
+5. Commit your changes (make sure your commit message concise)
+
+6. Push your commits to your forked repository
+
+7. Create a pull request
+
+## Explanation
+
+The original warehouse: https://github.com/apache/incubator-eventmesh The apache warehouse of eventmesh is called the original warehouse in the text.
+
+The Fork library: From https://github.com/apache/eventmesh fork to your own personal repository to become a fork library.
+
+So fork the original EventMesh repository into your own repository.
+
+## Development branch
+
+**The current development branch of eventmesh is Master. Please submit PR to this branch.**
+
+- We recommend that you create a new branch in your repository for development and submit the branch to the master branch of eventmesh.
+
+## Contribution Categories
+
+### Bug feedback or bug fixes
+
+- Whether it's a bug feedback or a fix, an issue needs to be created first to describe the bug in detail, so that the community can easily find and view the problem and code through the issue record. bug feedback issues usually need to contain a complete description of the bug information and reproducible scenarios.
+
+### Implementation of functions, refactoring
+
+- If you plan to implement a new feature (or refactoring), be sure to communicate with the eventmesh core development team via an Issue or other means, and describe the new feature (or refactoring), mechanism and scenario in detail during the communication process.
+
+### Documentation Improvement
+
+- You can find the eventmesh documentation at [eventmesh-docs](https://github.com/apache/incubator-eventmesh/tree/master/docs), and the documentation is supplemented or improved in a way that is also essential for eventmesh.
+
+## Contribution method
+
+There are two ways for new contributors to contribute to the eventmesh community:
+
+- If you find a bug in the eventmesh code that you want to fix, or if you provide a new feature for the eventmesh, submit an issue in the eventmesh and submit a pr to the eventmesh.
+
+- Other contributors in the eventmesh community have raised issues, the [`issue for first-time contributors`](https://github.com/apache/incubator-eventmesh/issues/888) sorted out by the community here are relatively simple PR, which can help you familiarize yourself with the process of making contributions to the eventmesh community.
+
+## Submit issue guidelines
+
+- If you don't know how to raise an issue on eventmesh, please read [about the issue](https://docs.github.com/cn/issues/tracking-your-work-with-issues/quickstart).
+
+- In the eventmesh community, there are issue templates that can be used for reference, if the type matches please use the template, if the issue template does not meet your requirements, you can open an empty issue template, for the issue please bring its matching feature labels.
+
+- For the name of the issue, please briefly describe your question or purpose in one sentence, and write in English for better global communication.
+
+##  pull request (pr) submission guidelines
+
+- If you don't know how to initiate a pr for eventmesh, please see [about pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request).
+
+- Whether it's a bug fix, or a new feature development (if this pr is a new feature development, then documentation updates about the new feature should be included in this pr), please submit a PR to the current development branch master.
+
+- The pr submission should follow the template provided by eventmesh as well as the need to write the submission information, a brief description of what the pr you are submitting does is sufficient, please see the [template for details](https://github.com/apache/incubator-eventmesh/blob/master/.github/PULL_REQUEST_TEMPLATE.md).
+
+- The pr you submit needs to be associated with the issue you are fixing, or the issue you are raising,so your PR title should start with [ISSUE #xx].
+
+- If your change is about a typo or small optimize, you needn't create an Issue, just submit a PR and title with [MINOR].
+
+**Note:**
+
+ - A single pull request should not be too large. If heavy changes are required, it's better to separate the changes to a few individual PRs.
+ 
+ - After creating a PR, one or more committers will help to review the pull request, after approve, this PR will be merged in to eventmesh repository, and the related Issue will be closed.
+
+## review
+
+### PR review
+
+All code should be well reviewed by one or more committers. Some principles:
+
+- Readability: Important code should be well-documented. Comply with our [code style](https://github.com/apache/incubator-eventmesh/blob/master/style/checkStyle.xml).
+  
+- Elegance: New functions, classes or components should be well-designed.
+  
+- Testability: Important code should be well-tested (high unit test coverage).
+
+### License review
+
+EventMesh follows [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) policy. All source files should
+have the Apache License header added to the file header. EventMesh uses the [apache/skywalking-eyes](https://github.com/apache/skywalking-eyes) to check
+the source file header.
+
+### PR merge
+
+After a PR is approved by at least one committer, it can be merged. Before the merge, the committer can make changes to the commits message, requiring the commits
+message to be clear without duplication, and use Squash and Merge to make sure one PR should only contain one commits.
+For large multi-person PR, use Merge to merge, and fix the commits by rebase before merging.
+
+## Community
+
+### Contact us
+
+Mail: dev@eventmesh.apache.org
\ No newline at end of file
diff --git a/docs/contribute/_category_.json b/docs/contribute/_category_.json
new file mode 100644
index 00000000..56d36f91
--- /dev/null
+++ b/docs/contribute/_category_.json
@@ -0,0 +1,5 @@
+{
+  "position": 5,
+  "label": "Contribute",
+  "collapsed": false
+}
diff --git a/docs/instruction/01-store-with-docker.md b/docs/instruction/01-store-with-docker.md
index b7bb71d0..7c03f1c6 100644
--- a/docs/instruction/01-store-with-docker.md
+++ b/docs/instruction/01-store-with-docker.md
@@ -10,17 +10,15 @@ Gradle 7.0+, we recommend 7.0.*
 If you choose standalone mode, you could skip this file and go to the next step: Start Eventmesh-Runtime; if not, you could choose RocketMQ as the store layer.
 ```
 
-
 ## Download
 
-Download the Binary code (recommended: 4.9.*) from [RocketMQ Official](https://rocketmq.apache.org/dowloading/releases/). Here we take 4.9.4 as an example.
+Download the Binary code (recommended: 4.9.*) from [RocketMQ Official](https://rocketmq.apache.org/dowloading/releases/). Here we take 4.9.2 as an example.
 
 ```
-unzip rocketmq-all-4.9.4-bin-release.zip
+unzip rocketmq-all-4.9.2-bin-release.zip
 cd rocketmq-4.9.2/
 ```
 
-
 ## Deploy
 
 - #### Start Name Server
@@ -39,31 +37,31 @@ tail -f ~/logs/rocketmqlogs/broker.log
 
 The deployment of eventmesh-store has finished, please go to the next step: [Start Eventmesh-Runtime](02-runtime.md)
 
-
-
 ## Deploy
+
 Pull RocketMQ image from Docker Hub:
 
 ```shell
-#Get RocketMQ image
-sudo docker pull apache/rocketmq:4.9.4
+#获取namesrv镜像
+sudo docker pull rocketmqinc/rocketmq-namesrv:4.5.0-alpine
+#获取broker镜像
+sudo docker pull rocketmqinc/rocketmq-broker:4.5.0-alpine
 ```
 
 Start namesrv  and broker
 
 ```shell
-#Run namerv container
-sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  apache/rocketmq:4.9.4 sh mqnamesrv
+#运行namerv容器
+sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
 
-#Run broker container
-sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" apache/rocketmq:4.9.4 sh mqbroker -c ../conf/broker.conf
+#运行broker容器
+sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq-broker:4.5.0-alpine sh mqbroker -c ../conf/broker.conf
 ```
 
 Please note that the **rocketmq-broker ip** is **pod ip**. If you want to modify this ip, you can set it your custom value in **broker.conf**。
 
-
 By now, the deployment of eventmesh-store has finished, please go to the next step: [Start Eventmesh-Runtime Using Docker](02-runtime-with-docker.md)
 
-
 ## Reference
+
 For more details about RocketMQ,please refer to <https://rocketmq.apache.org/docs/quick-start/>
diff --git a/docs/instruction/01-store.md b/docs/instruction/01-store.md
index ab281c7c..f409d652 100644
--- a/docs/instruction/01-store.md
+++ b/docs/instruction/01-store.md
@@ -2,7 +2,7 @@
 
 ## Dependencies
 
-```
+```text
 64-bit OS,we recommend Linux/Unix;
 64-bit JDK 1.8+;
 Gradle 7.0+, we recommend 7.0.*
@@ -10,7 +10,6 @@ Gradle 7.0+, we recommend 7.0.*
 If you choose standalone mode, you could skip this file and go to the next step: Start Eventmesh-Runtime; if not, you could choose RocketMQ as the store layer.
 ```
 
-
 ## Download
 
 Download the Binary code (recommended: 4.9.*) from [RocketMQ Official](https://rocketmq.apache.org/dowloading/releases/). Here we take 4.9.2 as an example.
@@ -20,25 +19,24 @@ unzip rocketmq-all-4.9.2-bin-release.zip
 cd rocketmq-4.9.2/
 ```
 
-
 ## Deploy
 
-- #### Start Name Server
+### Start Name Server
 
-```
+```console
 nohup sh bin/mqnamesrv &
 tail -f ~/logs/rocketmqlogs/namesrv.log
 ```
 
-- #### Start Broker
+### Start Broker
 
-```
+```console
 nohup sh bin/mqbroker -n localhost:9876 &
 tail -f ~/logs/rocketmqlogs/broker.log
 ```
 
 The deployment of eventmesh-store has finished, please go to the next step: [Start Eventmesh-Runtime](02-runtime.md)
 
-
 ## Reference
+
 For more details about RocketMQ, please refer to <https://rocketmq.apache.org/docs/quick-start/>
diff --git a/docs/instruction/02-runtime-with-docker.md b/docs/instruction/02-runtime-with-docker.md
index 7da3e2a4..31e5c29c 100644
--- a/docs/instruction/02-runtime-with-docker.md
+++ b/docs/instruction/02-runtime-with-docker.md
@@ -2,8 +2,8 @@
 
 The documentation introduces the steps to install the latest release of EventMesh Runtime with Docker and connect to Apache RocketMQ. It's recommended to use a Linux-based system with [Docker Engine](https://docs.docker.com/engine/install/). Please follow the [Docker tutorial](https://docs.docker.com/get-started/) to get familiar with the basic concepts (registry, volume, etc.) and commands of Docker.
 
-
 ## Dependencies
+
 ```
 64-bit OS,we recommend Linux/Unix;
 64-bit JDK 1.8+;
@@ -17,7 +17,7 @@ If you choose standalone mode, you could skip this file and go to the next step:
 Download the pre-built image of [`eventmesh`](https://hub.docker.com/r/eventmesh/eventmesh) from Docker Hub with `docker pull`:
 
 ```console
-$ sudo docker pull eventmesh/eventmesh:v1.4.0
+sudo docker pull eventmesh/eventmesh:v1.4.0
 ```
 
 To verify that the `eventmesh/eventmesh` image is successfully installed, list the downloaded images with `docker images`:
@@ -104,4 +104,3 @@ sudo docker stop [container id or name]
 
 sudo docker rm -f [container id or name]
 ```
-
diff --git a/docs/instruction/02-runtime.md b/docs/instruction/02-runtime.md
index 66bfca7f..3f398d8a 100644
--- a/docs/instruction/02-runtime.md
+++ b/docs/instruction/02-runtime.md
@@ -1,11 +1,10 @@
 # EventMesh Runtime
 
-EventMesh Runtime is the core component of Apache EventMesh (Incubating). It is the middleware that transmits events between producers and consumers. The documentation introduces the step to install and start the latest release of EventMesh Runtime in the local or test environment. The EventMesh Runtime requires a Linux-based system with JDK (Java Development Kit) 8+. 
+EventMesh Runtime is the core component of Apache EventMesh (Incubating). It is the middleware that transmits events between producers and consumers. The documentation introduces the step to install and start the latest release of EventMesh Runtime in the local or test environment. The EventMesh Runtime requires a Linux-based system with JDK (Java Development Kit) 8+.
 
 Here, we take JDK 8 as an example. JDK 8 could be installed with the system package manager or the [openjdk:8-jdk](https://hub.docker.com/_/openjdk) Docker image.
 
-
-## 1 Run on your local machine 
+## 1 Run on your local machine
 
 ### 1.1 Dependencies
 
@@ -70,8 +69,8 @@ dependencies {
 gradle installPlugin
 ```
 
-
 ## 2 Remote deployment
+
 ### 2.1 Dependencies
 
 ```
@@ -83,6 +82,7 @@ If you choose standalone mode, you could skip this file and go to the next step:
 ```
 
 ### 2.2 Download
+
 Download and extract the executable binaries of the latest release from [EventMesh download](https://eventmesh.apache.org/download).
 
 ```console
@@ -92,6 +92,7 @@ tar -xvzf apache-eventmesh-1.5.0-incubating-bin.tar.gz
 ```
 
 ### 2.3 Deploy
+
 Edit the `eventmesh.properties` to change the configuration (e.g. TCP port, client blacklist) of EventMesh Runtime. The executable binaries contain all plugins in the bundle, thus there's no need to build them from source code.
 
 ```console
@@ -104,4 +105,3 @@ Execute the `start.sh` script to start the EventMesh Runtime server.
 ```console
 bash bin/start.sh
 ```
-
diff --git a/docs/upgrade-guide/01-upgrade-guide.md b/docs/upgrade-guide/01-upgrade-guide.md
index d463878f..e300cdf5 100644
--- a/docs/upgrade-guide/01-upgrade-guide.md
+++ b/docs/upgrade-guide/01-upgrade-guide.md
@@ -8,9 +8,8 @@
 
 ## 2. Service upgrade installation
 
-The upgrade and startup of the EventMesh runtime module can be done in accordance with the [deployment guide](https://eventmesh.apache.org/docs/instruction/runtime). 
+The upgrade and startup of the EventMesh runtime module can be done in accordance with the [deployment guide](https://eventmesh.apache.org/docs/instruction/runtime).
 
 For differences and changes between versions, please refer to the [release notes](https://eventmesh.apache.org/events/release-notes) of different versions. Compatibility between versions can be achieved.
 
 If you need to use the latest features, follow the release note to upgrade to the corresponding version That’s it, and different plug-in module components can be packaged and configured separately. You can refer to the corresponding [feature design documents and guidelines](https://eventmesh.apache.org/docs/design-document/)
-
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/contribute/01-release.md b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/01-release.md
new file mode 100644
index 00000000..0810a757
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/01-release.md
@@ -0,0 +1,731 @@
+# Release Creation Process
+
+:::caution
+The documentation of Release Creation Process is WIP (Work-in-Progress).
+:::
+
+## 理解 Apache 发布的内容和流程
+
+Source Release 是 Apache 关注的重点,也是发布的必须内容;而 Binary Release 是可选项,
+
+请参考以下链接,找到更多关于 ASF 的发布指南:
+
+- [Apache Release Guide](http://www.apache.org/dev/release-publishing)
+- [Apache Release Policy](http://www.apache.org/dev/release.html)
+- [Maven Release Info](http://www.apache.org/dev/publishing-maven-artifacts.html)
+
+
+## 本地构建环境准备
+
+主要包括签名工具、Maven 仓库认证相关准备
+
+### 1.安装GPG
+
+在[GnuPG官网](https://www.gnupg.org/download/index.html)下载安装包。GnuPG的1.x版本和2.x版本的命令有细微差别,下列说明以**GnuPG-2.x**版本为例
+
+```sh
+$ gpg --version #检查版本,应该为2.x
+```
+
+### 2.用gpg生成key
+
+根据提示,生成 key
+
+> 注意:请使用Apache邮箱生成GPG的Key
+
+```shell
+$ gpg --full-gen-key
+gpg (GnuPG) 2.0.12; Copyright (C) 2009 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: ${输入用户名}
+Email address: ${邮箱地址}
+Comment: CODE SIGNING KEY
+You selected this USER-ID:
+   "${输入用户名} (CODE SIGNING KEY) <${邮箱地址}>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
+You need a Passphrase to protect your secret key. # 填入密码,以后打包过程中会经常用到
+```
+
+### 3.查看 key
+
+```shell
+$ gpg --list-keys
+pub   rsa4096/579C25F5 2021-04-26 # 579C25F5就是key id
+uid           [ultimate] ${输入用户名} <${邮箱地址}>
+sub   rsa4096 2021-04-26
+
+# 通过key id发送public key到keyserver
+$ gpg --keyserver pgpkeys.mit.edu --send-key 579C25F5
+# 其中,pgpkeys.mit.edu为随意挑选的keyserver,keyserver列表为:https://sks-keyservers.net/status/,相互之间是自动同步的,选任意一个都可以。
+$ gpg --keyserver hkp://pgpkeys.mit.edu --recv-keys 579C25F5 # 验证是否同步到公网,网络不好可能需多试几次
+```
+
+**注:如果有多个 public key,设置默认 key。**修改`~/.gnupg/gpg.conf`
+
+```sh
+# If you have more than 1 secret key in your keyring, you may want to
+# uncomment the following option and set your preferred keyid.
+default-key 28681CB1
+```
+
+**如果有多个 public key, 也可以删除无用的 key:**
+
+```shell
+$ gpg --delete-secret-keys 29BBC3CB # 先删除私钥,指明key id
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 g10 Code GmbH
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+sec  rsa4096/EE8DAE7D29BBC3CB 2021-04-27 mikexue <mi...@apache.org>
+
+Delete this key from the keyring? (y/N) y
+This is a secret key! - really delete? (y/N) y
+```
+
+```shell
+$ gpg --delete-keys 29BBC3CB # 删除公钥,指明key id
+gpg (GnuPG) 2.2.27; Copyright (C) 2021 g10 Code GmbH
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+
+pub  rsa4096/EE8DAE7D29BBC3CB 2021-04-27 mikexue <mi...@apache.org>
+
+Delete this key from the keyring? (y/N) y
+```
+
+由于公钥服务器没有检查机制,任何人都可以用你的名义上传公钥,所以没有办法保证服务器上的公钥的可靠性。 通常,你可以在网站上公布一个公钥指纹,让其他人核对下载到的公钥是否为真。
+
+```shell
+# fingerprint参数生成公钥指纹:
+$gpg --fingerprint mikexue
+pub   rsa4096 2021-04-26 [SCA]
+      F84A 0041 D70B 37AF 9C7B  F0B3 39F4 29D7 579C 25F5
+uid           [ultimate] mikexue <mi...@apache.org>
+sub   rsa4096 2021-04-26 [E]
+```
+
+登录 [https://id.apache.org](https://id.apache.org/), 将上面的 fingerprint (即 F84A 0041 D70B 37AF 9C7B  F0B3 39F4 29D7 579C 25F5) 粘贴到自己的用户信息中 OpenPGP Public Key Primary Fingerprint
+
+
+
+## 发布Apache Maven仓库
+
+> 注:EventMesh使用Gradle构建,需修改gradle相关配置
+
+### 1.导出私钥文件
+
+```shell
+$ gpg --export-secret-keys -o secring.gpg #私钥文件妥善保管,后面配置需要
+```
+
+### 2.准备分支
+
+从主干分支拉取新分支作为发布分支,如现在要发布$`{release_version}`版本,则从develop分支拉出新分支`${release_version}-release`,此后`${release_version}` Release Candidates涉及的修改及打标签等都在`${release_version}-release`分支进行,最终发布完成后合入主干分支。
+
+### 3.更新版本说明
+
+更新官网项目的如下文件,并提交至master分支:
+
+https://github.com/apache/incubator-eventmesh-site/tree/master/events/release-notes
+
+### 4.配置根项目下gradle.properties文件
+
+```shell
+group=org.apache.eventmesh
+version=1.2.0-release
+#40位公钥的最后8位
+signing.keyId=579C25F5
+#生成密钥时填的passphrase
+signing.password=
+#导出的私钥文件secring.gpg路径
+signing.secretKeyRingFile=../secring.gpg
+#apache 账号
+apacheUserName=
+#apache 密码
+apachePassWord=
+```
+
+### 5.检查子模块下gradle.properties文件
+
+```shell
+group=org.apache.eventmesh
+version=${release_version}
+```
+
+### 6.检查并配置根项目下build.gradle文件
+
+```shell
+publishing {
+    publications {
+        mavenJava(MavenPublication) {
+            from components.java
+            artifact packageSources
+            artifact packageJavadoc
+            versionMapping {
+                usage('java-api') {
+                    fromResolutionOf('runtimeClasspath')
+                }
+                usage('java-runtime') {
+                    fromResolutionResult()
+                }
+            }
+            pom {
+                name = 'EventMesh'
+                description = 'Apache EventMesh'
+                url = 'https://github.com/apache/incubator-eventmesh'
+                licenses {
+                    license {
+                        name = 'The Apache License, Version 2.0'
+                        url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+                    }
+                }
+                developers {
+                    developer {
+                        id = 'Apache EventMesh(incubating)'
+                        name = 'Apache EventMesh(incubating) of ASF'
+                        url = 'https://eventmesh.apache.org/'
+                    }
+                }
+                scm {
+                    connection = 'scm:git:git@github.com:apache/incubator-eventmesh.git'
+                    developerConnection = 'scm:git:git@github.com:apache/incubator-eventmesh.git'
+                    url = 'https://github.com/apache/incubator-eventmesh'
+                }
+            }
+        }
+    }
+    repositories {
+        maven {
+            def releasesRepoUrl = 'https://repository.apache.org/service/local/staging/deploy/maven2/'
+            def snapshotsRepoUrl = 'https://repository.apache.org/content/repositories/snapshots/'
+            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
+            credentials {
+                username apacheUserName
+                password apachePassWord
+            }
+
+        }
+    }
+}
+
+signing {
+    sign publishing.publications.mavenJava
+}
+```
+
+### 7.上传发布包
+
+执行如下命令,需要对jar、源码包、doc和pom等文件签名加密
+
+```shell
+$ gradle signMavenJavaPublication publish
+```
+
+上述命令执行成功后,待发布版本会自动上传到Apache的临时筹备仓库(staging repository)。所有被deploy到远程[maven仓库](http://repository.apache.org/)的Artifacts都会处于staging状态,访问https://repository.apache.org/#stagingRepositories, 使用Apache的LDAP账户登录后,就会看到上传的版本,`Repository`列的内容即为${STAGING.REPOSITORY}。 点击`Close`来告诉Nexus这个构建已经完成,只有这样该版本才是可用的。 如果电子签名等出现问题,`Close`会失败,可以通过`Activity`查看失败信息。
+
+
+
+## 发布Apache SVN仓库
+
+### 1.准备svn本机环境(Apache使用svn托管项目的发布内容)
+
+### 2.checkout到本地目录
+
+```shell
+$ svn checkout https://dist.apache.org/repos/dist/dev/incubator/eventmesh/
+# 假定本地目录为 ~/apache/eventmesh
+```
+
+### 3.添加gpg公钥
+
+添加public key到[KEYS](https://dist.apache.org/repos/dist/dev/incubator/eventmesh/KEYS)文件并提交到SVN仓库(第一次做发布的人需要做这个操作,具体操作参考KEYS文件里的说明)。KEYS主要是让参与投票的人在本地导入,用来校验sign的正确性
+
+Windows
+
+```sh
+$ gpg --list-sigs <your name> | out-file -append KEYS -encoding utf8
+$ gpg --armor --export <your name> | out-file -append KEYS -encoding utf8
+```
+
+> Mac OS/Linux
+
+```sh
+$ (gpg --list-sigs <your name> && gpg --armor --export <your name>) >> KEYS
+```
+
+### 4.添加待发布内容到SVN目录
+
+```shell
+$ cd ~/apache/eventmesh # eventmesh svn根目录
+$ mkdir ${release_version}-${rc_version}
+```
+
+#### 4.1 创建tag
+
+在`${release_version}-release`分支上创建tag,需带有rc版本,为预发布版本
+
+```shell
+$ git tag -a v{$release_version}-{$rc_version} -m "Tagging the ${release_version} first Release Candidate (Candidates start at zero)"
+$ git push origin --tags
+```
+
+#### 4.2 打包源码
+
+检查项目源码命名,将源码命名为`apache-eventmesh-${release_version}-incubating-src`,将源码打包为tar.gz格式
+
+```shell
+$ tar -czvf apache-eventmesh-${release_version}-incubating-source.tar.gz apache-eventmesh-${release_version}-incubating-src
+```
+
+#### 4.3 打包二进制
+
+> 编译上一步打包的源码
+
+检查编译后的文件命名,将二进制文件命名为`apache-eventmesh-${release_version}-incubating`
+
+> 注:需将源码根目录下的`NOTICE`文件,`DISCLAIMER-WIP`文件以及`tools/third-party-licenses`目录下的`LICENSE`文件拷贝到二进制的包中
+
+```shell
+$ gradle clean jar dist && gradle installPlugin && gradle tar -x test
+$ tar -czvf apache-eventmesh-${release_version}-incubating-bin.tar.gz apache-eventmesh-${release_version}-incubating
+```
+
+压缩source包、bin包,并将相关的压缩包拷贝到svn本地仓库下`/apache/eventmesh/${release_version}-${rc_version}`
+
+### 5.生成签名/sha512文件
+
+> 针对源码包与二进制包生成签名/sha512文件
+
+```shell
+$ for i in *.tar.gz; do echo $i; gpg --print-md SHA512 $i > $i.sha512 ; done #计算sha512
+$ for i in *.tar.gz; do echo $i; gpg --armor --output $i.asc --detach-sig $i ; done #计算签名
+```
+
+### 6.提交到Apache svn
+
+```shell
+$ cd ~/apache/eventmesh # eventmesh svn根目录
+$ svn status
+$ svn commit -m 'prepare for ${release_version}-${rc_version}'
+```
+
+
+
+## 验证Release Candidates
+
+详细检查列表请参考官方的[check list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+从以下地址下载要发布的Release Candidates到本地环境:
+
+```shell
+https://dist.apache.org/repos/dist/dev/incubator/eventmesh/${release_version}-${rc_version}/
+```
+
+然后开始验证环节,验证包含但不限于以下内容和形式
+
+### 1.检查签名和hash等信息
+
+> 由于操作系统不同,检查的命令或有差异,具体可参考[官方检查步骤](https://www.apache.org/info/verification.html)
+
+#### 1.1检查sha512哈希
+
+> Mac OS/Linux
+
+```shell
+$ shasum -a apache-eventmesh-${release_version}-incubating-source.tar.gz
+#并将输出内容与 apache-eventmesh-${release_version}-${rc_version}-incubating-source.tar.gz.sha512文件内容作对比
+$ shasum -a apache-eventmesh-${release_version}-incubating-bin.tar.gz
+#并将输出内容与 apache-eventmesh-${release_version}-${rc_version}-incubating-bin.tar.gz.sha512文件内容作对比
+```
+
+> Windows
+
+```shell
+$ certUtil -hashfile apache-eventmesh-${release_version}-incubating-source.tar.gz SHA512
+#并将输出内容与 apache-eventmesh-${release_version}-${rc_version}-incubating-source.tar.gz.sha512文件内容作对比
+$ certUtil -hashfile apache-eventmesh-${release_version}-incubating-bin.tar.gz SHA512
+#并将输出内容与 apache-eventmesh-${release_version}-${rc_version}-incubating-bin.tar.gz.sha512文件内容作对比
+```
+
+#### 1.2检查gpg签名
+
+首先导入发布人公钥。从svn仓库导入KEYS到本地环境。(发布版本的人不需要再导入,帮助做验证的人需要导入,用户名填发版人的即可)
+
+```shell
+$ curl https://dist.apache.org/repos/dist/dev/incubator/eventmesh/KEYS >> KEYS
+$ gpg --import KEYS
+$ gpg --edit-key "${发布人的gpg用户名}"
+  > trust
+
+Please decide how far you trust this user to correctly verify other users' keys
+(by looking at passports, checking fingerprints from different sources, etc.)
+
+  1 = I don't know or won't say
+  2 = I do NOT trust
+  3 = I trust marginally
+  4 = I trust fully
+  5 = I trust ultimately
+  m = back to the main menu
+
+Your decision? 5
+
+  > save
+```
+
+然后使用如下命令检查签名
+
+```shell
+$ gpg --verify apache-eventmesh-${release_version}-incubating-source.tar.gz.asc apache-eventmesh-${release_version}-incubating-source-tar.gz
+$ gpg --verify apache-eventmesh-${release_version}-incubating-bin.tar.gz.asc apache-eventmesh-${release_version}-incubating-bin.tar.gz
+```
+
+### 2.检查源码包的文件内容
+
+解压缩`apache-eventmesh-${release_version}-incubating-source-tar.gz`,进行如下检查:
+
+- 检查源码包是否包含由于包含不必要文件,致使tar包过于庞大
+- 文件夹包含单词`incubating`
+- 存在`LICENSE`和`NOTICE`文件
+- 存在`DISCLAIMER`文件
+- `NOTICE`文件中的年份正确
+- 只存在文本文件,不存在二进制文件
+- 所有文件的开头都有ASF许可证
+- 能够正确编译,单元测试可以通过 (./gradle build) (目前支持JAVA 8/gradle 7.0/idea 2021.1.1及以上)
+- 检查是否有多余文件或文件夹,例如空文件夹等
+
+### 3.检查二进制包的文件内容
+
+- 文件夹包含单词`incubating`
+- 存在`LICENSE`和`NOTICE`文件
+- 存在`DISCLAIMER`文件
+- `NOTICE`文件中的年份正确
+- 所有文本文件开头都有ASF许可证
+- 检查第三方依赖许可证:
+  - 第三方依赖的许可证兼容
+  - 所有第三方依赖的许可证都在`LICENSE`文件中声名
+  - 依赖许可证的完整版全部在`license`目录
+  - 如果依赖的是Apache许可证并且存在`NOTICE`文件,那么这些`NOTICE`文件也需要加入到版本的`NOTICE`文件中
+
+你可以参考此文章:[ASF第三方许可证策](https://apache.org/legal/resolved.html)
+
+## 发起投票
+
+> EventMesh 仍在孵化阶段,需要进行两次投票
+
+- EventMesh社区投票,发送邮件至:`dev@eventmesh.apache.org`
+- incubator社区投票,发送邮件至:`general@incubator.apache.org` EventMesh毕业后,只需要在EventMesh社区投票
+
+### 1.EventMesh社区投票阶段
+
+1. EventMesh社区投票,发起投票邮件到`dev@eventmesh.apache.org`。PMC需要先按照文档检查版本的正确性,然后再进行投票。 经过至少72小时并统计到3个`+1 PMC member`票后,即可进入下一阶段的投票。
+2. 宣布投票结果,发起投票结果邮件到`dev@eventmesh.apache.org`。
+
+### 2.EventMesh社区投票模板
+
+标题:
+
+```
+[VOTE] Release Apache EventMesh (incubating) ${release_version} ${rc_version}
+```
+
+正文:
+
+```
+Hello EventMesh Community,
+
+    This is a call for vote to release Apache EventMesh (incubating) version ${release_version}-${rc_version}.
+
+	Release notes:
+	https://github.com/apache/incubator-eventmesh/releases/tag/v${release_version}-${rc_version}
+
+    The release candidates:
+    	https://dist.apache.org/repos/dist/dev/incubator/eventmesh/${release_version}-${rc_version}/
+
+    Maven artifacts are available in a staging repository at:
+    https://repository.apache.org/content/repositories/orgapacheeventmesh-{staging-id}
+
+	Git tag for the release:
+	https://github.com/apache/incubator-eventmesh/tree/v${release_version}-${rc_version}
+
+	Keys to verify the Release Candidate:
+	https://downloads.apache.org/incubator/eventmesh/KEYS
+
+	Hash for the release tag:
+	#hashCode of this release tag
+
+	GPG user ID:
+	${YOUR.GPG.USER.ID}
+
+	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 EventMesh repo.
+
+	[ ] All files have license headers if necessary.
+
+	[ ] No compiled archives bundled in source archive.
+
+	More detail checklist  please refer:
+    https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+Thanks,
+Your EventMesh Release Manager
+```
+
+### 3.宣布投票结果模板
+
+标题:
+
+```
+[RESULT][VOTE] Release Apache EventMesh (incubating) ${release_version} ${rc_version}
+```
+
+正文:
+
+```
+Hello Apache EventMesh PPMC and Community,
+
+    The vote closes now as 72hr have passed. The vote PASSES with
+
+    xx (+1 non-binding) votes from the PPMC,
+    xx (+1 binding) votes from the IPMC,
+    xx (+1 non-binding) votes from the rest of the developer community,
+    and no further 0 or -1 votes.
+
+    The vote thread: {vote_mail_address}
+
+    I will now bring the vote to general@incubator.apache.org to get approval by the IPMC.
+    If this vote passes also, the release is accepted and will be published.
+
+Thank you for your support.
+Your EventMesh Release Manager
+```
+
+### 4.Incubator社区投票阶段
+
+1. Incubator社区投票,发起投票邮件到`general@incubator.apache.org`,需3个 `+1 IPMC Member`投票,方可进入下一阶段。
+2. 宣布投票结果,发起投票结果邮件到`general@incubator.apache.org` 并抄送至`dev@eventmesh.apache.org`。
+
+### 5.Incubator社区投票模板
+
+标题:
+
+```
+[VOTE] Release Apache EventMesh (incubating) ${release_version} ${rc_version}
+```
+
+内容:
+
+```
+Hello Incubator Community,
+
+	This is a call for a vote to release Apache EventMesh(Incubating) version ${release_version} ${rc_version}
+
+	The Apache EventMesh community has voted on and approved a proposal to release
+    Apache EventMesh(Incubating) version ${release_version} ${rc_version}
+
+    We now kindly request the Incubator PMC members review and vote on this
+    incubator release.
+
+    EventMesh community vote thread:
+    • [投票链接]
+
+    Vote result thread:
+    • [投票结果链接]
+
+    The release candidate:
+    •https://dist.apache.org/repos/dist/dev/incubator/eventmesh/${release_version}-${rc_version}/
+
+	Git tag for the release:
+	• https://github.com/apache/incubator-eventmesh/tree/${release_version}-${rc_version}
+	Release notes:
+	• https://github.com/apache/incubator-eventmesh/releases/tag/${release_version}-${rc_version}
+
+	The artifacts signed with PGP key [填写你个人的KEY], corresponding to [填写你个人的邮箱], that can be found in keys file:
+	• https://downloads.apache.org/incubator/eventmesh/KEYS
+
+	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
+
+Thanks,
+On behalf of Apache EventMesh(Incubating) community
+```
+
+### 6.宣布投票结果模板
+
+标题:
+
+```
+[RESULT][VOTE] Release Apache EventMesh (incubating) ${release_version} ${rc_version}
+```
+
+内容:
+
+```
+Hi all,
+
+	Thanks for reviewing and voting for Apache EventMesh(Incubating) version ${release_version} ${rc_version} release, I am happy to announce the release voting has passed with [投票结果数] binding votes, no +0 or -1 votes.
+
+	 Binding votes are from IPMC
+	   - xxx
+   	   - xxx
+       - xxx
+
+     Non-binding votes:
+       +1 xxx
+       +0 xxx
+       -1 xxx
+
+    The voting thread is:
+    • [投票结果链接]
+
+    Many thanks for all our mentors helping us with the release procedure, and all IPMC helped us to review and vote for Apache EventMesh(Incubating) release. I will be 		working on publishing the artifacts soon.
+
+Thanks,
+On behalf of Apache EventMesh(Incubating) community
+```
+
+## 正式发布
+
+### 1.合并分支
+
+合并`${release_version}-release`分支的改动到`master`分支,合并完成后删除`release`分支
+
+```shell
+$ git checkout master
+$ git merge origin/${release_version}-release
+$ git pull
+$ git push origin master
+$ git push --delete origin ${release_version}-release
+$ git branch -d ${release_version}-release
+```
+
+### 2.迁移源码与二进制包
+
+将源码和二进制包从svn的`dev`目录移动到`release`目录
+
+```shell
+$ svn mv https://dist.apache.org/repos/dist/dev/incubator/eventmesh/${release_version}-${rc_version} https://dist.apache.org/repos/dist/release/incubator/eventmesh/ -m "transfer packages for ${release_version}-${rc_version}" #移动源码包与二进制包
+$ svn delete https://dist.apache.org/repos/dist/release/incubator/eventmesh/KEYS -m "delete KEYS" #清除原有release目录下的KEYS
+$ svn cp https://dist.apache.org/repos/dist/dev/incubator/eventmesh/KEYS https://dist.apache.org/repos/dist/release/incubator/eventmesh/ -m "transfer KEYS for ${release_version}-${rc_version}" #拷贝dev目录KEYS到release目录
+```
+
+### 3.确认dev和release下的包是否正确
+
+- 确认[dev](https://dist.apache.org/repos/dist/dev/incubator/eventmesh/)下的`${release_version}-${rc_version}`已被删除
+- 删除[release](https://dist.apache.org/repos/dist/release/incubator/eventmesh/)目录下上一个版本的发布包,这些包会被自动保存在[这里](https://archive.apache.org/dist/incubator/eventmesh/)
+
+```shell
+$ svn delete https://dist.apache.org/repos/dist/release/incubator/eventmesh/${last_release_version} -m "Delete ${last_release_version}"
+```
+
+### 4.在Apache Staging仓库发布版本
+
+- 登录http://repository.apache.org , 使用Apache账号登录
+- 点击左侧的Staging repositories,
+- 搜索EventMesh关键字,选择你最近上传的仓库,投票邮件中指定的仓库
+- 点击上方的`Release`按钮,这个过程会进行一系列检查
+
+> 等仓库同步到其他数据源,一般需要24小时
+
+### 5.GitHub版本发布
+
+1.Tag the commit (on which the vote happened) with the release version without `-${RELEASE_CANDIDATE}`. 例如:after a successful vote on `v1.2-rc5`, the hash will be tagged again with `v1.2` only.
+
+2.在 [GitHub Releases](https://github.com/apache/incubator-eventmesh/releases) 页面的 `${release_version}` 版本上点击 `Edit`
+
+编辑版本号及版本说明,并点击 `Publish release`
+
+### 6.更新下载页面
+
+等待并确认新的发布版本同步至 Apache 镜像后,更新如下页面:
+
+https://eventmesh.apache.org/download/
+
+https://eventmesh.apache.org/zh/download/
+
+GPG签名文件和哈希校验文件的下载连接应该使用这个前缀:`https://downloads.apache.org/incubator/eventmesh/`
+
+> 注意:项目下载链接应该使用 https://www.apache.org/dyn/closer.lua 而不是 closer.cgi 或者 mirrors.cgi
+
+### 7.邮件通知版本发布完成
+
+> 请确保Apache Staging仓库已发布成功,一般是在该步骤的24小时后发布邮件
+
+发邮件到 `dev@eventmesh.apache.org` 、 `announce@apache.org`和`general@incubator.apache.org`
+
+标题:
+
+```
+[ANNOUNCE] Apache EventMesh (incubating) ${release_version} available
+```
+
+正文:
+
+```
+Hi all,
+
+Apache EventMesh (incubating) Team is glad to announce the new release of Apache EventMesh (incubating) ${release_version}.
+
+Apache EventMesh (incubating) is a dynamic cloud-native eventing infrastructure used to decouple the application and backend middleware layer, which supports a wide range of use cases that encompass complex multi-cloud, widely distributed topologies using diverse technology stacks.
+
+Download Links: https://eventmesh.apache.org/projects/eventmesh/download/
+
+Release Notes: https://eventmesh.apache.org/events/release-notes/v${release_version}/
+
+Website: https://eventmesh.apache.org/
+
+EventMesh Resources:
+- Issue: https://github.com/apache/incubator-eventmesh/issues
+- Mailing list: dev@eventmesh.apache.org
+
+
+
+Apache EventMesh (incubating) Team
+```
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/contribute/02-write-unit-test.md b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/02-write-unit-test.md
new file mode 100644
index 00000000..055cdce3
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/02-write-unit-test.md
@@ -0,0 +1,78 @@
+# 单元测试要求
+
+- 每个单元测试都应该使用断言`assertions` 而不是 `System.out` 打印或者`if`语句
+- 每个单元测试都不应该调用其他用例,或者依赖于执行顺序
+- 每个单元测试都应该是可以循环执行的,并且单元测试不可以依赖外部环境,因为单元测试可能在持续集成环境中运行。
+- 每个单元测试的测试范围应该足够小且精准,以便于定位方法级别的问题。
+
+## 路径和命名规则
+
+- 单元测试应该写在`src/test/java`目录下。
+- 单元测试的配置文件应该放在`src/test/resources`目录下,如下示例:
+  - 将被测试的类:`src/main/java/org/apache/eventmesh/common/protocol/http/body/BaseResponseBody.java`
+  - 单元测试类:`src/test/java/org/apache/eventmesh/common/protocol/http/body/BaseResponseBodyTest.java`
+  - 单元测试配置文件:`src/test/resources/configuration.properties`
+- 单元测试类的包名应该和被测试的类的包名相同
+-  单元测试的类的名字应该是`{被测试的类名+}Test`。 比如:
+   - 将被测试的类是:`EventMeshUtil`
+   - 单元测试类的类名就是: `EventMeshUtilTest`
+- 每个单元测试的名字必须是 `test{+方法名}`,比如:
+  - 将被测试的方法:`addProp(String key, String val)`
+  - 单元测试的名字就是:`testAddProp`
+
+## 断言的用法
+
+
+### 常见的断言
+
+| Methods | Instructions |
+| :-------------- | :-------------- |
+| `assertEquals`    | 确定两个对象或原语类型是否相等 |
+| `assertNotEquals` | 确定两个对象或原语类型是否不相等 |
+| `assertTrue`      | 确定给定的布尔值是否是 `true` |
+| `assertFalse`    | 确定给定的布尔值是否是 `false` |
+| `assertNull`      | 确定给定的对象是否是 `null` |
+| `assertNotNull`   | 确定给定的对象是否不是 `null` |
+| `assertAll`       | 如果同时处理多个逻辑,如果只有一个逻辑断言失败,整个测试将会失败|
+
+### 示例
+
+#### `assertEquals()`
+
+```java
+configuration.init();
+Assert.assertEquals("value1", configuration.eventMeshEnv);
+```
+
+#### `assertTrue()`
+
+```java
+BaseResponseHeader header = BaseResponseHeader.buildHeader("200");
+Assert.assertTrue(header.toMap().containsKey(ProtocolKey.REQUEST_CODE));
+```
+
+#### `assertFalse()`
+
+```java
+Class<NacosRegistryService> nacosRegistryServiceClass = NacosRegistryService.class;
+Field initStatus = nacosRegistryServiceClass.getDeclaredField("INIT_STATUS");
+initStatus.setAccessible(true);
+Object initStatusField = initStatus.get(nacosRegistryService);
+Assert.assertFalse((Boolean.parseBoolean(initStatusField.toString())));
+```
+
+#### `assertNull()`
+
+```java
+DefaultFullHttpResponse response = httpCommand.httpResponse();
+Assert.assertNull(response);
+```
+
+#### `assertNotNull()`
+
+```java
+Codec.Decoder cd = new Codec.Decoder();
+ArrayList<Object> result = new ArrayList<>();
+cd.decode(null, buf, result);
+Assert.assertNotNull(result.get(0));
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/contribute/03-new-contributor-guidelines.md b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/03-new-contributor-guidelines.md
new file mode 100644
index 00000000..0564a132
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/03-new-contributor-guidelines.md
@@ -0,0 +1,262 @@
+
+# 如何成为EventMesh的贡献者(Contributor)
+
+如果您想向 eventmesh 社区提交代码,成为的新贡献者(Contributor),请阅读本文档.
+
+本文档描述了如何向社区提交代码的一般流程。如果您在文档中发现任何问题,欢迎留下评论或建议。
+
+## 准备工作
+
+### 开发环境
+
+- 您应该在您的开发环境中安装JDK,建议 JDK 8 及以上版本。
+- 您应该在您的开发环境中安装Gradle,建议 Gradle 7 及以上版本。
+
+### 代码风格
+
+将[EventMesh CheckStyle](https://github.com/apache/incubator-eventmesh/blob/master/style/checkStyle.xml) 文件导入到您的IDEA。
+
+对于IDEA,您可以通过以下方式导入检查样式文件:
+```shell
+    Editor -> Code Style -> Java -> Scheme -> Import Scheme -> CheckStyle Configuration
+```
+
+如果您在导入方案下看不到CheckStyle配置部分,您可以先安装CheckStyle-IDEA插件,就可以看到它。
+
+您也可以使用`./gradlew check`来检查代码风格。
+(注意:这个命令将检查项目中的所有文件,当您提交一个项目时,CI将只检查这个项目中被修改的文件)。
+
+CheckStyle-IDEA插件导入演示:
+
+a.如图安装CheckStyle-IDEA插件
+
+![CheckStyle01](/images/contribute/checkstyle01.png)
+
+b.下载完成后需要导入EventMesh的检查样式文件,如下步骤:
+
+1.如图:
+
+![CheckStyle02](/images/contribute/checkstyle02.png)
+
+2.当点击+号之后会出现以下界面
+
+![CheckStyle03](/images/contribute/checkstyle03.png)
+
+标号1的地方简单取个名字即可,标号2的地方是EventMesh CheckStyle文件的位置,在项目的style文件夹下。
+
+3.点击finish之后就会出现下图界面
+
+![CheckStyle04](/images/contribute/checkstyle04.png)
+
+将添加的样式检查文件勾选上并Apply
+
+c.当完成以上步骤之后就可以在您完成代码编写后进行样式检查了,步骤如下:
+
+1.选择添加的EM-checks文件。
+
+![CheckStyle05](/images/contribute/checkstyle05.png)
+
+2.点击这两个地方都可检查文件样式
+
+![CheckStyle06](/images/contribute/checkstyle06.png)
+
+这两个标号都只检测当前页的文件样式,标号2在当前页鼠标右键即可出现。
+
+### 工作流程
+
+以下是贡献者提交代码的工作流程:
+
+0. 在提交PR之前需要先创建一个ISSUE,它是用来表达你的想法的,比如你发现了代码中的bug,想修复这个bug,那么需要告知社区管理者或贡献者你的想法,就要创建一个ISSUE用于交流讨论。在EventMesh社区有ISSUE模板,可根据您提出的ISSUE中讨论的内容使用相应的模板。
+
+ISSUE创建示例:
+   a.进入到项目仓库的主页,切换到issue标签,点击New issue
+   ![contributor01](/images/contribute/zh/contribute14.png)
+
+   b.就会出现下图界面
+   ![contributor01](/images/contribute/zh/contribute15.png)
+   根据你的需要选择不同的ISSUE模板,如果你觉得没有模板合适,你可以选择打开一个空白模板。
+   当前EventMesh提供了六种ISSUE模板
+   Bug report: 发现代码bug,请使用此模板
+   Documentation Related: 文档相关的,请使用此模板
+   Enhancement Request: 代码优化,增强代码实现的,请使用此模板
+   Feature Request: 为EventMesh提供新的特性功能的使用此模板
+   Question: 对于EventMesh有疑问的,或者有什么不明白的想要提问的,请使用此模板
+   Unit Test: 想为EventMesh做一些单元测试的,请使用此模板
+
+   c.根据模板的提示,完成issue内容填写。主要是描述清楚问题所在和解决方案就可以了
+
+   [ISSUE实例](https://github.com/apache/incubator-eventmesh/issues/2148)
+   如图:
+   ![contributor01](/images/contribute/zh/contribute16.png)
+
+ISSUE与PR关联:
+   后续提交PR的时候,PR的标题和内容应该跟ISSUE完成关联,这样才符合开源的规范,如下图所示
+
+   ![contributor01](/images/contribute/zh/contribute17.png)
+
+   上图ISSUE编号为2148,那么你的PR标题前就是 [ISSUE #2148],这样就关联上了。
+
+
+1. 在issue创建完成后,将源仓库的项目eventmesh fork到自己仓库当中
+例:
+   a.点击eventmesh右上角的fork
+   ![contributor01](/images/contribute/zh/contribute01.png)
+   b.就会出现下图,点击Create fork即可将eventmesh fork到自己的仓库
+   ![contributor02](/images/contribute/zh/contribute02.png)
+
+
+2. fork完成后,克隆自己仓库的代码到本地
+```git
+git clone git@github.com:yourgithub/incubator-eventmesh.git
+```
+
+3. 创建一个新的分支进行工作
+```git
+git checkout -b fix_patch_xx
+```
+
+4. 让您的分支保持同步
+```git
+git remote add upstream git@github.com:apache/incubator-eventmesh.git
+git fetch upstream master:upstream_master
+git rebase upstream_master
+```
+
+5. 提交您的修改(确保您的提交信息简洁明了)
+
+**特别注意:在提交代码之前要确保你提交代码的邮箱要与GitHub邮箱一致,不然在统计contributor数量时会发生无法正常计入的情况**
+
+- 在IDEA中打开Terminal(终端),输入以下命令查看本地使用的邮箱信息
+```git
+git config --global --list
+```
+如图:
+![contributor12](/images/contribute/zh/contribute12.png)
+如果你在提交之前还未登陆邮箱,使用注册GitHub账号时的邮箱
+
+- 如果你发现你的邮箱与GitHub邮箱不一致可通过以下git命令进行修改
+```git
+git config --global user.name 你的目标用户名
+git config --global user.email 你的目标邮箱名
+```
+如图:
+![contributor13](/images/contribute/zh/contribute13.png)
+修改邮箱同理(也可以用这个命令来登陆邮箱)
+
+例:用IDEA提交代码为例,如果您在IDEA本地修改完毕
+   a.点击Commit,点击图片中两个地方中任意一个即可
+   ![contributor03](/images/contribute/zh/contribute03.png)
+   b.就会出现以下图中界面
+   ![contributor04](/images/contribute/zh/contribute04.png)
+   (注:如果是新添加的文件需要Add一下,再Commit,一般IDEA都会提示,如果没有提示,按下图操作即可,文件由红色变为绿色Add成功)
+   ![contributor09](/images/contribute/zh/contribute09.png)
+
+6. 将您的提交推送到自己的fork仓库
+   a.需要push到远程仓库中,注意是您自己的仓库,您需要点击
+   ![contributor05](/images/contribute/zh/contribute05.png)
+   或者是
+   ![contributor06](/images/contribute/zh/contribute06.png)
+   b.就会出现以下界面,确认无误后点击右下角push,就push到自己的仓库了
+   ![contributor07](/images/contribute/zh/contribute07.png)
+   c.当您成功push到自己仓库就会出现下图的提示(在IDEA界面的右下角)
+   ![contributor08](/images/contribute/zh/contribute08.png)
+
+7. 创建一个Pull Request (PR)
+例:
+   a.当您成功push到自己的仓库当中后,进入自己的仓库主页,会出现下图界面
+   ![contributor10](/images/contribute/zh/contribute10.png)
+   b.点击Compare & pull request,就会出现以下界面,按照图中操作即可创建pull request
+   ![contributor11](/images/contribute/zh/contribute11.png)
+
+
+## 解释
+
+原始仓库:https://github.com/apache/incubator-eventmesh Eventmesh的apache仓库在文中被称为原始仓库。
+
+fork库: 从 https://github.com/apache/eventmesh fork到你自己的个人仓库,成为一个fork库。
+
+因此,首先需要将原EventMesh仓库fork到你自己的仓库中。
+
+## 开发分支
+
+**EventMesh 当前的开发分支是 master。请向该分支提交 PR。**
+
+- 我们建议您在本地master分支的基础上创建一个新的开发分支,在该开发分支上提交代码,并基于该分支向原始仓库的master分支提交PR。
+
+## 贡献类别
+
+### 错误反馈或错误修复
+
+- 无论是bug反馈还是修复,都需要先创建一个ISSUE,对bug进行详细描述,这样社区就可以通过问题记录轻松找到并查看问题和代码。bug反馈问题通常需要包含完整的bug信息描述和可重现的场景。
+
+### 功能的实现,重构
+
+- 如果你计划实现一个新功能(或重构),一定要通过 ISSUE 或其他方式与 eventmesh 核心开发团队沟通,并在沟通过程中详细描述新功能(或重构)、机制和场景。
+
+### 文档改进
+
+- 您可以在 [eventmesh-docs](https://github.com/apache/incubator-eventmesh/tree/master/docs) 找到 eventmesh 文档。文档的补充或改进对 eventmesh 是必不可少的。
+
+## 贡献方式
+
+新的贡献者有两种方式来为 eventmesh 社区作出贡献:
+
+- 如果您在 eventmesh 代码中发现了一个你想修复的 bug,或者你为 eventmesh 提供了一个新功能,请在 eventmesh 中提交一个Issue,并向 eventmesh 提交一份 PR。
+
+- eventmesh 社区有其他贡献者提出的ISSUE,这里是社区整理的 [`issue for first-time contributors`](https://github.com/apache/incubator-eventmesh/issues/888) 是相对简单的 PR,可以帮助你熟悉向 eventmesh 社区做贡献的过程。
+
+## 提交ISSUE指南
+
+- 如果您不知道如何在 eventmesh 上提Issue,请阅读前文,或阅读 [about the issue](https://docs.github.com/cn/issues/tracking-your-work-with-issues/quickstart) 。
+
+- 在 eventmesh 社区,有Issue模板可以参考,如果类型匹配请使用该模板,如果Issue模板不符合你的要求,你可以开一个空的Issue模板,对于问题请带上其匹配的功能标签。
+
+- 对于Issue的名称,请用一句话简要描述你的Issue或目的,为了更好的全球交流,请用英文书写。
+
+##  Pull Request(PR)提交指南
+
+- 如果你不知道如何为 eventmesh 发起一个 PR,请阅读前文,或参见 [about pull request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request) 。
+
+- 无论是 bug 修复,还是新功能开发(如果这个 pr 是新功能开发,那么关于新功能的文档更新应该包括在这个 pr 中),请向当前开发分支 master 提交 PR。
+
+- 提交的pr应该遵循eventmesh提供的模板以及需要写的提交信息,简单描述你提交的pr是做什么的就可以了,请阅读 [模板详情](https://github.com/apache/incubator-eventmesh/blob/master/.github/PULL_REQUEST_TEMPLATE.md) 。
+
+- 你提交的PR需要与你要修复的问题,或你要提出的问题相关联,所以你的PR标题应该以[ISSUE #xx]开头。
+
+- 如果你的修改是关于一个错别字或小的优化,你不需要创建一个问题,只要提交一个PR和标题为[MINOR]。
+
+**注意:**
+
+- 一个拉动请求不应该太大。如果需要大量的修改,最好将这些修改分成几个单独的 PR。
+
+- 在创建PR后,一个或多个提交人将帮助审查该拉动请求,在批准后,该PR将被合并到eventmesh主源库中,相关的Issue将被关闭。
+
+## 审查
+
+### PR审查
+
+所有的代码都应该由一个或多个提交者进行良好的审查。一些原则。
+
+- 可读性。重要的代码应该有良好的文档。遵守我们的 [代码风格](https://github.com/apache/incubator-eventmesh/blob/master/style/checkStyle.xml) 。
+
+- 优雅性。新的函数、类或组件应该是精心设计的。
+
+- 可测试性。重要的代码应该经过良好的测试(高单元测试覆盖率)。
+
+### 许可证审查
+
+EventMesh遵循 [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0.html) 政策。所有源文件应
+在文件头中添加Apache许可证头。EventMesh 使用 [apache/skywalking-eyes](https://github.com/apache/skywalking-eyes) 来检查
+源文件的头。
+
+### PR合并
+
+当一个PR被至少一个提交者批准后,它就可以被合并了。合并前,提交者可以对提交信息进行修改,要求提交的
+消息要清楚,不能有重复,并使用 Squash 和 Merge 来确保一个 PR 只应包含一个提交。
+对于大型的多人PR,使用Merge合并,在合并前通过rebase修复提交。
+
+## 社区
+
+### 联系我们
+
+Mail: dev@eventmesh.apache.org
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/contribute/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/_category_.json
new file mode 100644
index 00000000..c966f6a3
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/contribute/_category_.json
@@ -0,0 +1,5 @@
+{
+  "position": 5,
+  "label": "贡献指南",
+  "collapsed": false
+}
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/05-metrics-export.md b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/05-metrics-export.md
index 28e431a9..38be6e07 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/05-metrics-export.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/05-metrics-export.md
@@ -25,18 +25,18 @@ OpenTelemetry 是工具、API 和 SDK 的集合。您可以使用它来检测、
 
 ### 功能要求
 
-| 需求编号 |                       需求描述                        |  说明  |
-| :------- | :---------------------------------------------------: | :----: |
-| F-1      | EventMesh的用户应该能够从Prometheus观察到HTTP监控指标 | 功能性 |
-| F-2      | EventMesh的用户应该能够从Prometheus观察到TCP监控指标  | 功能性 |
+| Requirement ID | Requirement Description                                      | Comments      |
+| :------------- | ------------------------------------------------------------ | ------------- |
+| F-1            | EventMesh users should be able to observe HTTP metrics from Prometheus | Functionality |
+| F-2            | EventMesh users should be able to observe TCP metrics from Prometheus | Functionality |
 
 ## 设计 细节
 
-使用由提供的仪表仪器 OpenTelemetry 观察指标存在於 EventMesh 然后导出到 Prometheus.
+使用由提供的儀表儀器 OpenTelemetry 觀察指標存在於 EventMesh 然後導出到 Prometheus.
 
-1、初始化仪表仪器
+1、初始化儀表儀器
 
-2、设置 Prometheus 服务器
+2、設置 Prometheus 服務器
 
 3、创建了不同的指标观察者
 
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/11-prometheus.md b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/11-prometheus.md
index e262c511..81e09a08 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/11-prometheus.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/11-prometheus.md
@@ -34,3 +34,4 @@ eventMesh.metrics.prometheus.port=19090
 ### 输入想观察的 Metrics
 
 输入’**eventmesh_**‘ 就会出现相关的指标的提示
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/_category_.json
index 95b7eed0..dd1d5300 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/_category_.json
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/_category_.json
@@ -1,4 +1,4 @@
 {
-  "label": "Documentation",
+  "label": "开发文档",
   "collapsed": false
 }
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/https.md b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/https.md
new file mode 100644
index 00000000..a100ba39
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/https.md
@@ -0,0 +1,32 @@
+# HTTPS
+
+1.在eventmesh-runtime 中配置
+
+```
+eventMesh.properties(添加如下配置)
+eventMesh.server.useTls.enabled=true   //默认值 false
+
+
+config env varible
+-Dssl.server.protocol=TLSv1.1   //默认值 TLSv1.1
+-Dssl.server.cer=sChat2.jks     //把文件放到启动脚本start.sh 指定的conPath目录下
+-Dssl.server.pass=sNetty
+```
+
+2.在eventmesh-sdk-java 中配置
+
+```
+//创建producer
+LiteClientConfig eventMeshHttpClientConfig = new eventMeshHttpClientConfig();
+...
+
+//设置开启TLS
+eventMeshHttpClientConfig.setUseTls(true);
+LiteProducer producer = new LiteProducer(eventMeshHttpClientConfig);
+
+
+//配置环境变量
+-Dssl.client.protocol=TLSv1.1   //默认值 TLSv1.1
+-Dssl.client.cer=sChat2.jks     //把文件放到应用指定的conPath目录下
+-Dssl.client.pass=sNetty
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/design-document/webhook.md b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/webhook.md
new file mode 100644
index 00000000..d526177c
--- /dev/null
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/design-document/webhook.md
@@ -0,0 +1,268 @@
+
+
+## webhook使用流程
+#### 第一步:在eventmesh配置webhook相关信息并且启动
+
+##### 配置说明
+```
+# 是否启动webhook admin服务
+eventMesh.webHook.admin.start=true
+
+# webhook事件配置存储模式。目前只支持file与nacos
+eventMesh.webHook.operationMode=file
+# 文件存储模式的文件存放路径,如果写上#{eventMeshHome},在eventMesh根目录
+eventMesh.webHook.fileMode.filePath= #{eventMeshHome}/webhook
+
+# nacos存储模式,配置命名规则是eventMesh.webHook.nacosMode.{nacos 原生配置key} 具体的配置请看 [nacos github api](https://github.com/alibaba/nacos/blob/develop/api/src/main/java/com/alibaba/nacos/api/SystemPropertyKeyConst.java)
+## nacos的地址
+eventMesh.webHook.nacosMode.serverAddr=127.0.0.1:8848
+
+# webhook eventcloud 发送模式。与eventMesh.connector.plugin.type 配置一样
+eventMesh.webHook.producer.connector=standalone
+```
+
+#### 第二步:添加webhook配置信息
+配置信息说明
+```java
+   /**
+    * 厂商调用的path。厂商事件调用地址、 [http or https ]://[域名 or IP 【厂商可以被调用】]:[端口]/webhook/[callbackPath]
+    * 比如:http://127.0.0.1:10504/webhook/test/event 需要把全完url填入厂商调用输入中
+    * callbackPath 是唯一
+    * manufacturer callback path
+    */
+    private String callbackPath;
+
+    /**
+     * 厂商的名字
+     * manufacturer name ,like github
+     */
+    private String manufacturerName;
+
+    /**
+     * 厂商的事件名
+     * webhook event name ,like rep-push
+     */
+    private String manufacturerEventName;
+
+    /**
+     * 
+     * http header content type
+     */
+    private String contentType = "application/json";
+
+    /**
+     * 说明
+     * description of this WebHookConfig
+     */
+    private String description;
+
+    /**
+     * 有一些厂商使用验签方式,
+     * secret key ,for authentication
+     */
+    private String secret;
+
+    /**
+     *  有一些厂商使用验签方式,使用账户密码方式
+     * userName ,for HTTP authentication
+     */
+    private String userName;
+
+    /**
+     *  有一些厂商使用验签方式,使用账户密码方式
+     * password ,for HTTP authentication
+     */
+    private String password;
+
+
+
+    /**
+     * 事件发送到那个topic
+     * roll out event name ,like topic to mq
+     */
+    private String cloudEventName;
+
+    /**
+     * roll out data format -> CloudEvent serialization mode
+     * If HTTP protocol is used, the request header contentType needs to be marked
+     */
+    private String dataContentType = "application/json";;
+
+    /**
+     * source of event
+     */
+    private String cloudEventSource;
+
+    /**
+     * cloudEvent事件对象唯一标识符识别方式,uuid或者manufacturerEventId(厂商id)
+     * id of cloudEvent ,like uuid/manufacturerEventId
+     */
+    private String cloudEventIdGenerateMode;
+
+```
+
+##### 添加接口
+路径: /webhook/insertWebHookConfig
+方法: POST
+contentType: application/json
+
+输入参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| callbackPath | 调用地址,唯一地址 | string | 是 | null |
+| manufacturerName | 厂商名 | string | 是 | null |
+| manufacturerEventName | 厂商事件名 | string | 是 | null |
+| contentType | http connettype | string | 否 | application/json |
+| description | 配置说明 | string | 否 | null |
+| secret | 验签密钥 | string | 否 | null |
+| userName | 用户名 | string | 否 | null |
+| password | 用户密码 | string | 否 | null |
+| cloudEventName | 事件名() | string | 是 | null |
+| cloudEventSource | 事件来源可以填写 | string | 是 | null |
+| cloudEventIdGenerateMode | cloudEvent事件对象唯一标识符识别方式,uuid或者manufacturerEventId(厂商id)  | string | 否 | manufacturerEventId |
+
+列子:
+```json
+
+{
+	"callbackPath":"/webhook/github/eventmesh/all",
+	"manufacturerName":"github",
+	"manufacturerEventName":"all",
+	"secret":"eventmesh",
+	"cloudEventName":"github-eventmesh",
+	"cloudEventSource":"github"
+}
+
+```
+输出参数:1 成功,0失败
+
+##### 删除接口
+路径: /webhook/deleteWebHookConfig
+方法: POST
+contentType: application/json
+
+输入参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| callbackPath | 调用地址,唯一地址 | string | 是 | null |
+
+
+列子:
+
+```json
+
+{
+	"callbackPath":"/webhook/github/eventmesh/all"
+}
+
+```
+
+
+输出参数:1 成功,0失败
+
+##### 通过callbackPath查询WebHookConfig
+路径: /webhook/queryWebHookConfigById
+方法: POST
+contentType: application/json
+
+输入参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| callbackPath | 调用地址,唯一地址 | string | 是 | null |
+
+
+列子:
+
+```json
+
+{
+	"callbackPath":"/webhook/github/eventmesh/all"
+}
+
+```
+
+
+输出参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| callbackPath | 调用地址,唯一地址 | string | 是 | null |
+| manufacturerName | 厂商名 | string | 是 | null |
+| manufacturerEventName | 厂商事件名 | string | 是 | null |
+| contentType | http connettype | string | 否 | application/json |
+| description | 配置说明 | string | 否 | null |
+| secret | 验签密钥 | string | 否 | null |
+| userName | 用户名 | string | 否 | null |
+| password | 用户密码 | string | 否 | null |
+| cloudEventName | 事件名() | string | 是 | null |
+| cloudEventSource | 事件来源可以填写 | string | 是 | null |
+| cloudEventIdGenerateMode | cloudEvent事件对象唯一标识符识别方式,uuid或者manufacturerEventId(厂商id)  | string | 否 | manufacturerEventId |
+
+
+##### 通过manufacturer查询WebHookConfig列表
+路径: /webhook/queryWebHookConfigByManufacturer
+方法: POST
+contentType: application/json
+
+输入参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| manufacturerName | 厂商名 | string | 是 | null |
+
+
+列子:
+
+```json
+
+{
+	"manufacturerName":"github"
+}
+
+```
+
+
+输出参数:
+| 字段 | 说明 | 类型 | 必须 | 默认值 |
+| -- | -- | -- | -- | -- |
+| callbackPath | 调用地址,唯一地址 | string | 是 | null |
+| manufacturerName | 厂商名 | string | 是 | null |
+| manufacturerEventName | 厂商事件名 | string | 是 | null |
+| contentType | http connettype | string | 否 | application/json |
+| description | 配置说明 | string | 否 | null |
+| secret | 验签密钥 | string | 否 | null |
+| userName | 用户名 | string | 否 | null |
+| password | 用户密码 | string | 否 | null |
+| cloudEventName | 事件名() | string | 是 | null |
+| cloudEventSource | 事件来源可以填写 | string | 是 | null |
+| cloudEventIdGenerateMode | cloudEvent事件对象唯一标识符识别方式,uuid或者manufacturerEventId(厂商id)  | string | 否 | manufacturerEventId |
+
+
+#### 第三步:查看配置是否成功
+1. file存储模式。请到eventMesh.webHook.fileMode.filePath 目录下查看。文件名为callbackPath转移后的
+2. nacos存储模式。请到eventMesh.webHook.nacosMode.serverAddr 配置的nacos服务去看
+
+#### 第四步:配置cloudevent的消费者
+
+
+#### 第五步:在厂商配置webhook相关信息
+> 厂商操作请看【厂商webhook操作说明】
+
+
+## 厂商webhook操作说明
+### github 注册
+#### 第一步:进入对应的项目
+#### 第二步:点击setting
+![](/images/design-document/webhook/webhook-github-setting.png)
+#### 第三步:点击Webhooks
+![](/images/design-document/webhook/webhook-github-webhooks.png)
+#### 第四步:点击 Add webhook
+![](/images/design-document/webhook/webhook-github-add.png)
+#### 第五步: 填写webhook信息
+![](/images/design-document/webhook/webhook-github-info.png)
+
+Payload URL: 服务地址以及pahts。[http or https ]://[域名 or IP 【厂商可以被调用】]:[端口]/webhook/[callbackPath]
+Content type:http header content type
+secret: 验签字符串
+
+
+
+
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/00-eclipse.md b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/00-eclipse.md
index 27ded495..c72c0bc6 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/00-eclipse.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/00-eclipse.md
@@ -9,25 +9,28 @@ eclipse 已安装gradle插件或者eclipse自带gradle插件
 ```
 
 ### 下载源码
-git init  
 
-git clone https://github.com/apache/incubator-eventmesh.git
+git init
+
+git clone <https://github.com/apache/incubator-eventmesh.git>
 
 ### 项目编译eclipse环境
 
 打开命令行终端,运行gradlew cleanEclipse eclipse
 
 ### 配置修改
+
 修改工程名称和settings.gradle 配置文件参数rootProject.name 参数一致
 
 ### 修改eclipse.init配置文件,配置lombok以1.18.8版本为例
+
 -javaagent:lombok-1.18.8.jar
 -XBootclasspath/a:lombok-1.18.8.jar
 
 ### 202106版本eclipse,eclipse.init增加配置参数
---illegal-access=permit
 
+--illegal-access=permit
 
 ### 导入gradle
-打开eclipse,导入gradle项目到IDE里
 
+打开eclipse,导入gradle项目到IDE里
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/01-store-with-docker.md b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/01-store-with-docker.md
index 22633da8..539c81cd 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/01-store-with-docker.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/01-store-with-docker.md
@@ -14,18 +14,20 @@ eventmesh在非standalone模式下,依赖RocketMQ作为存储层;若采用st
 在命令行输入如下命令直接从 docker hub 上获取 RocketMQ 镜像:
 
 ```shell
-#获取 RocketMQ 镜像
-sudo docker pull apache/rocketmq:4.9.4
+#获取 namesrv 镜像
+sudo docker pull rocketmqinc/rocketmq-namesrv:4.5.0-alpine
+#获取 broker 镜像
+sudo docker pull rocketmqinc/rocketmq-broker:4.5.0-alpine
 ```
 
 在命令行输入以下命令运行namerv容器和broker容器
 
 ```shell
 #运行 namerv 容器
-sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  apache/rocketmq:4.9.4 sh mqnamesrv
+sudo docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv  rocketmqinc/rocketmq-namesrv:4.5.0-alpine sh mqnamesrv
 
 #运行 broker 容器
-sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" apache/rocketmq:4.9.4 sh mqbroker -c ../conf/broker.conf
+sudo docker run -d -p 10911:10911 -p 10909:10909 -v `pwd`/data/broker/logs:/root/logs -v `pwd`/data/broker/store:/root/store --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" rocketmqinc/rocketmq-broker:4.5.0-alpine sh mqbroker -c ../conf/broker.conf
 ```
 
 请注意 **rocketmq-broker ip** 是 **pod ip**, 如果你想修改这个ip, 可以通过挂载容器中 **broker.conf** 文件的方式并修改文件中的 **brokerIP1** 配置项为自定义值
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/_category_.json
index 06fd721f..838cabfe 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/instruction/_category_.json
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/instruction/_category_.json
@@ -1,4 +1,4 @@
 {
-  "label": "Instructions",
+  "label": "使用教程",
   "collapsed": false
 }
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/introduction.md b/i18n/zh/docusaurus-plugin-content-docs/current/introduction.md
index 255ad9fc..ca2472f7 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/introduction.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/introduction.md
@@ -1,7 +1,3 @@
----
-sidebar_position: 0
----
-
 # Apache EventMesh (Incubating)
 
 [![CI status](https://github.com/apache/incubator-eventmesh/actions/workflows/ci.yml/badge.svg)](https://github.com/apache/incubator-eventmesh/actions/workflows/ci.yml)
@@ -27,7 +23,6 @@ Event Mesh允许将来自一个应用程序的事件动态路由到任何其他
 * eventmesh-runtime:一种中间件,用于在事件生产者和消费者之间传输事件,支持云原生应用程序和微服务
 * eventmesh-sdk-java:当前支持HTTP、HHTTP、TCP和 [gRPC](https://grpc.io) 协议
 
-
 ## 快速开始
 
 1. 构建并部署 event-store(RocketMQ), 请参见[说明](instruction/01-store.md)
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/sdk-java/01-intro.md b/i18n/zh/docusaurus-plugin-content-docs/current/sdk-java/01-intro.md
index cb4b8764..c49acc23 100644
--- a/i18n/zh/docusaurus-plugin-content-docs/current/sdk-java/01-intro.md
+++ b/i18n/zh/docusaurus-plugin-content-docs/current/sdk-java/01-intro.md
@@ -1,4 +1,4 @@
-# 安装
+# 安装 SDK
 
 [![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java/badge.svg?style=for-the-badge)](https://maven-badges.herokuapp.com/maven-central/org.apache.eventmesh/eventmesh-sdk-java)
 
@@ -26,4 +26,4 @@ dependencies {
     <version>1.4.0</version>
   </dependency>
 </dependencies>
-```
\ No newline at end of file
+```
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/01-upgrade-guide.md b/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/01-upgrade-guide.md
deleted file mode 100644
index 733b5e19..00000000
--- a/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/01-upgrade-guide.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# EventMesh 升级指引
-
-> 本文简单介绍EventMesh从1.2.0版本升级到最新版本的注意事项。
-
-## 1. 注意事项
-
-**如果您是首次接触并使用EventMesh,您可以忽略该章节。**
-
-## 2. 服务升级安装
-
-EventMesh运行时模块的升级和启动可以按照 [设计文档](https://eventmesh.apache.org/docs/instruction/runtime) 完成. 
-
-版本之间的差异和变化,请参考不同版本的[release notes](https://eventmesh.apache.org/events/release-notes)。可以满足不同版本间的兼容性。
-
-如果需要使用最新的功能,按照版本说明升级到相应的版本即可,不同的插件模块组件可以单独打包配置。可以参考相应的[功能设计文档和指南](https://eventmesh.apache.org/docs/design-document/)
-
diff --git a/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/_category_.json b/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/_category_.json
deleted file mode 100644
index af764643..00000000
--- a/i18n/zh/docusaurus-plugin-content-docs/current/upgrade-guide/_category_.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "position": 7,
-  "label": "Upgrade Guide",
-  "collapsed": false
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@eventmesh.apache.org
For additional commands, e-mail: commits-help@eventmesh.apache.org