You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by ur...@apache.org on 2022/09/30 00:58:51 UTC

[pulsar-site] branch main updated: Fix release table versioning and style issues (#237)

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

urfree pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-site.git


The following commit(s) were added to refs/heads/main by this push:
     new e6462ca5fb1 Fix release table versioning and style issues (#237)
e6462ca5fb1 is described below

commit e6462ca5fb13faf98f71502a145b89f44a0affa6
Author: Mercurio <32...@users.noreply.github.com>
AuthorDate: Fri Sep 30 08:58:46 2022 +0800

    Fix release table versioning and style issues (#237)
---
 site2/tools/release-json-gen.sh                    |  21 +-
 site2/website-next/data/release-cpp.js             |  36 ++--
 site2/website-next/data/release-cs.js              |  13 +-
 site2/website-next/data/release-java.js            |  47 ++---
 site2/website-next/data/release-pulsar.js          | 103 ++-------
 site2/website-next/data/release-python.js          |  35 ++--
 site2/website-next/data/release-ws.js              |  20 +-
 site2/website-next/release-notes/all.md            | 231 +--------------------
 .../src/components/ClientReleaseTable.js           |  39 ++++
 .../src/components/PulsarReleaseTable.js           |  60 ++++++
 10 files changed, 218 insertions(+), 387 deletions(-)

diff --git a/site2/tools/release-json-gen.sh b/site2/tools/release-json-gen.sh
index b5eebc7ea2f..515e3a86cc5 100755
--- a/site2/tools/release-json-gen.sh
+++ b/site2/tools/release-json-gen.sh
@@ -56,14 +56,12 @@ echo $GH_TOKEN > "$TOKEN_FILE"
 gh auth login --with-token < "$TOKEN_FILE"
 rm "$TOKEN_FILE"
 
-# list all versions sorted by version number desc
-versions=$(gh release list -R apache/pulsar | awk '{print $1}' | sort -rV)
+# list all versions (after v2.5.1) sorted by version number desc
+versions=$(gh release list -R apache/pulsar | head -n -10 | awk '{print $1}' | sort -rV)
 for v in $versions
 do
-    if [[ $v != v* ]]; then # if the version doesn't start with v, add it
-        v="v$v"
-    fi
     vnum=${v:1} # version number without the leading "v"
+    vtag=$vnum
 
     # Release Note URL
     release_notes=$RELEASE_NOTES/pulsar-$vnum/
@@ -92,6 +90,7 @@ do
     lower=$(printf '%s\n2.8.0' "$vnum" | sort -V | head -n1)
     if [[ $lower == "2.8.0" ]]; then # 2.8.0 or later, use ".x" as patch number
         vnum="${vnum%.*}.x"
+        vtag="${vnum%.*}.x"
     fi
     if [[ ${vnum%.*} == "$LATEST" ]]; then # latest version, use docs/ directly
         vnum=""
@@ -103,7 +102,7 @@ do
     doc_ws=$doc/client-libraries-websocket
 
     # Construct Pulsar JSON
-    entry=$(gh release view "$v" -R apache/pulsar --json author,tagName,publishedAt | jq "{author:.author.login,tagName,publishedAt,releaseNotes:\"$release_notes\",releaseBlog:\"$release_blog\",doc:\"$doc\"}")
+    entry=$(gh release view "$v" -R apache/pulsar --json author,tagName,publishedAt | jq "{author:.author.login,tagName,publishedAt,vtag:\"$vtag\",releaseNotes:\"$release_notes\",releaseBlog:\"$release_blog\",doc:\"$doc\"}")
     echo "$entry," >> "$OUTPUT_PULSAR"
 
     # Construct Client JSON
@@ -112,25 +111,25 @@ do
 
     # Java Client
     if [[ $release_body == *"java"* ]]; then
-        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,releaseNotes:\"$release_notes_java\",doc:\"$doc_java\"}")
+        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,vtag:\"$vtag\",releaseNotes:\"$release_notes_java\",doc:\"$doc_java\"}")
         echo "$entry," >> "$OUTPUT_JAVA"
     fi
 
     # Python Client
     if [[ $release_body == *"python"* ]]; then
-        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,releaseNotes:\"$release_notes_python\",doc:\"$doc_python\"}")
+        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,vtag:\"$vtag\",releaseNotes:\"$release_notes_python\",doc:\"$doc_python\"}")
         echo "$entry," >> "$OUTPUT_PYTHON"
     fi
 
     # C++ Client
     if [[ $release_body == *"c++"* ]]; then
-        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,releaseNotes:\"$release_notes_cpp\",doc:\"$doc_cpp\"}")
+        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,vtag:\"$vtag\",releaseNotes:\"$release_notes_cpp\",doc:\"$doc_cpp\"}")
         echo "$entry," >> "$OUTPUT_CPP"
     fi
 
     # Websocket Client
     if [[ $release_body == *"websocket"* ]]; then
-        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,releaseNotes:\"$release_notes_ws\",doc:\"$doc_ws\"}")
+        entry=$(gh release view "$v" -R apache/pulsar --json tagName | jq "{tagName,vtag:\"$vtag\",releaseNotes:\"$release_notes_ws\",doc:\"$doc_ws\"}")
         echo "$entry," >> "$OUTPUT_WS"
     fi
 done
@@ -170,7 +169,7 @@ do
 done
 
 # C# Client, note that we can only get the tags here
-versions=$(gh api repos/apache/pulsar-dotpulsar/tags -q ".[].name" | sort -rV)
+versions=$(gh api repos/apache/pulsar-dotpulsar/tags -q ".[].name" | head -n -11 | sort -rV)
 for v in $versions
 do
     # Release Note URL
diff --git a/site2/website-next/data/release-cpp.js b/site2/website-next/data/release-cpp.js
index f334088ff59..3c2216b0be5 100644
--- a/site2/website-next/data/release-cpp.js
+++ b/site2/website-next/data/release-cpp.js
@@ -1,122 +1,128 @@
 module.exports = [
 {
   "tagName": "v2.10.1",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.10.1/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-cpp"
 },
 {
   "tagName": "v2.10.0",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.10.0/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-cpp"
 },
 {
   "tagName": "v2.9.3",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.9.3/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.9.2",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.9.2/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.8.3",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.8.3/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.8.2",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.8.2/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.8.1",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.8.1/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.8.0",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.8.0/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.5",
+  "vtag": "2.7.5",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.5/",
   "doc": "https://pulsar.apache.org/docs/2.7.5/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.4",
+  "vtag": "2.7.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.4/",
   "doc": "https://pulsar.apache.org/docs/2.7.4/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.3",
+  "vtag": "2.7.3",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.3/",
   "doc": "https://pulsar.apache.org/docs/2.7.3/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.2",
+  "vtag": "2.7.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.2/",
   "doc": "https://pulsar.apache.org/docs/2.7.2/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.1",
+  "vtag": "2.7.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.1/",
   "doc": "https://pulsar.apache.org/docs/2.7.1/client-libraries-cpp"
 },
 {
   "tagName": "v2.7.0",
+  "vtag": "2.7.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.7.0/",
   "doc": "https://pulsar.apache.org/docs/2.7.0/client-libraries-cpp"
 },
 {
   "tagName": "v2.6.4",
+  "vtag": "2.6.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.6.4/",
   "doc": "https://pulsar.apache.org/docs/2.6.4/client-libraries-cpp"
 },
 {
   "tagName": "v2.6.2",
+  "vtag": "2.6.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.6.2/",
   "doc": "https://pulsar.apache.org/docs/2.6.2/client-libraries-cpp"
 },
 {
   "tagName": "v2.5.1",
+  "vtag": "2.5.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.5.1/",
   "doc": "https://pulsar.apache.org/docs/2.5.1/client-libraries-cpp"
 },
 {
   "tagName": "v2.4.2",
+  "vtag": "2.4.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.4.2/",
   "doc": "https://pulsar.apache.org/docs/2.4.2/client-libraries-cpp"
 },
 {
   "tagName": "v2.4.1",
+  "vtag": "2.4.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.4.1/",
   "doc": "https://pulsar.apache.org/docs/2.4.1/client-libraries-cpp"
 },
 {
   "tagName": "v2.4.0",
+  "vtag": "2.4.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.4.0/",
   "doc": "https://pulsar.apache.org/docs/2.4.0/client-libraries-cpp"
 },
 {
   "tagName": "v2.3.2",
+  "vtag": "2.3.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.3.2/",
   "doc": "https://pulsar.apache.org/docs/2.3.2/client-libraries-cpp"
 },
-{
-  "tagName": "v2.3.1",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.3.1/",
-  "doc": "https://pulsar.apache.org/docs/2.3.1/client-libraries-cpp"
-},
-{
-  "tagName": "v2.3.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.3.0/",
-  "doc": "https://pulsar.apache.org/docs/2.3.0/client-libraries-cpp"
-},
-{
-  "tagName": "v2.2.1",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-cpp-2.2.1/",
-  "doc": "https://pulsar.apache.org/docs/2.2.1/client-libraries-cpp"
-},
 ]
diff --git a/site2/website-next/data/release-cs.js b/site2/website-next/data/release-cs.js
index 5b6fb8dc565..f141d994251 100644
--- a/site2/website-next/data/release-cs.js
+++ b/site2/website-next/data/release-cs.js
@@ -17,16 +17,5 @@ module.exports = [
 {"tagName":"0.10.1","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.10.1/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
 {"tagName":"0.10.0","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.10.0/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
 {"tagName":"0.9.7","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.7/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.6","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.6/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.5","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.5/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.4","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.4/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.3","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.3/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.2","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.2/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.1","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.1/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.9.0","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.0/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.8.4","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.8.4/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.8.3","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.8.3/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.8.2","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.8.2/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.8.1","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.8.1/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
-{"tagName":"0.8.0","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.8.0/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"},
+{"tagName":"0.9.6","releaseNotes":"https://pulsar.apache.org/release-notes/versioned/pulsar-cs-0.9.6/","doc":"https://pulsar.apache.org/docs/client-libraries-dotnet"}
 ]
diff --git a/site2/website-next/data/release-java.js b/site2/website-next/data/release-java.js
index 2b8c0de463d..fd7cfb5757c 100644
--- a/site2/website-next/data/release-java.js
+++ b/site2/website-next/data/release-java.js
@@ -1,122 +1,115 @@
 module.exports = [
 {
   "tagName": "v2.10.1",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.10.1/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-java"
 },
 {
   "tagName": "v2.10.0",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.10.0/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-java"
 },
 {
   "tagName": "v2.9.3",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.9.3/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-java"
 },
 {
   "tagName": "v2.9.2",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.9.2/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-java"
 },
 {
   "tagName": "v2.8.3",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.8.3/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-java"
 },
 {
   "tagName": "v2.8.2",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.8.2/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-java"
 },
 {
   "tagName": "v2.8.1",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.8.1/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-java"
 },
 {
   "tagName": "v2.8.0",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.8.0/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-java"
 },
 {
   "tagName": "v2.7.5",
+  "vtag": "2.7.5",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.5/",
   "doc": "https://pulsar.apache.org/docs/2.7.5/client-libraries-java"
 },
 {
   "tagName": "v2.7.4",
+  "vtag": "2.7.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.4/",
   "doc": "https://pulsar.apache.org/docs/2.7.4/client-libraries-java"
 },
 {
   "tagName": "v2.7.3",
+  "vtag": "2.7.3",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.3/",
   "doc": "https://pulsar.apache.org/docs/2.7.3/client-libraries-java"
 },
 {
   "tagName": "v2.7.2",
+  "vtag": "2.7.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.2/",
   "doc": "https://pulsar.apache.org/docs/2.7.2/client-libraries-java"
 },
 {
   "tagName": "v2.7.1",
+  "vtag": "2.7.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.1/",
   "doc": "https://pulsar.apache.org/docs/2.7.1/client-libraries-java"
 },
 {
   "tagName": "v2.7.0",
+  "vtag": "2.7.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.7.0/",
   "doc": "https://pulsar.apache.org/docs/2.7.0/client-libraries-java"
 },
 {
   "tagName": "v2.6.4",
+  "vtag": "2.6.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.6.4/",
   "doc": "https://pulsar.apache.org/docs/2.6.4/client-libraries-java"
 },
 {
   "tagName": "v2.6.2",
+  "vtag": "2.6.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.6.2/",
   "doc": "https://pulsar.apache.org/docs/2.6.2/client-libraries-java"
 },
 {
   "tagName": "v2.6.1",
+  "vtag": "2.6.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.6.1/",
   "doc": "https://pulsar.apache.org/docs/2.6.1/client-libraries-java"
 },
 {
   "tagName": "v2.6.0",
+  "vtag": "2.6.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.6.0/",
   "doc": "https://pulsar.apache.org/docs/2.6.0/client-libraries-java"
 },
 {
   "tagName": "v2.5.1",
+  "vtag": "2.5.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.5.1/",
   "doc": "https://pulsar.apache.org/docs/2.5.1/client-libraries-java"
-},
-{
-  "tagName": "v2.4.2",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.4.2/",
-  "doc": "https://pulsar.apache.org/docs/2.4.2/client-libraries-java"
-},
-{
-  "tagName": "v2.4.1",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.4.1/",
-  "doc": "https://pulsar.apache.org/docs/2.4.1/client-libraries-java"
-},
-{
-  "tagName": "v2.4.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.4.0/",
-  "doc": "https://pulsar.apache.org/docs/2.4.0/client-libraries-java"
-},
-{
-  "tagName": "v2.3.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.3.0/",
-  "doc": "https://pulsar.apache.org/docs/2.3.0/client-libraries-java"
-},
-{
-  "tagName": "v2.2.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-java-2.2.0/",
-  "doc": "https://pulsar.apache.org/docs/2.2.0/client-libraries-java"
-},
-]
+}]
diff --git a/site2/website-next/data/release-pulsar.js b/site2/website-next/data/release-pulsar.js
index 2376ce7c4c3..944132337ea 100644
--- a/site2/website-next/data/release-pulsar.js
+++ b/site2/website-next/data/release-pulsar.js
@@ -3,6 +3,7 @@ module.exports = [
   "author": "codelipenghui",
   "tagName": "v2.10.1",
   "publishedAt": "2022-07-04T14:45:46Z",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.10.1/",
   "releaseBlog": "https://pulsar.apache.org/blog/2022/07/12/Apache-Pulsar-2-10-1",
   "doc": "https://pulsar.apache.org/docs/"
@@ -11,6 +12,7 @@ module.exports = [
   "author": "codelipenghui",
   "tagName": "v2.10.0",
   "publishedAt": "2022-04-18T02:08:43Z",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.10.0/",
   "releaseBlog": "N/A",
   "doc": "https://pulsar.apache.org/docs/"
@@ -19,6 +21,7 @@ module.exports = [
   "author": "mattisonchao",
   "tagName": "v2.9.3",
   "publishedAt": "2022-07-20T02:04:10Z",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.9.3/",
   "releaseBlog": "https://pulsar.apache.org/blog/2022/07/27/Apache-Pulsar-2-9-3",
   "doc": "https://pulsar.apache.org/docs/2.9.x"
@@ -27,6 +30,7 @@ module.exports = [
   "author": "gaoran10",
   "tagName": "v2.9.2",
   "publishedAt": "2022-04-08T03:22:33Z",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.9.2/",
   "releaseBlog": "https://pulsar.apache.org/blog/2022/04/08/Apache-Pulsar-2-9-2",
   "doc": "https://pulsar.apache.org/docs/2.9.x"
@@ -35,6 +39,7 @@ module.exports = [
   "author": "michaeljmarshall",
   "tagName": "v2.8.3",
   "publishedAt": "2022-04-08T03:27:18Z",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.8.3/",
   "releaseBlog": "N/A",
   "doc": "https://pulsar.apache.org/docs/2.8.x"
@@ -43,6 +48,7 @@ module.exports = [
   "author": "315157973",
   "tagName": "v2.8.2",
   "publishedAt": "2022-01-12T09:39:25Z",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.8.2/",
   "releaseBlog": "N/A",
   "doc": "https://pulsar.apache.org/docs/2.8.x"
@@ -51,6 +57,7 @@ module.exports = [
   "author": "hangc0276",
   "tagName": "v2.8.1",
   "publishedAt": "2021-09-18T01:39:29Z",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.8.1/",
   "releaseBlog": "https://pulsar.apache.org/blog/2021/09/23/Apache-Pulsar-2-8-1",
   "doc": "https://pulsar.apache.org/docs/2.8.x"
@@ -59,6 +66,7 @@ module.exports = [
   "author": "codelipenghui",
   "tagName": "v2.8.0",
   "publishedAt": "2021-06-15T10:39:18Z",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.8.0/",
   "releaseBlog": "https://pulsar.apache.org/blog/2021/06/12/Apache-Pulsar-2-8-0",
   "doc": "https://pulsar.apache.org/docs/2.8.x"
@@ -67,6 +75,7 @@ module.exports = [
   "author": "Jason918",
   "tagName": "v2.7.5",
   "publishedAt": "2022-09-06T10:53:32Z",
+  "vtag": "2.7.5",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.5/",
   "releaseBlog": "https://pulsar.apache.org/blog/2022/09/09/Apache-Pulsar-2-7-5",
   "doc": "https://pulsar.apache.org/docs/2.7.5"
@@ -75,6 +84,7 @@ module.exports = [
   "author": "Technoboy-",
   "tagName": "v2.7.4",
   "publishedAt": "2021-12-27T08:24:54Z",
+  "vtag": "2.7.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.4/",
   "releaseBlog": "https://pulsar.apache.org/blog/2021/12/14/Apache-Pulsar-2-7-4",
   "doc": "https://pulsar.apache.org/docs/2.7.4"
@@ -83,6 +93,7 @@ module.exports = [
   "author": "congbobo184",
   "tagName": "v2.7.3",
   "publishedAt": "2021-08-11T01:45:27Z",
+  "vtag": "2.7.3",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.3/",
   "releaseBlog": "https://pulsar.apache.org/blog/2021/08/11/Apache-Pulsar-2-7-3",
   "doc": "https://pulsar.apache.org/docs/2.7.3"
@@ -91,6 +102,7 @@ module.exports = [
   "author": "eolivelli",
   "tagName": "v2.7.2",
   "publishedAt": "2021-05-25T06:30:19Z",
+  "vtag": "2.7.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.2/",
   "releaseBlog": "https://pulsar.apache.org/blog/2021/05/13/Apache-Pulsar-2-7-2",
   "doc": "https://pulsar.apache.org/docs/2.7.2"
@@ -99,6 +111,7 @@ module.exports = [
   "author": "zymap",
   "tagName": "v2.7.1",
   "publishedAt": "2021-03-22T00:35:17Z",
+  "vtag": "2.7.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.1/",
   "releaseBlog": "N/A",
   "doc": "https://pulsar.apache.org/docs/2.7.1"
@@ -107,6 +120,7 @@ module.exports = [
   "author": "codelipenghui",
   "tagName": "v2.7.0",
   "publishedAt": "2020-12-03T08:29:15Z",
+  "vtag": "2.7.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.7.0/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/12/24/Apache-Pulsar-2-7-0",
   "doc": "https://pulsar.apache.org/docs/2.7.0"
@@ -115,6 +129,7 @@ module.exports = [
   "author": "lhotari",
   "tagName": "v2.6.4",
   "publishedAt": "2021-06-02T18:10:21Z",
+  "vtag": "2.6.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.6.4/",
   "releaseBlog": "N/A",
   "doc": "https://pulsar.apache.org/docs/2.6.4"
@@ -123,6 +138,7 @@ module.exports = [
   "author": "wolfstudy",
   "tagName": "v2.6.2",
   "publishedAt": "2020-11-09T05:08:25Z",
+  "vtag": "2.6.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.6.2/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/11/09/Apache-Pulsar-2-6-2",
   "doc": "https://pulsar.apache.org/docs/2.6.2"
@@ -131,6 +147,7 @@ module.exports = [
   "author": "wolfstudy",
   "tagName": "v2.6.1",
   "publishedAt": "2020-08-21T01:35:54Z",
+  "vtag": "2.6.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.6.1/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/08/21/Apache-Pulsar-2-6-1",
   "doc": "https://pulsar.apache.org/docs/2.6.1"
@@ -139,6 +156,7 @@ module.exports = [
   "author": "codelipenghui",
   "tagName": "v2.6.0",
   "publishedAt": "2020-06-17T12:57:15Z",
+  "vtag": "2.6.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.6.0/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/06/18/Apache-Pulsar-2-6-0",
   "doc": "https://pulsar.apache.org/docs/2.6.0"
@@ -147,6 +165,7 @@ module.exports = [
   "author": "jiazhai",
   "tagName": "v2.5.2",
   "publishedAt": "2020-05-19T12:25:05Z",
+  "vtag": "2.5.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.5.2/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/05/19/Apache-Pulsar-2-5-2",
   "doc": "https://pulsar.apache.org/docs/2.5.2"
@@ -155,88 +174,8 @@ module.exports = [
   "author": "tuteng",
   "tagName": "v2.5.1",
   "publishedAt": "2020-05-11T04:22:55Z",
+  "vtag": "2.5.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.5.1/",
   "releaseBlog": "https://pulsar.apache.org/blog/2020/04/23/Apache-Pulsar-2-5-1",
   "doc": "https://pulsar.apache.org/docs/2.5.1"
-},
-{
-  "author": "wolfstudy",
-  "tagName": "v2.4.2",
-  "publishedAt": "2019-12-09T02:31:44Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.4.2/",
-  "releaseBlog": "https://pulsar.apache.org/blog/2019/12/04/Apache-Pulsar-2-4-2",
-  "doc": "https://pulsar.apache.org/docs/2.4.2"
-},
-{
-  "author": "jiazhai",
-  "tagName": "v2.4.1",
-  "publishedAt": "2019-09-04T05:43:06Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.4.1/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.4.1"
-},
-{
-  "author": "codelipenghui",
-  "tagName": "v2.4.0",
-  "publishedAt": "2019-07-05T06:19:51Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.4.0/",
-  "releaseBlog": "https://pulsar.apache.org/blog/2019/07/05/Apache-Pulsar-2-4-0",
-  "doc": "https://pulsar.apache.org/docs/2.4.0"
-},
-{
-  "author": "jerrypeng",
-  "tagName": "v2.3.2",
-  "publishedAt": "2019-05-31T23:02:07Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.3.2/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.3.2"
-},
-{
-  "author": "merlimat",
-  "tagName": "v2.3.1",
-  "publishedAt": "2019-04-19T18:06:59Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.3.1/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.3.1"
-},
-{
-  "author": "merlimat",
-  "tagName": "v2.3.0",
-  "publishedAt": "2019-02-21T19:38:58Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.3.0/",
-  "releaseBlog": "https://pulsar.apache.org/blog/2019/02/20/Apache-Pulsar-2-3-0",
-  "doc": "https://pulsar.apache.org/docs/2.3.0"
-},
-{
-  "author": "merlimat",
-  "tagName": "v2.2.1",
-  "publishedAt": "2019-01-03T22:33:22Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.2.1/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.2.1"
-},
-{
-  "author": "merlimat",
-  "tagName": "v2.2.0",
-  "publishedAt": "2018-10-26T19:40:44Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.2.0/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.2.0"
-},
-{
-  "author": "jerrypeng",
-  "tagName": "v2.1.1-incubating",
-  "publishedAt": "2018-09-18T22:48:11Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.1.1-incubating/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.1.1-incubating"
-},
-{
-  "author": "sijie",
-  "tagName": "v2.1.0-incubating",
-  "publishedAt": "2018-08-01T16:35:40Z",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/pulsar-2.1.0-incubating/",
-  "releaseBlog": "N/A",
-  "doc": "https://pulsar.apache.org/docs/2.1.0-incubating"
-},
-]
+}]
diff --git a/site2/website-next/data/release-python.js b/site2/website-next/data/release-python.js
index 2b549db3a4a..70fc6f6a30e 100644
--- a/site2/website-next/data/release-python.js
+++ b/site2/website-next/data/release-python.js
@@ -1,117 +1,122 @@
 module.exports = [
 {
   "tagName": "v2.10.1",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.10.1/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-python"
 },
 {
   "tagName": "v2.10.0",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.10.0/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-python"
 },
 {
   "tagName": "v2.9.3",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.9.3/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-python"
 },
 {
   "tagName": "v2.9.2",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.9.2/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-python"
 },
 {
   "tagName": "v2.8.3",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.8.3/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-python"
 },
 {
   "tagName": "v2.8.2",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.8.2/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-python"
 },
 {
   "tagName": "v2.8.1",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.8.1/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-python"
 },
 {
   "tagName": "v2.8.0",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.8.0/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-python"
 },
 {
   "tagName": "v2.7.5",
+  "vtag": "2.7.5",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.7.5/",
   "doc": "https://pulsar.apache.org/docs/2.7.5/client-libraries-python"
 },
 {
   "tagName": "v2.7.4",
+  "vtag": "2.7.4",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.7.4/",
   "doc": "https://pulsar.apache.org/docs/2.7.4/client-libraries-python"
 },
 {
   "tagName": "v2.7.2",
+  "vtag": "2.7.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.7.2/",
   "doc": "https://pulsar.apache.org/docs/2.7.2/client-libraries-python"
 },
 {
   "tagName": "v2.7.1",
+  "vtag": "2.7.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.7.1/",
   "doc": "https://pulsar.apache.org/docs/2.7.1/client-libraries-python"
 },
 {
   "tagName": "v2.6.2",
+  "vtag": "2.6.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.6.2/",
   "doc": "https://pulsar.apache.org/docs/2.6.2/client-libraries-python"
 },
 {
   "tagName": "v2.6.0",
+  "vtag": "2.6.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.6.0/",
   "doc": "https://pulsar.apache.org/docs/2.6.0/client-libraries-python"
 },
 {
   "tagName": "v2.5.2",
+  "vtag": "2.5.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.5.2/",
   "doc": "https://pulsar.apache.org/docs/2.5.2/client-libraries-python"
 },
 {
   "tagName": "v2.5.1",
+  "vtag": "2.5.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.5.1/",
   "doc": "https://pulsar.apache.org/docs/2.5.1/client-libraries-python"
 },
 {
   "tagName": "v2.4.2",
+  "vtag": "2.4.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.4.2/",
   "doc": "https://pulsar.apache.org/docs/2.4.2/client-libraries-python"
 },
 {
   "tagName": "v2.4.1",
+  "vtag": "2.4.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.4.1/",
   "doc": "https://pulsar.apache.org/docs/2.4.1/client-libraries-python"
 },
 {
   "tagName": "v2.4.0",
+  "vtag": "2.4.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.4.0/",
   "doc": "https://pulsar.apache.org/docs/2.4.0/client-libraries-python"
 },
 {
   "tagName": "v2.3.2",
+  "vtag": "2.3.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.3.2/",
   "doc": "https://pulsar.apache.org/docs/2.3.2/client-libraries-python"
 },
-{
-  "tagName": "v2.3.1",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.3.1/",
-  "doc": "https://pulsar.apache.org/docs/2.3.1/client-libraries-python"
-},
-{
-  "tagName": "v2.3.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.3.0/",
-  "doc": "https://pulsar.apache.org/docs/2.3.0/client-libraries-python"
-},
-{
-  "tagName": "v2.2.1",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-python-2.2.1/",
-  "doc": "https://pulsar.apache.org/docs/2.2.1/client-libraries-python"
-},
 ]
diff --git a/site2/website-next/data/release-ws.js b/site2/website-next/data/release-ws.js
index 7102fe969ae..9c575f55667 100644
--- a/site2/website-next/data/release-ws.js
+++ b/site2/website-next/data/release-ws.js
@@ -1,82 +1,92 @@
 module.exports = [
 {
   "tagName": "v2.10.1",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.10.1/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-websocket"
 },
 {
   "tagName": "v2.10.0",
+  "vtag": "2.10.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.10.0/",
   "doc": "https://pulsar.apache.org/docs//client-libraries-websocket"
 },
 {
   "tagName": "v2.9.3",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.9.3/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.9.2",
+  "vtag": "2.9.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.9.2/",
   "doc": "https://pulsar.apache.org/docs/2.9.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.8.3",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.8.3/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.8.2",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.8.2/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.8.1",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.8.1/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.8.0",
+  "vtag": "2.8.x",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.8.0/",
   "doc": "https://pulsar.apache.org/docs/2.8.x/client-libraries-websocket"
 },
 {
   "tagName": "v2.7.3",
+  "vtag": "2.7.3",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.7.3/",
   "doc": "https://pulsar.apache.org/docs/2.7.3/client-libraries-websocket"
 },
 {
   "tagName": "v2.7.2",
+  "vtag": "2.7.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.7.2/",
   "doc": "https://pulsar.apache.org/docs/2.7.2/client-libraries-websocket"
 },
 {
   "tagName": "v2.7.1",
+  "vtag": "2.7.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.7.1/",
   "doc": "https://pulsar.apache.org/docs/2.7.1/client-libraries-websocket"
 },
 {
   "tagName": "v2.6.2",
+  "vtag": "2.6.2",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.6.2/",
   "doc": "https://pulsar.apache.org/docs/2.6.2/client-libraries-websocket"
 },
 {
   "tagName": "v2.6.0",
+  "vtag": "2.6.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.6.0/",
   "doc": "https://pulsar.apache.org/docs/2.6.0/client-libraries-websocket"
 },
 {
   "tagName": "v2.5.1",
+  "vtag": "2.5.1",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.5.1/",
   "doc": "https://pulsar.apache.org/docs/2.5.1/client-libraries-websocket"
 },
 {
   "tagName": "v2.4.0",
+  "vtag": "2.4.0",
   "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.4.0/",
   "doc": "https://pulsar.apache.org/docs/2.4.0/client-libraries-websocket"
 },
-{
-  "tagName": "v2.3.0",
-  "releaseNotes": "https://pulsar.apache.org/release-notes/versioned/client-websocket-2.3.0/",
-  "doc": "https://pulsar.apache.org/docs/2.3.0/client-libraries-websocket"
-},
 ]
diff --git a/site2/website-next/release-notes/all.md b/site2/website-next/release-notes/all.md
index 8f548551bc2..683bc0efbde 100644
--- a/site2/website-next/release-notes/all.md
+++ b/site2/website-next/release-notes/all.md
@@ -6,13 +6,8 @@ slug: /
 ---
 
 ````mdx-code-block
-import Table from '@mui/material/Table';
-import TableBody from '@mui/material/TableBody';
-import TableCell from '@mui/material/TableCell';
-import TableContainer from '@mui/material/TableContainer';
-import TableHead from '@mui/material/TableHead';
-import TableRow from '@mui/material/TableRow';
-import Paper from '@mui/material/Paper';
+import PulsarReleaseTable from "../src/components/PulsarReleaseTable";
+import ClientReleaseTable from "../src/components/ClientReleaseTable";
 const pulsar = require(`../data/release-pulsar.js`);
 const java = require(`../data/release-java.js`);
 const python = require(`../data/release-python.js`);
@@ -26,44 +21,7 @@ const cs = require(`../data/release-cs.js`);
 ## Pulsar Release Notes
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell>Release Blog</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-        <TableCell align="right">Release Date</TableCell>
-        <TableCell align="right">Release Manager</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {pulsar.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            {row.releaseBlog == "N/A"
-                ? "N/A"
-                : <a href={row.releaseBlog}>What's New in Apache Pulsar {row.tagName}</a>
-            }
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-          <TableCell align="right">{new Date(row.publishedAt).toDateString().substr(4)}</TableCell>
-          <TableCell align="right">
-            <a href={`https://github.com/${row.author}`}>{row.author}</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<PulsarReleaseTable data={pulsar} />
 ````
 
 ### Previous versions
@@ -81,208 +39,41 @@ All release notes of previous versions are available at [here](/release-notes/le
 ### Java
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {java.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={java} />
 ````
 
 ### Python
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {python.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={python} />
 ````
 
 ### C++
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {cpp.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={cpp} />
 ````
+
 ### WebSocket
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {ws.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={ws} />
 ````
 
 ### Go
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {golang.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={golang} />
 ````
 
 ### NodeJs
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {node.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={node} />
 ````
 
 ### C#
 
 ````mdx-code-block
-<TableContainer component={Paper}>
-  <Table sx={{ minWidth: 650 }} size="small">
-    <TableHead>
-      <TableRow>
-        <TableCell>Release Note</TableCell>
-        <TableCell align="right">Documentation</TableCell>
-      </TableRow>
-    </TableHead>
-    <TableBody>
-      {cs.map((row) => (
-        <TableRow
-          key={row.tagName}
-          sx={{ '&:last-child td, &:last-child th': { border: 0 } }}
-        >
-          <TableCell component="th" scope="row">
-            <a href={row.releaseNotes}>{row.tagName}</a>
-          </TableCell>
-          <TableCell align="right">
-            <a href={row.doc}>{row.tagName} Documentation</a>
-          </TableCell>
-        </TableRow>
-      ))}
-    </TableBody>
-  </Table>
-</TableContainer>
+<ClientReleaseTable data={cs} />
 ````
diff --git a/site2/website-next/src/components/ClientReleaseTable.js b/site2/website-next/src/components/ClientReleaseTable.js
new file mode 100644
index 00000000000..c2756c3c8a1
--- /dev/null
+++ b/site2/website-next/src/components/ClientReleaseTable.js
@@ -0,0 +1,39 @@
+import * as React from "react";
+import Table from "@mui/material/Table";
+import TableBody from "@mui/material/TableBody";
+import TableCell from "@mui/material/TableCell";
+import TableHead from "@mui/material/TableHead";
+import TableRow from "@mui/material/TableRow";
+import Translate from "@docusaurus/Translate";
+
+export default function VersionsTable(props) {
+  return (
+    <Table size="small">
+      <TableHead>
+        <TableRow>
+          {["Release Note", "Documentation"].map(header => (
+            <TableCell
+              className="font-bold"
+              sx={{ color: "inherit" }}
+              key={header}
+            >
+              <Translate>{header}</Translate>
+            </TableCell>
+          ))}
+        </TableRow>
+      </TableHead>
+      <TableBody>
+        {props.data.map((row, index) => (
+          <TableRow key={index} sx={{ color: "inherit" }}>
+            <TableCell sx={{ color: "inherit" }}>
+              <a href={row.releaseNotes}>{row.tagName}</a>
+            </TableCell>
+            <TableCell sx={{ color: "inherit" }}>
+              <a href={row.doc}>{row.vtag} Documentation</a>
+            </TableCell>
+          </TableRow>
+        ))}
+      </TableBody>
+    </Table>
+  );
+}
diff --git a/site2/website-next/src/components/PulsarReleaseTable.js b/site2/website-next/src/components/PulsarReleaseTable.js
new file mode 100644
index 00000000000..5b583a4466f
--- /dev/null
+++ b/site2/website-next/src/components/PulsarReleaseTable.js
@@ -0,0 +1,60 @@
+import * as React from "react";
+import Table from "@mui/material/Table";
+import TableBody from "@mui/material/TableBody";
+import TableCell from "@mui/material/TableCell";
+import TableHead from "@mui/material/TableHead";
+import TableRow from "@mui/material/TableRow";
+import Translate from "@docusaurus/Translate";
+
+export default function VersionsTable(props) {
+  return (
+    <Table sx={{ minWidth: 650 }} size="small">
+      <TableHead>
+        <TableRow>
+          {[
+            "Release Note",
+            "Release Blog",
+            "Documentation",
+            "Release Date",
+            "Release Manager",
+          ].map(header => (
+            <TableCell
+              className="font-bold"
+              sx={{ color: "inherit" }}
+              key={header}
+            >
+              <Translate>{header}</Translate>
+            </TableCell>
+          ))}
+        </TableRow>
+      </TableHead>
+      <TableBody>
+        {props.data.map((row, index) => (
+          <TableRow key={index} sx={{ color: "inherit" }}>
+            <TableCell sx={{ color: "inherit" }}>
+              <a href={row.releaseNotes}>{row.tagName}</a>
+            </TableCell>
+            <TableCell sx={{ color: "inherit" }}>
+              {row.releaseBlog == "N/A" ? (
+                "N/A"
+              ) : (
+                <a href={row.releaseBlog}>
+                  What's New in Apache Pulsar {row.tagName}
+                </a>
+              )}
+            </TableCell>
+            <TableCell sx={{ color: "inherit" }}>
+              <a href={row.doc}>{row.vtag} Documentation</a>
+            </TableCell>
+            <TableCell sx={{ color: "inherit" }}>
+              {new Date(row.publishedAt).toDateString().substring(4)}
+            </TableCell>
+            <TableCell sx={{ color: "inherit" }}>
+              <a href={`https://github.com/${row.author}`}>{row.author}</a>
+            </TableCell>
+          </TableRow>
+        ))}
+      </TableBody>
+    </Table>
+  );
+}