This is an automated email from the ASF dual-hosted git repository.
wangweipeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory-site.git
The following commit(s) were added to refs/heads/main by this push:
new aab931c2 release doc version 0.10 (#232)
aab931c2 is described below
commit aab931c209d86b29e3d58ea0a3803029bba73aa3
Author: weipeng <[email protected]>
AuthorDate: Tue Jun 3 22:18:12 2025 +0800
release doc version 0.10 (#232)
Now we rename the repo to fory, but the docs for the old version should
be keep. This PR release the current doc to version 0.10 by command `
npm run docusaurus docs:version 0.10` and the codes were generated by
the command.
---
...tastring-space-efficient_encoding_for_string.md | 2 +-
blog/2024-07-23-fury_0_6_0_release.md | 2 +-
blog/2024-08-04-fury_0_7_0_release.md | 2 +-
blog/2024-09-12-fury_0_7_1_release.md | 2 +-
blog/2024-10-04-fury_0_8_0_release.md | 2 +-
blog/2024-11-10-fury_0_9_0_release.md | 2 +-
blog/2025-02-16-fury_0_10_0_release.md | 2 +-
blog/2025-04-15-fury_0_10_1_release.md | 2 +-
blog/2025-05-06-fury_0_10_2_release.md | 2 +-
blog/2025-05-27-fury_0_10_3_release.md | 2 +-
docs/community/how_to_join_community.md | 2 +-
.../01-Introduction}/benchmark.md | 0
.../01-Introduction}/features.md | 0
.../01-Introduction}/introduction.md | 0
docs/{start => docs/02-Start}/install.md | 0
docs/{start => docs/02-Start}/usage.md | 0
docs/{guide => docs/03-Guide}/DEVELOPMENT.md | 0
docs/{guide => docs/03-Guide}/graalvm_guide.md | 0
.../03-Guide}/java_serialization_guide.md | 0
docs/{guide => docs/03-Guide}/row_format_guide.md | 0
docs/{guide => docs/03-Guide}/scala_guide.md | 0
.../03-Guide}/xlang_serialization_guide.md | 0
.../{guide => docs/03-Guide}/xlang_type_mapping.md | 2 +-
docs/specification/xlang_serialization_spec.md | 2 +-
docusaurus.config.ts | 28 +-
i18n/en-US/code.json | 44 ++
.../docusaurus-plugin-content-docs/current.json | 12 +
i18n/en-us/docusaurus-theme-classic/footer.json | 6 +-
i18n/en-us/docusaurus-theme-classic/navbar.json | 10 +-
.../current/community/how_to_join_community.md | 2 +-
.../01-Introduction}/benchmark.md | 0
.../01-Introduction}/features.md | 0
.../01-Introduction}/introduction.md | 0
.../current/{start => docs/02-Start}/install.md | 0
.../current/{start => docs/02-Start}/usage.md | 0
.../{guide => docs/03-Guide}/DEVELOPMENT.md | 0
.../{guide => docs/03-Guide}/graalvm_guide.md | 0
.../03-Guide}/java_serialization_guide.md | 0
.../{guide => docs/03-Guide}/row_format_guide.md | 0
.../{guide => docs/03-Guide}/scala_guide.md | 0
.../03-Guide}/xlang_serialization_guide.md | 0
.../{guide => docs/03-Guide}/xlang_type_mapping.md | 0
.../version-0.10/community/community.md | 85 +++
.../community/how_to_join_community.md | 2 +-
.../version-0.10/community/how_to_release.md | 531 ++++++++++++++++
.../version-0.10/community/how_to_verify.md | 121 ++++
.../docs/01-Introduction}/benchmark.md | 0
.../docs/01-Introduction}/features.md | 0
.../docs/01-Introduction}/introduction.md | 0
.../docs/02-Start}/install.md | 0
.../start => version-0.10/docs/02-Start}/usage.md | 0
.../docs/03-Guide}/DEVELOPMENT.md | 0
.../docs/03-Guide}/graalvm_guide.md | 0
.../docs/03-Guide}/java_serialization_guide.md | 0
.../docs/03-Guide}/row_format_guide.md | 0
.../docs/03-Guide}/scala_guide.md | 0
.../docs/03-Guide}/xlang_serialization_guide.md | 0
.../docs/03-Guide}/xlang_type_mapping.md | 0
i18n/zh-CN/docusaurus-theme-classic/footer.json | 6 +-
sidebars.ts | 4 +-
src/pages/download/index.md | 2 +-
src/pages/home/components/HomePageLanguageCard.tsx | 4 +-
src/pages/home/components/HomepageHeader.tsx | 2 +-
versioned_docs/version-0.10/community/community.md | 91 +++
.../community/how_to_join_community.md | 2 +-
.../version-0.10/community/how_to_release.md | 705 +++++++++++++++++++++
.../version-0.10/community/how_to_verify.md | 122 ++++
.../docs/01-Introduction}/benchmark.md | 0
.../version-0.10/docs/01-Introduction}/features.md | 0
.../docs/01-Introduction}/introduction.md | 0
.../version-0.10/docs/02-Start}/install.md | 0
.../version-0.10/docs/02-Start}/usage.md | 0
.../version-0.10/docs/03-Guide}/DEVELOPMENT.md | 0
.../version-0.10/docs/03-Guide}/graalvm_guide.md | 0
.../docs/03-Guide}/java_serialization_guide.md | 0
.../docs/03-Guide}/row_format_guide.md | 0
.../version-0.10/docs/03-Guide}/scala_guide.md | 0
.../docs/03-Guide}/xlang_serialization_guide.md | 0
.../docs/03-Guide}/xlang_type_mapping.md | 2 +-
.../specification/java_serialization_spec.md | 560 ++++++++++++++++
.../version-0.10/specification/row_format_spec.md | 24 +
.../specification/xlang_serialization_spec.md | 2 +-
versioned_sidebars/version-0.10-sidebars.json | 20 +
versions.json | 3 +
84 files changed, 2367 insertions(+), 49 deletions(-)
diff --git a/blog/2024-05-06-metastring-space-efficient_encoding_for_string.md
b/blog/2024-05-06-metastring-space-efficient_encoding_for_string.md
index c983e1d4..b45d71f1 100644
--- a/blog/2024-05-06-metastring-space-efficient_encoding_for_string.md
+++ b/blog/2024-05-06-metastring-space-efficient_encoding_for_string.md
@@ -26,7 +26,7 @@ Such a string is enumerated and limited, so the encoding
performance is not impo
Meta string encoding uses `5/6` bits instead of `8` bits in utf-8 encoding for
every chars. Since it uses less bits than utf8, it can bring
**37.5% space cost savings** compared to utf-8 and has a smaller encoded
binary size, which uses less storage and makes the network transfer faster.
-More details about meta string spec can be found in [Fury xlang serialization
specification](https://fury.apache.org/docs/specification/fury_xlang_serialization_spec/#meta-string).
+More details about meta string spec can be found in [Fury xlang serialization
specification](https://fury.apache.org/docs/docs/specification/fury_xlang_serialization_spec/#meta-string).
## Encoding Algorithms
diff --git a/blog/2024-07-23-fury_0_6_0_release.md
b/blog/2024-07-23-fury_0_6_0_release.md
index b33496d8..2a4baa3c 100644
--- a/blog/2024-07-23-fury_0_6_0_release.md
+++ b/blog/2024-07-23-fury_0_6_0_release.md
@@ -5,7 +5,7 @@ authors: [chaokunyang]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.6.0 release. This is a major
release that includes [35
PR](https://github.com/apache/fury/compare/v0.5.1...v0.6.0) from 12 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.6.0 release. This is a major
release that includes [35
PR](https://github.com/apache/fury/compare/v0.5.1...v0.6.0) from 12 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## High light
diff --git a/blog/2024-08-04-fury_0_7_0_release.md
b/blog/2024-08-04-fury_0_7_0_release.md
index ad1c00de..d0dab882 100644
--- a/blog/2024-08-04-fury_0_7_0_release.md
+++ b/blog/2024-08-04-fury_0_7_0_release.md
@@ -5,7 +5,7 @@ authors: [chaokunyang]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.7.0 release. This is a major
release that includes [24
PR](https://github.com/apache/fury/compare/v0.6.0...v0.7.0) from 7 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.7.0 release. This is a major
release that includes [24
PR](https://github.com/apache/fury/compare/v0.6.0...v0.7.0) from 7 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## High Light
diff --git a/blog/2024-09-12-fury_0_7_1_release.md
b/blog/2024-09-12-fury_0_7_1_release.md
index b2f3df4a..7488909f 100644
--- a/blog/2024-09-12-fury_0_7_1_release.md
+++ b/blog/2024-09-12-fury_0_7_1_release.md
@@ -5,7 +5,7 @@ authors: [chaokunyang]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.7.1 release. This is a major
release that includes [20
PR](https://github.com/apache/fury/compare/v0.7.0...v0.7.1) from 8 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.7.1 release. This is a major
release that includes [20
PR](https://github.com/apache/fury/compare/v0.7.0...v0.7.1) from 8 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Features
diff --git a/blog/2024-10-04-fury_0_8_0_release.md
b/blog/2024-10-04-fury_0_8_0_release.md
index a8f382eb..0d3f5da9 100644
--- a/blog/2024-10-04-fury_0_8_0_release.md
+++ b/blog/2024-10-04-fury_0_8_0_release.md
@@ -5,7 +5,7 @@ authors: [chaokunyang]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.8.0 release. This is a major
release that includes [23
PR](https://github.com/apache/fury/compare/v0.7.1...v0.8.0) from 7 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.8.0 release. This is a major
release that includes [23
PR](https://github.com/apache/fury/compare/v0.7.1...v0.8.0) from 7 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Highlights
diff --git a/blog/2024-11-10-fury_0_9_0_release.md
b/blog/2024-11-10-fury_0_9_0_release.md
index 927760eb..5bb0786d 100644
--- a/blog/2024-11-10-fury_0_9_0_release.md
+++ b/blog/2024-11-10-fury_0_9_0_release.md
@@ -5,7 +5,7 @@ authors: [chaokunyang]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.9.0 release. This is a major
release that includes [34
PR](https://github.com/apache/fury/compare/v0.8.0...v0.9.0) from 14 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.9.0 release. This is a major
release that includes [34
PR](https://github.com/apache/fury/compare/v0.8.0...v0.9.0) from 14 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Highlight
diff --git a/blog/2025-02-16-fury_0_10_0_release.md
b/blog/2025-02-16-fury_0_10_0_release.md
index c1c52345..d6762ac7 100644
--- a/blog/2025-02-16-fury_0_10_0_release.md
+++ b/blog/2025-02-16-fury_0_10_0_release.md
@@ -5,7 +5,7 @@ authors: [wangweipeng]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.10.0 release. This is a
major release that includes [27
PR](https://github.com/apache/fury/compare/v0.9.0...v0.10.0) from 16 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.10.0 release. This is a
major release that includes [27
PR](https://github.com/apache/fury/compare/v0.9.0...v0.10.0) from 16 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Highlight
diff --git a/blog/2025-04-15-fury_0_10_1_release.md
b/blog/2025-04-15-fury_0_10_1_release.md
index cccbe1e0..cba37718 100644
--- a/blog/2025-04-15-fury_0_10_1_release.md
+++ b/blog/2025-04-15-fury_0_10_1_release.md
@@ -5,7 +5,7 @@ authors: [wangweipeng]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.10.1 release. This is a
minor release that includes [14
PR](https://github.com/apache/fury/compare/v0.10.0...v0.10.1) from 10 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.10.1 release. This is a
minor release that includes [14
PR](https://github.com/apache/fury/compare/v0.10.0...v0.10.1) from 10 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Features
diff --git a/blog/2025-05-06-fury_0_10_2_release.md
b/blog/2025-05-06-fury_0_10_2_release.md
index 9d5781cb..f173bb83 100644
--- a/blog/2025-05-06-fury_0_10_2_release.md
+++ b/blog/2025-05-06-fury_0_10_2_release.md
@@ -5,7 +5,7 @@ authors: [liangliangsui]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.10.2 release. This is a
minor release that includes [6
PR](https://github.com/apache/fury/compare/v0.10.1...v0.10.2) from 2 distinct
contributors. See the [Install](https://fury.apache.org/docs/start/install)
Page to learn how to get the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.10.2 release. This is a
minor release that includes [6
PR](https://github.com/apache/fury/compare/v0.10.1...v0.10.2) from 2 distinct
contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Features
diff --git a/blog/2025-05-27-fury_0_10_3_release.md
b/blog/2025-05-27-fury_0_10_3_release.md
index 38f6e758..163abfd7 100644
--- a/blog/2025-05-27-fury_0_10_3_release.md
+++ b/blog/2025-05-27-fury_0_10_3_release.md
@@ -5,7 +5,7 @@ authors: [pandalee99]
tags: [fury]
---
-The Apache Fury team is pleased to announce the 0.10.3 release. This is a
minor release that includes [15
PR](https://github.com/apache/fury/compare/v0.10.3...v0.10.3-rc2) from 4
distinct contributors. See the
[Install](https://fury.apache.org/docs/start/install) Page to learn how to get
the libraries for your platform.
+The Apache Fury team is pleased to announce the 0.10.3 release. This is a
minor release that includes [15
PR](https://github.com/apache/fury/compare/v0.10.3...v0.10.3-rc2) from 4
distinct contributors. See the
[Install](https://fury.apache.org/docs/docs/start/install) Page to learn how to
get the libraries for your platform.
## Features
diff --git a/docs/community/how_to_join_community.md
b/docs/community/how_to_join_community.md
index d41c2e71..6fbe7a7e 100644
--- a/docs/community/how_to_join_community.md
+++ b/docs/community/how_to_join_community.md
@@ -10,7 +10,7 @@ First of all, kudos to you for choosing to join the open
source contribution ran
The Fury team usually conducts development and issue maintenance on GitHub.
Please open the [GitHub website](https://github.com/), click the `Sign up`
button in the upper right corner, register your own account, and take the first
step of your open source journey.
-In the [Fury repository](https://github.com/apache/fury), we have a
[guide](https://fury.apache.org/zh-CN/docs/community/) for all open source
contributors, introducing contents such as version management and branch
management. **Please take a few minutes to read and understand it**.
+In the [Fury repository](https://github.com/apache/fury), we have a
[guide](https://fury.apache.org/zh-CN/docs/docs/community/) for all open source
contributors, introducing contents such as version management and branch
management. **Please take a few minutes to read and understand it**.
## Your First Pull Request
diff --git a/docs/introduction/benchmark.md
b/docs/docs/01-Introduction/benchmark.md
similarity index 100%
copy from docs/introduction/benchmark.md
copy to docs/docs/01-Introduction/benchmark.md
diff --git a/docs/introduction/features.md
b/docs/docs/01-Introduction/features.md
similarity index 100%
copy from docs/introduction/features.md
copy to docs/docs/01-Introduction/features.md
diff --git a/docs/introduction/introduction.md
b/docs/docs/01-Introduction/introduction.md
similarity index 100%
copy from docs/introduction/introduction.md
copy to docs/docs/01-Introduction/introduction.md
diff --git a/docs/start/install.md b/docs/docs/02-Start/install.md
similarity index 100%
copy from docs/start/install.md
copy to docs/docs/02-Start/install.md
diff --git a/docs/start/usage.md b/docs/docs/02-Start/usage.md
similarity index 100%
copy from docs/start/usage.md
copy to docs/docs/02-Start/usage.md
diff --git a/docs/guide/DEVELOPMENT.md b/docs/docs/03-Guide/DEVELOPMENT.md
similarity index 100%
copy from docs/guide/DEVELOPMENT.md
copy to docs/docs/03-Guide/DEVELOPMENT.md
diff --git a/docs/guide/graalvm_guide.md b/docs/docs/03-Guide/graalvm_guide.md
similarity index 100%
copy from docs/guide/graalvm_guide.md
copy to docs/docs/03-Guide/graalvm_guide.md
diff --git a/docs/guide/java_serialization_guide.md
b/docs/docs/03-Guide/java_serialization_guide.md
similarity index 100%
copy from docs/guide/java_serialization_guide.md
copy to docs/docs/03-Guide/java_serialization_guide.md
diff --git a/docs/guide/row_format_guide.md
b/docs/docs/03-Guide/row_format_guide.md
similarity index 100%
copy from docs/guide/row_format_guide.md
copy to docs/docs/03-Guide/row_format_guide.md
diff --git a/docs/guide/scala_guide.md b/docs/docs/03-Guide/scala_guide.md
similarity index 100%
copy from docs/guide/scala_guide.md
copy to docs/docs/03-Guide/scala_guide.md
diff --git a/docs/guide/xlang_serialization_guide.md
b/docs/docs/03-Guide/xlang_serialization_guide.md
similarity index 100%
copy from docs/guide/xlang_serialization_guide.md
copy to docs/docs/03-Guide/xlang_serialization_guide.md
diff --git a/docs/guide/xlang_type_mapping.md
b/docs/docs/03-Guide/xlang_type_mapping.md
similarity index 98%
copy from docs/guide/xlang_type_mapping.md
copy to docs/docs/03-Guide/xlang_type_mapping.md
index b6acb9a9..1638e2ab 100644
--- a/docs/guide/xlang_type_mapping.md
+++ b/docs/docs/03-Guide/xlang_type_mapping.md
@@ -21,7 +21,7 @@ license: |
Note:
-- For type definition, see [Type Systems in
Spec](../specification/xlang_serialization_spec.md#type-systems)
+- For type definition, see [Type Systems in
Spec](../docs/specification/xlang_serialization_spec.md#type-systems)
- `int16_t[n]/vector<T>` indicates `int16_t[n]/vector<int16_t>`
- The cross-language serialization is not stable, do not use it in your
production environment.
diff --git a/docs/specification/xlang_serialization_spec.md
b/docs/specification/xlang_serialization_spec.md
index 60925476..8f15e542 100644
--- a/docs/specification/xlang_serialization_spec.md
+++ b/docs/specification/xlang_serialization_spec.md
@@ -151,7 +151,7 @@ types.
### Type mapping
-See [Type mapping](../guide/xlang_type_mapping.md)
+See [Type mapping](../docs/guide/xlang_type_mapping.md)
## Spec overview
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 8df13af2..5d54aa23 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -97,21 +97,9 @@ const config: Config = {
// },
{
type: 'docSidebar',
- sidebarId: 'startSidebar',
+ sidebarId: 'docsSidebar',
position: 'right',
- label: 'Start',
- },
- {
- type: 'docSidebar',
- sidebarId: 'introductionSidebar',
- position: 'right',
- label: 'Introduction',
- },
- {
- type: 'docSidebar',
- sidebarId: 'guideSidebar',
- position: 'right',
- label: 'Guide',
+ label: 'Docs',
},
{
type: 'docSidebar',
@@ -175,6 +163,12 @@ const config: Config = {
}
]
},
+ {
+ type: 'docsVersionDropdown',
+ position: 'right',
+ dropdownItemsAfter: [],
+ dropdownActiveClassDisabled: true,
+ },
{
href: 'https://github.com/apache/fury',
position: 'right',
@@ -212,15 +206,15 @@ const config: Config = {
items: [
{
label: 'Install',
- to: '/docs/start/install',
+ to: '/docs/docs/start/install',
},
{
label: 'Usage',
- to: '/docs/start/usage',
+ to: '/docs/docs/start/usage',
},
{
label: 'Benchmark',
- to: '/docs/introduction/benchmark',
+ to: '/docs/docs/introduction/benchmark',
},
],
},
diff --git a/i18n/en-US/code.json b/i18n/en-US/code.json
index 87753931..88d8019f 100644
--- a/i18n/en-US/code.json
+++ b/i18n/en-US/code.json
@@ -273,5 +273,49 @@
"theme.unlistedContent.message": {
"message": "This page is unlisted. Search engines will not index it, and
only users having a direct link can access it.",
"description": "The unlisted content banner message"
+ },
+ "feature.highPerformance.title": {
+ "message": "High performance",
+ "description": "The title for the high performance feature"
+ },
+ "feature.highPerformance.description": {
+ "message": "Compared to other serialization frameworks, there is a 20~170x
speed up.",
+ "description": "Description for the high performance feature"
+ },
+ "feature.easyToUse.title": {
+ "message": "Easy to use",
+ "description": "The title for the easy to use feature"
+ },
+ "feature.easyToUse.description": {
+ "message": "No need for DSL, you can use Fury effectively with your
intuition.",
+ "description": "Description for the easy to use feature"
+ },
+ "feature.multiLanguages.title": {
+ "message": "Multi-languages",
+ "description": "The title for the multi-languages feature"
+ },
+ "feature.multiLanguages.description": {
+ "message": "Supports popular programming languages such as Java, Python,
C++, Golang, Javascript, Rust, and more will be added in the future.",
+ "description": "Description for the multi-languages feature"
+ },
+ "homepage.githubButton": {
+ "message": "GitHub",
+ "description": "The GitHub button label on the homepage"
+ },
+ "homepage.getStartedButton": {
+ "message": "Get Started",
+ "description": "The Get Started button label on the homepage"
+ },
+ "theme.ErrorPageContent.title": {
+ "message": "This page crashed.",
+ "description": "The title of the fallback page when the page crashed"
+ },
+ "theme.blog.archive.title": {
+ "message": "Archive",
+ "description": "The page & hero title of the blog archive page"
+ },
+ "theme.blog.archive.description": {
+ "message": "Archive",
+ "description": "The page & hero description of the blog archive page"
}
}
diff --git a/i18n/en-us/docusaurus-plugin-content-docs/current.json
b/i18n/en-us/docusaurus-plugin-content-docs/current.json
index dd30528d..a504aa40 100644
--- a/i18n/en-us/docusaurus-plugin-content-docs/current.json
+++ b/i18n/en-us/docusaurus-plugin-content-docs/current.json
@@ -2,5 +2,17 @@
"version.label": {
"message": "Next",
"description": "The label for version current"
+ },
+ "sidebar.docsSidebar.category.Introduction": {
+ "message": "Introduction",
+ "description": "The label for category Introduction in sidebar docsSidebar"
+ },
+ "sidebar.docsSidebar.category.Start": {
+ "message": "Start",
+ "description": "The label for category Start in sidebar docsSidebar"
+ },
+ "sidebar.docsSidebar.category.Guide": {
+ "message": "Guide",
+ "description": "The label for category Guide in sidebar docsSidebar"
}
}
diff --git a/i18n/en-us/docusaurus-theme-classic/footer.json
b/i18n/en-us/docusaurus-theme-classic/footer.json
index 14bccdcc..37b9e370 100644
--- a/i18n/en-us/docusaurus-theme-classic/footer.json
+++ b/i18n/en-us/docusaurus-theme-classic/footer.json
@@ -25,15 +25,15 @@
},
"link.item.label.Install": {
"message": "Install",
- "description": "The label of footer link with label=Install linking to
/docs/start/install"
+ "description": "The label of footer link with label=Install linking to
/docs/docs/start/install"
},
"link.item.label.Usage": {
"message": "Usage",
- "description": "The label of footer link with label=Usage linking to
/docs/start/usage"
+ "description": "The label of footer link with label=Usage linking to
/docs/docs/start/usage"
},
"link.item.label.Benchmark": {
"message": "Benchmark",
- "description": "The label of footer link with label=Benchmark linking to
/docs/introduction/benchmark"
+ "description": "The label of footer link with label=Benchmark linking to
/docs/docs/introduction/benchmark"
},
"link.item.label.Fury": {
"message": "Fury",
diff --git a/i18n/en-us/docusaurus-theme-classic/navbar.json
b/i18n/en-us/docusaurus-theme-classic/navbar.json
index 5b5a967d..29b485bf 100644
--- a/i18n/en-us/docusaurus-theme-classic/navbar.json
+++ b/i18n/en-us/docusaurus-theme-classic/navbar.json
@@ -66,5 +66,13 @@
"item.label.Code of Conduct": {
"message": "Code of Conduct",
"description": "Navbar item with label Code of Conduct"
+ },
+ "item.label.Docs": {
+ "message": "Docs",
+ "description": "Navbar item with label Docs"
+ },
+ "item.label.Users": {
+ "message": "Users",
+ "description": "Navbar item with label Users"
}
-}
\ No newline at end of file
+}
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
index 8203570f..78cf2ec7 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
@@ -10,7 +10,7 @@ id: how_to_join_community
Fury 团队通常在 github 上进行开发和 issue 维护,请打开 [Github 网站](https://github.com/),点击右上角
`Sign up` 按钮,注册一个自己的账号,开启你开源之旅的第一步。
-在
[Fury仓库](https://github.com/apache/fury)中,我们有一份面向所有开源贡献者的[指南](https://fury.apache.org/zh-CN/docs/community/),介绍了有关版本管理、分支管理等内容,**请花几分钟时间阅读了解一下**。
+在
[Fury仓库](https://github.com/apache/fury)中,我们有一份面向所有开源贡献者的[指南](https://fury.apache.org/zh-CN/docs/docs/community/),介绍了有关版本管理、分支管理等内容,**请花几分钟时间阅读了解一下**。
## 你的第一个 Pull Request
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/benchmark.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/benchmark.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/benchmark.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/benchmark.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/features.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/features.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/features.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/features.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/introduction.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/introduction.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/introduction.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/01-Introduction/introduction.md
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/02-Start/install.md
similarity index 100%
copy from i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/02-Start/install.md
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/usage.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/02-Start/usage.md
similarity index 100%
copy from i18n/zh-CN/docusaurus-plugin-content-docs/current/start/usage.md
copy to i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/02-Start/usage.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/DEVELOPMENT.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/DEVELOPMENT.md
similarity index 100%
copy from i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/DEVELOPMENT.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/DEVELOPMENT.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/graalvm_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/graalvm_guide.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/graalvm_guide.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/graalvm_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java_serialization_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/java_serialization_guide.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java_serialization_guide.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/java_serialization_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/row_format_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/row_format_guide.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/row_format_guide.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/row_format_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/scala_guide.md
similarity index 100%
copy from i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala_guide.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/scala_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_serialization_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/xlang_serialization_guide.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_serialization_guide.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/xlang_serialization_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_type_mapping.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/xlang_type_mapping.md
similarity index 100%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_type_mapping.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/current/docs/03-Guide/xlang_type_mapping.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/community.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/community.md
new file mode 100644
index 00000000..eb3d4ed1
--- /dev/null
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/community.md
@@ -0,0 +1,85 @@
+---
+title: 社区
+sidebar_position: 0
+id: community
+---
+
+Apache Fury 是一个由社区驱动的开源项目,项目的蓬勃发展得益于社区贡献。
+我们邀请您根据自己的意愿尽可能地参与项目。以下是几种贡献方式:
+
+- 使用 Apache Fury 并分享使用体验和反馈问题;
+- 为项目提供最佳实践示例;
+- 报告错误并修复;
+- 贡献代码和参与文档建设。
+
+## 邮件列表
+
+| 邮件列表 | 描述 | 订阅
| 取消订阅
| 发送邮件 | 活动
|
+|-------------------------|---------------------------------------------|-------------------------------------------------------|-----------------------------------------------------------|------------------------------------|-----------------------------------------------------------------------|
+| [email protected] | 开发相关讨论 |
[订阅](mailto:[email protected]) |
[取消订阅](mailto:[email protected]) |
[发送邮件](mailto:[email protected]) |
[邮件列表活动](https://lists.apache.org/[email protected]) |
+| [email protected] | 仓库的所有 commits |
[订阅](mailto:[email protected]) |
[取消订阅](mailto:[email protected]) | 只读的邮件列表
| [邮件列表活动](https://lists.apache.org/[email protected]) |
+
+在尝试发送邮件之前,请确保订阅上述的邮件列表。
+
+**如果您没有订阅邮件列表,您的邮件将被拒绝或不会收到回复。**
+
+### 如何订阅邮件列表
+
+要发送邮件至邮件列表,请先通过以下方式订阅:
+
+1. 发送电子邮件至 [email protected],并相应替换 `listname`;
+2. 回复您将收到的确认电子邮件,保持邮件主题行完整;
+3. 然后您将收到一封欢迎的电子邮件,订阅成功。
+
+在讨论电子邮件中的代码片段时,请确保:
+
+- 您不要链接到外部服务中的文件,因为此类文件可能会更改、被删除或链接可能会中断,从而使存档的电子邮件线程变得无用;
+- 您粘贴文本而不是文本屏幕截图;
+- 粘贴代码时保持格式,以保持代码可读;
+- 有足够的导入语句以避免产生代码歧义。
+
+## Slack
+
+您可以加入[Slack 上的 Apache Fury™
社区](https://join.slack.com/t/fury-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A)。
+
+这里有一些社区规则:
+
+- 保持尊重和友善;
+- 所有重要的决定和结论都必须反映到邮件列表中。 “如果这没有在邮件列表中有相关的讨论记录,则代表它不生效” ;
+- [The Apache Way](https://theapacheway.com/on-list/);
+- 使用 Slack 线程来防止并行对话淹没当前的对话频道;
+- 请不要直接向邮件列表发送 Bug fix、Issue 分配和 Code Review 消息。这些内容应该被社区贡献者自愿处理并分配。
+
+## Issue 跟踪
+
+我们使用 GitHub Issues 来跟踪所有 Issues:
+
+- 代码相关问题:https://github.com/apache/fury/issues
+- 网站相关问题:https://github.com/apache/fury-site/issues
+
+您需要有一个 [GitHub 帐户](https://github.com/signup) 才能创建问题。
+如果您没有 [GitHub 帐户](https://github.com/signup),您可以发送电子邮件至 [email protected]。
+
+### 报告 Bug
+
+您在报告 Bug 之前,应该:
+
+- 验证该 Bug 确实存在;
+- 搜索 [Issue List](https://github.com/apache/fury/issues) 以确保不存在相关 Bug。
+- 在 Issue List 中创建 [bug
报告](https://github.com/apache/fury/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml)。
+- 如果可能的话,深入研究 Apache Fury 的源代码,并针对您报告的 Bug 提交补丁,这有助于快速修复 Bug。
+
+### 报告安全漏洞
+
+Apache Fury 是 [Apache 软件基金会](https://apache.org/) 的一个项目,遵循 [ASF
漏洞处理流程](https://apache.org/security/#vulnerability-handling)。
+
+要报告您发现的新的安全漏洞,请遵循 [ASF
漏洞报告流程](https://apache.org/security/#reporting-a-vulnerability),该流程解释了如何私下向社区维护者发送详细的漏洞信息。
+
+### New Feature
+
+欢迎您增强功能或新功能建议。提案越具体、越合理,您在 Fury 社区的影响力就越大。它有可能在之后版本发布。
+
+### 项目源代码
+
+- Fury Core 存储库:https://github.com/apache/fury
+- Fury 网站存储库:https://github.com/apache/fury-site
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_join_community.md
similarity index 96%
copy from
i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
copy to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_join_community.md
index 8203570f..78cf2ec7 100644
---
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/community/how_to_join_community.md
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_join_community.md
@@ -10,7 +10,7 @@ id: how_to_join_community
Fury 团队通常在 github 上进行开发和 issue 维护,请打开 [Github 网站](https://github.com/),点击右上角
`Sign up` 按钮,注册一个自己的账号,开启你开源之旅的第一步。
-在
[Fury仓库](https://github.com/apache/fury)中,我们有一份面向所有开源贡献者的[指南](https://fury.apache.org/zh-CN/docs/community/),介绍了有关版本管理、分支管理等内容,**请花几分钟时间阅读了解一下**。
+在
[Fury仓库](https://github.com/apache/fury)中,我们有一份面向所有开源贡献者的[指南](https://fury.apache.org/zh-CN/docs/docs/community/),介绍了有关版本管理、分支管理等内容,**请花几分钟时间阅读了解一下**。
## 你的第一个 Pull Request
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_release.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_release.md
new file mode 100644
index 00000000..4d1d040a
--- /dev/null
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_release.md
@@ -0,0 +1,531 @@
+---
+title: 如何发布
+sidebar_position: 0
+id: how_to_release
+---
+
+本文主要介绍如何发布新版本的 Apache Fury。
+
+## 介绍
+
+源代码发布是 Apache 最重视以及最重要的部分。
+
+请注意许可证和发布的软件签名问题。发布软件是一件严肃的事情,并会产生相应的法律后果。
+
+## release manager 第一次发布
+
+### 环境要求
+
+此发布过程在 Ubuntu 系统中运行,需要以下几个环境依赖:
+
+- JDK 1.8+
+- Apache Maven 3.x+
+- Python 3.8
+- GnuPG 2.x
+- Git
+- SVN(Apache 基金会使用 svn 来托管项目发布)
+- **设置环境变量**:如果您在不同的目录下配置了 gpg 密钥,请执行 `export GNUPGHOME=$(xxx)` 导出环境变量。
+
+### 准备 GPG 密钥
+
+如果您是第一次作为软件发布者,您需要准备一个 GPG 密钥。
+
+您可以参考这里的[快速开始](https://infra.apache.org/openpgp.html)获取一个 GPG 密钥或者获取更多相关信息。
+
+#### 安装 GPG
+
+```bash
+sudo apt install gnupg2
+```
+
+#### 生成 GPG 密钥
+
+请使用您的 Apache 名字和电子邮件地址生成 GPG 密钥:
+
+```bash
+$ gpg --full-gen-key
+gpg (GnuPG) 2.2.20; Copyright (C) 2020 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)
+ (14) Existing key from card
+Your selection? 1 # input 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096 # input 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) 0 # input 0
+Key does not expire at all
+Is this correct? (y/N) y # input y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: Chaokun Yang # input your name
+Email address: [email protected] # input your email
+Comment: CODE SIGNING KEY # input some annotations, optional
+You selected this USER-ID:
+ "Chaokun <[email protected]>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # input O
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+
+# Input the security key
+┌──────────────────────────────────────────────────────┐
+│ Please enter this passphrase │
+│ │
+│ Passphrase: _______________________________ │
+│ │
+│ <OK> <Cancel> │
+└──────────────────────────────────────────────────────┘
+# key generation will be done after your inputting the key with the following
output
+gpg: key E49B00F626B marked as ultimately trusted
+gpg: revocation certificate stored as
'/Users/chaokunyang/.gnupg/openpgp-revocs.d/1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4.rev'
+public and secret key created and signed.
+
+pub rsa4096 2022-07-12 [SC]
+ 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid [ultimate] Chaokun <[email protected]>
+sub rsa4096 2022-07-12 [E]
+```
+
+#### 上传公钥至 GPG 密钥服务器
+
+首先,列出您所创建的 GPG 密钥:
+
+```bash
+gpg --list-keys
+```
+
+执行相关命令之后,您将看到如下输出:
+
+```bash
+--------------------------------------------------
+pub rsa4096 2024-03-27 [SC]
+ 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid [ultimate] chaokunyang (CODE SIGNING KEY)
<[email protected]>
+sub rsa4096 2024-03-27 [E]
+```
+
+然后,将您的密钥 ID 发送到密钥服务器:
+
+```bash
+gpg --keyserver keys.openpgp.org --send-key <key-id> # e.g.,
1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+```
+
+其中,`keys.openpgp.org` 是一个随机选择的密钥服务器,可以使用 keyserver.ubuntu.com 或任何其他功能完备的密钥服务器。
+
+#### 检查密钥是否创建成功
+
+上传大约需要一分钟;之后,您可以通过电子邮件在相应的密钥服务器上检查。
+
+将密钥上传到密钥服务器的主要目的是为了加入一个可信的[信任网络](https://infra.apache.org/release-signing.html#web-of-trust)。
+
+#### 将 GPG 公钥添加到项目 KEYS 文件中
+
+发布分支的 svn 仓库是:https://dist.apache.org/repos/dist/release/incubator/fury
+
+请在发布分支的 KEYS 中添加公钥:
+
+```bash
+svn co https://dist.apache.org/repos/dist/release/incubator/fury fury-dist
+# As this step will copy all the versions, it will take some time. If the
network is broken, please use svn cleanup to delete the lock before re-execute
it.
+cd fury-dist
+(gpg --list-sigs [email protected] && gpg --export --armor
[email protected]) >> KEYS # Append your key to the KEYS file
+svn add . # It is not needed if the KEYS document exists before.
+svn ci -m "add gpg key for YOUR_NAME" # Later on, if you are asked to enter a
username and password, just use your apache username and password.
+```
+
+#### 将 GPG 公钥上传到您的 GitHub 帐户
+
+- 输入 `https://github.com/settings/keys` 以添加您的 GPG 密钥。
+- 如果添加后发现“未验证”字样,请将 GPG 密钥中使用的电子邮件地址绑定到您的 GitHub
帐户(https://github.com/settings/emails)。
+
+### 延伸阅读
+
+建议您在发布之前阅读以下文档,了解有关 Apache 基金会发布软件的更多详细信息,但这不是必须的:
+
+- 发布政策:https://www.apache.org/legal/release-policy.html
+- 孵化器发布:http://incubator.apache.org/guides/releasemanagement.html
+- TLP 版本:https://infra.apache.org/release-distribution
+- 发布标志:https://infra.apache.org/release-signing.html
+- 发布发布:https://infra.apache.org/release-publishing.html
+- 发布下载页面:https://infra.apache.org/release-download-pages.html
+- 发布 maven artifacts:https://infra.apache.org/publishing-maven-artifacts.html
+
+## 开始有关发布的讨论
+
+通过发送电子邮件至以下地址发起有关下一个版本的讨论:[email protected]:
+
+标题:
+
+```
+[DISCUSS] Release Apache Fury(incubating) ${release_version}
+```
+
+内容:
+
+```
+Hello, Apache Fury(incubating) Community,
+
+This is a call for a discussion to release Apache Fury(incubating) version
${release_version}.
+
+The change lists about this release:
+
+https://github.com/apache/fury/compare/v0.4.1...v0.5.0
+
+Please leave your comments here about this release plan. We will bump the
version in repo and start the release process after the discussion.
+
+Thanks,
+
+${name}
+```
+
+## 准备发布
+
+如果讨论结果中没有出现反对声音,您需要做一些发布版本的准备工作。
+
+### Github 分支和标签
+
+- 创建一个名为 `releases-0.5.0`
+- 通过执行命令将版本 `$version` 升级到 `python ci/release.py bump_version -l all -version
$version`
+- 执行 git commit 并将分支推送到 `[email protected]:apache/fury.git`
+- 通过 `git tag v0.5.0-rc1` 创建一个新标签,然后将其推送到 `[email protected]:apache/fury.git`
+
+### 构建 artifacts 并上传到 SVN dist/dev 仓库
+
+首先,您需要通过 `python ci/release.py build -v $version` 构建预发布 artifacts。
+
+然后您需要把它上传到 svn dist repo。dev 分支的 dist
仓库地址是:https://dist.apache.org/repos/dist/dev/incubator/fury
+
+```bash
+# As this step will copy all the versions, it will take some time. If the
network is broken, please use svn cleanup to delete the lock before re-execute
it.
+svn co https://dist.apache.org/repos/dist/dev/incubator/fury fury-dist-dev
+```
+
+然后,上传项目:
+
+```bash
+cd fury-dist-dev
+# create a directory named by version
+mkdir ${release_version}-${rc_version}
+# copy source code and signature package to the versioned directory
+cp ${repo_dir}/dist/* ${release_version}-${rc_version}
+# check svn status
+svn status
+# add to svn
+svn add ${release_version}-${rc_version}
+# check svn status
+svn status
+# commit to SVN remote server
+svn commit -m "Prepare for fury ${release_version}-${rc_version}"
+```
+
+访问 https://dist.apache.org/repos/dist/dev/incubator/fury/ 以检查 artifacts 是否正确上传。
+
+### 如果出现问题该怎么办
+
+如果某些文件是意外出现或者发生某些错误,则需要删除相关内容并执行 `svn delete`,然后重复上述上传过程。
+
+## 投票
+
+作为一个孵化项目,新版本发布需要 Apache Fury 社区和孵化器社区的投票。
+
+- release_version:Fury 的版本,如 0.5.0。
+- release_candidate_version:投票的版本,如 0.5.0-rc1。
+- maven_artifact_number:Maven 暂存 artifacts 的数量。如 1001. 具体来说,可以通过搜索 “fury” 来找到
maven_artifact_number https://repository.apache.org/#stagingRepositories.
+
+### Fury 社区投票
+
+发送电子邮件至 Fury Community:[email protected]:
+
+标题:
+
+```
+[VOTE] Release Apache Fury(incubating) v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hello, Apache Fury(incubating) Community:
+
+This is a call for vote to release Apache Fury(Incubating)
+version release-0.5.0-rc3.
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+The change lists about this release:
+
+https://github.com/apache/fury/compare/v0.4.1...v0.5.0-rc3
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/fury/0.5.0-rc3/
+
+The maven staging for this release:
+https://repository.apache.org/content/repositories/orgapachefury-1003
+
+Git tag for the release:
+https://github.com/apache/fury/releases/tag/v0.5.0-rc3
+
+Git commit for the release:
+https://github.com/apache/fury/commit/fae06330edd049bb960536e978a45b97bca66faf
+
+The artifacts signed with PGP key [5E580BA4], corresponding to
+[[email protected]], that can be found in keys file:
+https://downloads.apache.org/incubator/fury/KEYS
+
+The vote will be open for at least 72 hours until the necessary number of
votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about Fury, please see https://fury.apache.org/
+
+*Valid check is a requirement for a vote. *Checklist for reference:
+
+[ ] Download Fury is valid.
+[ ] Checksums and PGP signatures are valid.
+[ ] Source code distributions have correct names matching the current release.
+[ ] LICENSE and NOTICE files are correct.
+[ ] All files have license headers if necessary.
+[ ] No compiled archives bundled in source archive.
+[ ] Can compile from source.
+
+More detail checklist please refer:
+https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+How to Build and Test, please refer to:
https://github.com/apache/fury/blob/main/docs/guide/DEVELOPMENT.md
+
+Thanks,
+Chaokun Yang
+```
+
+在至少获得 3 + 1 且具有约束力的投票(来自 Fury Podling PMC 成员和提交者)并没有收到否决票之后,发布投票结果:
+
+标题:
+
+```
+[RESULT][VOTE] Release Apache Fury(incubating)
v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hello, Apache Fury(incubating) Community,
+
+The vote to release Apache Fury(Incubating) v${release_version}-${rc_version}
has passed.
+
+The vote PASSED with 3 binding +1 and 0 -1 vote:
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Vote thread: ${vote_thread_url}
+
+Thanks,
+
+${name}
+```
+
+### 孵化器社区投票
+
+发送电子邮件至:[email protected]:
+
+标题:
+
+```
+[VOTE] Release Apache Fury(incubating) v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hello everyone,
+
+This is a call for the vote to release Apache Fury(Incubating)
v${release_version}-${rc_version}.
+
+The Apache Fury community has voted and approved the release of Apache
+Fury(incubating) v${release_version}-${rc_version}. We now kindly request the
IPMC members
+review and vote for this release.
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+Fury community vote thread:
+${community_vote_thread_url}
+
+Vote result thread:
+${community_vote_result_thread_url}
+
+The release candidate:
+https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/
+
+This release has been signed with a PGP available here:
+https://downloads.apache.org/incubator/fury/KEYS
+
+Git tag for the release:
+https://github.com/apache/fury/releases/tag/v${release_version}-${rc_version}/
+
+Git commit for the release:
+https://github.com/apache/fury/commit/$xxx
+
+Maven staging repo:
+https://repository.apache.org/content/repositories/orgapachefury-${maven_artifact_number}/
+
+How to Build and Test, please refer to:
+https://github.com/apache/fury/blob/main/docs/guide/DEVELOPMENT.md
+
+Please download, verify, and test.
+
+The VOTE will pass after 3 binding approve.
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about apache fury, please see https://fury.apache.org/
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+Thanks,
+
+${name}
+```
+
+至少 72 小时后,至少有 3 + 1 具有约束力的投票(来自孵化器 PMC 成员)且没有否决票,发布投票结果:
+
+标题:
+
+```
+[RESULT][VOTE] Release Apache Fury(incubating)
v${release_version}-${rc_version}
+```
+
+内容:
+
+```
+Hi Incubator PMC,
+
+The vote to release Apache Fury(incubating) v${release_version}-${rc_version}
has passed with
+4 +1 binding and 3 +1 non-binding votes, no +0 or -1 votes.
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Non-Binding votes:
+
+- aaa
+
+Vote thread: ${incubator_vote_thread_url}
+
+Thanks for reviewing and voting for our release candidate.
+
+We will proceed with publishing the approved artifacts and sending out the
announcement soon.
+```
+
+### 如果投票失败怎么办
+
+如果投票失败,请单击“删除”以删除暂存的 Maven artifacts。
+
+解决提出的问题,然后再次提出 `rc_version` 的新投票。
+
+## 官方发布
+
+### 将 artifacts 发布到 SVN 发布目录
+
+- release_version:Fury 的发布版本,如 0.5.0
+- release_candidate_version:投票版本,如 0.5.0-rc1
+
+```bash
+svn mv
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}
https://dist.apache.org/repos/dist/release/incubator/fury/${release_version}
-m "Release fury ${release_version}"
+```
+
+### 更改 Fury 网站下载链接
+
+提交 PR 到 https://github.com/apache/fury-site 仓库更新 Fury
版本,[下载页面](https://fury.apache.org/download)
+
+### 发布 Maven artifacts
+
+- maven_artifact_number:Maven 暂存 artifacts 的数量。如 1001。
+- 打开https://repository.apache.org/#stagingRepositories.
+- 找到 artifacts `orgapachefury-${maven_artifact_number}`,点击“发布”。
+
+### 发送公告
+
+将发布公告发送给 [email protected] 并且抄送给 [email protected]。
+
+标题:
+
+```
+[ANNOUNCE] Release Apache Fury(incubating) ${release_version}
+```
+
+内容:
+
+```
+Hi all,
+
+The Apache Fury(incubating) community is pleased to announce
+that Apache Fury(incubating) {release_version} has been released!
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+The release notes are available here:
+https://github.com/apache/fury/releases/tag/v${release_version}
+
+For the complete list of changes:
+https://github.com/apache/fury/compare/v0.5.0...v${release_version}
+
+Apache Fury website: https://fury.apache.org/
+
+Download Links: https://fury.apache.org/download
+
+Fury Resources:
+- Fury github repo: https://github.com/apache/fury
+- Issue: https://github.com/apache/fury/issues
+- Mailing list: [email protected]
+
+We are looking to grow our community and welcome new contributors. If
+you are interested in contributing to Fury, please contact us on the
+mailing list or on GitHub. We will be happy to help you get started.
+
+------------------
+Best Regards,
+${your_name}
+```
+
+至此,整个发布流程结束。
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_verify.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_verify.md
new file mode 100644
index 00000000..668063ca
--- /dev/null
+++
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/community/how_to_verify.md
@@ -0,0 +1,121 @@
+---
+title: 如何验证 Apache Fury
+sidebar_position: 0
+id: how_to_verify
+---
+
+详细的 Check list,请参阅[Apache
检查清单](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+## 下载 Apache Fury
+
+```bash
+# If there is svn locally, you can clone to the local
+svn co
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/
+# You can download the material file directly
+wget
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/xxx.xxx
+```
+
+## 验证 checksums 和 signatures
+
+首先,您需要安装 gpg:
+
+```bash
+apt-get install gnupg
+# or
+yum install gnupg
+# or
+brew install gnupg
+```
+
+之后,导入 Apache Fury release manager 的公钥:
+
+```bash
+curl https://downloads.apache.org/incubator/fury/KEYS > KEYS # Download KEYS
+gpg --import KEYS # Import KEYS to local
+# Then, trust the public key:
+gpg --edit-key <KEY-used-in-this-version> # Edit the key(mentioned in vote
email)
+# It will enter the interactive mode, use the following command to trust the
key:
+gpg (GnuPG) 2.0.22; Copyright (C) 2013 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.
+
+
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: unknown validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+
+gpg> trust
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: unknown validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+
+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
+Do you really want to set this key to ultimate trust? (y/N) y
+
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: ultimate validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+Please note that the shown key validity is not necessarily correct
+unless you restart the program.
+```
+
+接下来验证签名:
+
+```bash
+for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i; done
+```
+
+如果出现如下内容,则表示签名正确:
+
+```bash
+apache-fury-incubating-0.5.0-src.tar.gz
+gpg: Signature made Wed 17 Apr 2024 11:49:45 PM CST using RSA key ID 5E580BA4
+gpg: checking the trustdb
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
+gpg: Good signature from "chaokunyang (CODE SIGNING KEY)
<[email protected]>"
+```
+
+然后验证 checksum:
+
+```bash
+for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
+```
+
+它应该输出如下内容:
+
+```bash
+apache-fury-incubating-0.5.0-src.tar.gz
+apache-fury-incubating-0.5.0-src.tar.gz: OK
+```
+
+## 检查源码包中的文件
+
+解压缩 `apache-fury-${release_version}-${rc_version}-src.tar.gz` 并检查以下内容:
+
+- 此存储库 LICENSE 和 NOTICE 文件是正确的;
+- 如有必要,所有文件都有 ASF 许可证标头;
+- 项目构建通过。
+
+## 检查 fury-java 的 Maven artifacts
+
+下载 Apache
Fury:https://repository.apache.org/content/repositories/orgapachefury-${maven_artifact_number}/.
+
+您可以检查以下内容:
+
+- JAR 的 Checksum 与项目绑定的 checksum 文件一致。
+- JAR 的 signature 与项目绑定的 signature 文件一致。
+- JAR 在本地是可重复的。这意味着您可以在计算机上构建 JAR,并验证 checksum 和与项目绑定的相同。
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/benchmark.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/benchmark.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/benchmark.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/benchmark.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/features.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/features.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/features.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/features.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/introduction.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/introduction.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/introduction/introduction.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/01-Introduction/introduction.md
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/02-Start/install.md
similarity index 100%
rename from i18n/zh-CN/docusaurus-plugin-content-docs/current/start/install.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/02-Start/install.md
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/start/usage.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/02-Start/usage.md
similarity index 100%
rename from i18n/zh-CN/docusaurus-plugin-content-docs/current/start/usage.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/02-Start/usage.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/DEVELOPMENT.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/DEVELOPMENT.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/DEVELOPMENT.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/DEVELOPMENT.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/graalvm_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/graalvm_guide.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/graalvm_guide.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/graalvm_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java_serialization_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/java_serialization_guide.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/java_serialization_guide.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/java_serialization_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/row_format_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/row_format_guide.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/row_format_guide.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/row_format_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/scala_guide.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/scala_guide.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/scala_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_serialization_guide.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/xlang_serialization_guide.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_serialization_guide.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/xlang_serialization_guide.md
diff --git
a/i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_type_mapping.md
b/i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/xlang_type_mapping.md
similarity index 100%
rename from
i18n/zh-CN/docusaurus-plugin-content-docs/current/guide/xlang_type_mapping.md
rename to
i18n/zh-CN/docusaurus-plugin-content-docs/version-0.10/docs/03-Guide/xlang_type_mapping.md
diff --git a/i18n/zh-CN/docusaurus-theme-classic/footer.json
b/i18n/zh-CN/docusaurus-theme-classic/footer.json
index 20130299..5708449e 100644
--- a/i18n/zh-CN/docusaurus-theme-classic/footer.json
+++ b/i18n/zh-CN/docusaurus-theme-classic/footer.json
@@ -25,15 +25,15 @@
},
"link.item.label.Install": {
"message": "安装",
- "description": "The label of footer link with label=Install linking to
/docs/start/install"
+ "description": "The label of footer link with label=Install linking to
/docs/docs/start/install"
},
"link.item.label.Usage": {
"message": "使用",
- "description": "The label of footer link with label=Usage linking to
/docs/start/usage"
+ "description": "The label of footer link with label=Usage linking to
/docs/docs/start/usage"
},
"link.item.label.Benchmark": {
"message": "基准测试",
- "description": "The label of footer link with label=Benchmark linking to
/docs/introduction/benchmark"
+ "description": "The label of footer link with label=Benchmark linking to
/docs/docs/introduction/benchmark"
},
"link.item.label.Fury": {
"message": "Fury",
diff --git a/sidebars.ts b/sidebars.ts
index 92fc69d1..805f2b15 100644
--- a/sidebars.ts
+++ b/sidebars.ts
@@ -13,10 +13,8 @@ import type {SidebarsConfig} from
'@docusaurus/plugin-content-docs';
const sidebars: SidebarsConfig = {
// By default, Docusaurus generates a sidebar from the docs folder structure
// tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
- startSidebar: [{type: 'autogenerated', dirName: 'start'}],
- introductionSidebar: [{type: 'autogenerated', dirName: 'introduction'}],
+ docsSidebar: [{type: 'autogenerated', dirName: 'docs'}],
specificationSidebar: [{type: 'autogenerated', dirName: 'specification'}],
- guideSidebar: [{type: 'autogenerated', dirName: 'guide'}],
communitySidebar: [{type: 'autogenerated', dirName: 'community'}],
// But you can create a sidebar manually
/*
diff --git a/src/pages/download/index.md b/src/pages/download/index.md
index 70cc91dd..e778a4b7 100644
--- a/src/pages/download/index.md
+++ b/src/pages/download/index.md
@@ -5,7 +5,7 @@ title: Apache Fury(incubating) Download
The official Apache Fury releases are provided as source artifacts.
-For binary install, please see Fury [install](/docs/start/install/) document.
+For binary install, please see Fury [install](/docs/docs/start/install/)
document.
## The latest release
diff --git a/src/pages/home/components/HomePageLanguageCard.tsx
b/src/pages/home/components/HomePageLanguageCard.tsx
index 19db3464..4e19b296 100644
--- a/src/pages/home/components/HomePageLanguageCard.tsx
+++ b/src/pages/home/components/HomePageLanguageCard.tsx
@@ -22,8 +22,8 @@ export default function HomePageLanguageCard() {
const getLanguageUrl = (language) => {
const baseUrl = locale.startsWith("zh-CN")
- ? "https://fury.apache.org/zh-CN/docs/start/usage/#"
- : "https://fury.apache.org/docs/start/usage/#";
+ ? "https://fury.apache.org/zh-CN/docs/docs/start/usage/#"
+ : "https://fury.apache.org/docs/docs/start/usage/#";
return `${baseUrl}${language}`;
};
diff --git a/src/pages/home/components/HomepageHeader.tsx
b/src/pages/home/components/HomepageHeader.tsx
index d5f5dc03..cb8fced7 100644
--- a/src/pages/home/components/HomepageHeader.tsx
+++ b/src/pages/home/components/HomepageHeader.tsx
@@ -46,7 +46,7 @@ export default function HomepageHeader() {
{/* 开始使用按钮 */}
<Link
className="button button--secondary button--lg"
- to="/docs/start/install"
+ to="/docs/docs/start/install"
data-aos="fade-up"
data-aos-delay="400"
>
diff --git a/versioned_docs/version-0.10/community/community.md
b/versioned_docs/version-0.10/community/community.md
new file mode 100644
index 00000000..ef3f56eb
--- /dev/null
+++ b/versioned_docs/version-0.10/community/community.md
@@ -0,0 +1,91 @@
+---
+title: Community
+sidebar_position: 0
+id: community
+---
+
+
+Apache Fury is a volunteer project and it thrives on the contributions of its
community.
+We invite you to participate as much or as little as you wish. Here are
several ways to contribute:
+
+- Use our project and share feedback.
+- Provide use-cases for the project.
+- Report bugs and contribute fixes.
+- Contribute code and documentation improvements.
+
+## Mailing list
+
+| Name | Desc |
Subscribe | Unsubscribe
| Post |
Archive |
+|-------------------------|---------------------------------------------|-------------------------------------------------------|-----------------------------------------------------------|------------------------------------|-----------------------------------------------------------------------|
+| [email protected] | Development related discussions |
[Subscribe](mailto:[email protected]) |
[Unsubscribe](mailto:[email protected]) |
[Post](mailto:[email protected]) |
[Archive](https://lists.apache.org/[email protected]) |
+| [email protected] | All commits to our repositories |
[Subscribe](mailto:[email protected]) |
[Unsubscribe](mailto:[email protected]) | Read only list
|
[Archive](https://lists.apache.org/[email protected]) |
+
+Please make sure subscribe to any list before attempting to post.
+
+If you are not subscribed to the mailing list, your message will either be
rejected or you won't receive the response.
+
+### How to subscribe to a mailing list
+
+To post messages, subscribe first by:
+
+1. Sending an email to [email protected] with `listname`
replaced accordingly.
+2. Replying to the confirmation email you'll receive, keeping the subject line
intact.
+3. You'll then get a welcome email, and the subscription succeeds.
+
+When discussing code snippets in emails, ensure:
+
+- You do not link to files in external services, as such files can change, get
deleted or the link might break and thus
+ make an archived email thread useless.
+- You paste text instead of screenshots of text.
+- You keep formatting when pasting code in order to keep the code readable.
+- There are enough import statements to avoid ambiguities.
+
+## Slack
+
+You can join
+the [Apache Fury™ community on
Slack](https://join.slack.com/t/fury-project/shared_invite/zt-1u8soj4qc-ieYEu7ciHOqA2mo47llS8A).
+
+There are a couple of community rules:
+
+- Be respectful and nice.
+- All important decisions and conclusions must be reflected back to the
mailing lists. "If it didn't happen on a mailing
+ list, it didn't happen." - The [Apache
Mottos](https://theapacheway.com/on-list/).
+- Use Slack threads to keep parallel conversations from overwhelming a channel.
+- Please do not direct message people for troubleshooting, issue assigning and
PR review. These should be picked-up
+ voluntarily.
+
+## Issue tracker
+
+We use GitHub Issues to track all issues:
+
+- code related issues: https://github.com/apache/fury/issues
+- website related issues: https://github.com/apache/fury-site/issues
+
+You need to have a [GitHub account](https://github.com/signup) in order to
create issues.
+If you don't have a [GitHub account](https://github.com/signup), you can post
an email to [email protected].
+
+### Bug reports
+
+To report a bug:
+
+- Verify that the bug does in fact exist.
+- Search the [issue tracker](https://github.com/apache/fury/issues) to verify
there is no existing issue reporting the bug you've found.
+- Create a [bug
report](https://github.com/apache/fury/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml)
on issue tracker.
+- If possible, dive into the source code of fury, and submit a patch for the
bug you reported, this helps ensure the bug
+ will be fixed quickly.
+
+### Reporting a Vulnerability
+
+Apache Fury is a project of the [Apache Software
Foundation](https://apache.org/) and follows the [ASF vulnerability handling
process](https://apache.org/security/#vulnerability-handling).
+
+To report a new vulnerability you have discovered please follow the [ASF
vulnerability reporting
process](https://apache.org/security/#reporting-a-vulnerability), which
explains how to send us details privately.
+
+### Enhancement
+
+Enhancements or new feature proposals are also welcome. The more concrete and
rationale the proposal is, the greater the
+chance it will be incorporated into future releases.
+
+## Source code
+
+- fury core repository: https://github.com/apache/fury
+- fury website repository: https://github.com/apache/fury-site
diff --git a/docs/community/how_to_join_community.md
b/versioned_docs/version-0.10/community/how_to_join_community.md
similarity index 95%
copy from docs/community/how_to_join_community.md
copy to versioned_docs/version-0.10/community/how_to_join_community.md
index d41c2e71..6fbe7a7e 100644
--- a/docs/community/how_to_join_community.md
+++ b/versioned_docs/version-0.10/community/how_to_join_community.md
@@ -10,7 +10,7 @@ First of all, kudos to you for choosing to join the open
source contribution ran
The Fury team usually conducts development and issue maintenance on GitHub.
Please open the [GitHub website](https://github.com/), click the `Sign up`
button in the upper right corner, register your own account, and take the first
step of your open source journey.
-In the [Fury repository](https://github.com/apache/fury), we have a
[guide](https://fury.apache.org/zh-CN/docs/community/) for all open source
contributors, introducing contents such as version management and branch
management. **Please take a few minutes to read and understand it**.
+In the [Fury repository](https://github.com/apache/fury), we have a
[guide](https://fury.apache.org/zh-CN/docs/docs/community/) for all open source
contributors, introducing contents such as version management and branch
management. **Please take a few minutes to read and understand it**.
## Your First Pull Request
diff --git a/versioned_docs/version-0.10/community/how_to_release.md
b/versioned_docs/version-0.10/community/how_to_release.md
new file mode 100644
index 00000000..cbd5cd38
--- /dev/null
+++ b/versioned_docs/version-0.10/community/how_to_release.md
@@ -0,0 +1,705 @@
+---
+title: How to release
+sidebar_position: 0
+id: how_to_release
+---
+
+This document mainly introduces how the release manager releases a new version
of Apache Fury.
+
+## Introduction
+
+Source Release is the most important part which Apache values.
+
+Please pay more attention to license and signing issues.
+Publishing software is a serious thing and has legal consequences.
+
+## First-time as a release manager
+
+### Environmental requirements
+
+This release process is operated in the Ubuntu OS, and the following tools are
required:
+
+- JDK 1.8
+- Apache Maven 3.x
+- Python 3.8
+- GnuPG 2.x
+- Git
+- SVN (apache uses svn to host project releases)
+- Pay attention to setting environment variables: if you configure gpg keys
under a different directory,
+ please `export GNUPGHOME=$(xxx)`
+
+### Prepare GPG Key
+
+If you are the first to become a release manager, you need to prepare a gpg
key.
+
+Following is a quick setup, you can refer to [Apache openpgp
doc](https://infra.apache.org/openpgp.html) for further
+details.
+
+#### Install GPG
+
+```bash
+sudo apt install gnupg2
+```
+
+#### Generate GPG Key
+
+Please use your apache name and email for generate key
+
+```bash
+$ gpg --full-gen-key
+gpg (GnuPG) 2.2.20; Copyright (C) 2020 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)
+ (14) Existing key from card
+Your selection? 1 # input 1
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) 4096 # input 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) 0 # input 0
+Key does not expire at all
+Is this correct? (y/N) y # input y
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: Chaokun Yang # input your name
+Email address: [email protected] # input your email
+Comment: CODE SIGNING KEY # input some annotations, optional
+You selected this USER-ID:
+ "Chaokun <[email protected]>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O # input O
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+We need to generate a lot of random bytes. It is a good idea to perform
+some other action (type on the keyboard, move the mouse, utilize the
+disks) during the prime generation; this gives the random number
+generator a better chance to gain enough entropy.
+
+# Input the security key
+┌──────────────────────────────────────────────────────┐
+│ Please enter this passphrase │
+│ │
+│ Passphrase: _______________________________ │
+│ │
+│ <OK> <Cancel> │
+└──────────────────────────────────────────────────────┘
+# key generation will be done after your inputting the key with the following
output
+gpg: key E49B00F626B marked as ultimately trusted
+gpg: revocation certificate stored as
'/Users/chaokunyang/.gnupg/openpgp-revocs.d/1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4.rev'
+public and secret key created and signed.
+
+pub rsa4096 2022-07-12 [SC]
+ 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid [ultimate] Chaokun <[email protected]>
+sub rsa4096 2022-07-12 [E]
+```
+
+#### Upload your public key to public GPG keyserver
+
+Firstly, list your key:
+
+```bash
+gpg --list-keys
+```
+
+The output is like:
+
+```bash
+--------------------------------------------------
+pub rsa4096 2024-03-27 [SC]
+ 1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+uid [ultimate] chaokunyang (CODE SIGNING KEY)
<[email protected]>
+sub rsa4096 2024-03-27 [E]
+```
+
+Then, send your key id to key server:
+
+```bash
+gpg --keyserver keys.openpgp.org --send-key <key-id> # e.g.,
1E2CDAE4C08AD7D694D1CB139D7BE8E45E580BA4
+```
+
+Among them, `keys.openpgp.org` is a randomly selected keyserver, you can use
keyserver.ubuntu.com or any other
+full-featured keyserver.
+
+#### Check whether the key is created successfully
+
+Uploading takes about one minute; after that, you can check by email at the
corresponding keyserver.
+
+Uploading keys to the keyserver is mainly for joining
+a [Web of Trust](https://infra.apache.org/release-signing.html#web-of-trust).
+
+#### Add your GPG public key to the project KEYS file
+
+The svn repository of the release branch is:
https://dist.apache.org/repos/dist/release/incubator/fury
+
+Please add the public key to KEYS in the release branch:
+
+```bash
+svn co https://dist.apache.org/repos/dist/release/incubator/fury fury-dist
+# As this step will copy all the versions, it will take some time. If the
network is broken, please use svn cleanup to delete the lock before re-execute
it.
+cd fury-dist
+(gpg --list-sigs [email protected] && gpg --export --armor
[email protected]) >> KEYS # Append your key to the KEYS file
+svn add . # It is not needed if the KEYS document exists before.
+svn ci -m "add gpg key for YOUR_NAME" # Later on, if you are asked to enter a
username and password, just use your apache username and password.
+```
+
+#### Upload the GPG public key to your GitHub account
+
+- Enter https://github.com/settings/keys to add your GPG key.
+- Please remember to bind the email address used in the GPG key to your GitHub
+ account (https://github.com/settings/emails) if you find "unverified" after
adding it.
+
+### Further reading
+
+It's recommended but not mandatory to read following documents before making a
release to know more details about apache
+release:
+
+- Release policy: https://www.apache.org/legal/release-policy.html
+- Incubator release: http://incubator.apache.org/guides/releasemanagement.html
+- TLP release: https://infra.apache.org/release-distribution
+- Release sign: https://infra.apache.org/release-signing.html
+- Release publish: https://infra.apache.org/release-publishing.html
+- Release download pages: https://infra.apache.org/release-download-pages.html
+- Publishing maven artifacts:
https://infra.apache.org/publishing-maven-artifacts.html
+
+## Start discussion about the release
+
+Start a discussion about the next release via sending email to:
[email protected]:
+
+Title:
+
+```
+[DISCUSS] Release Apache Fury(incubating) ${release_version}
+```
+
+Content:
+
+```
+Hello, Apache Fury(incubating) Community,
+
+This is a call for a discussion to release Apache Fury(incubating) version
${release_version}.
+
+The change lists about this release:
+
+https://github.com/apache/fury/compare/v0.4.1...v0.5.0
+
+Please leave your comments here about this release plan. We will bump the
version in repo and start the release process after the discussion.
+
+Thanks,
+
+${name}
+```
+
+## Preparing for release
+
+If the discussion goes positive, you will need to prepare the release
artifiacts.
+
+### Github branch and tag
+
+- Create a new branch named `releases-0.5.0`
+- Bump version to `$version` by executing command `python ci/release.py
bump_version -l all -version $version`
+- Make a git commit and push the branch to `[email protected]:apache/fury.git`
+- Create a new tag by `git tag v0.5.0-rc1`, then push it to
`[email protected]:apache/fury.git`
+
+### Build and upload artifacts to SVN dist/dev repo
+
+First you need to build source release artifacts by `python ci/release.py
build -v $version`.
+
+Then you need to upload it to svn dist repo. The dist repo of the dev branch
+is: https://dist.apache.org/repos/dist/dev/incubator/fury
+
+```bash
+# As this step will copy all the versions, it will take some time. If the
network is broken, please use svn cleanup to delete the lock before re-execute
it.
+svn co https://dist.apache.org/repos/dist/dev/incubator/fury fury-dist-dev
+```
+
+Then, upload the artifacts:
+
+```bash
+cd fury-dist-dev
+# create a directory named by version
+mkdir ${release_version}-${rc_version}
+# copy source code and signature package to the versioned directory
+cp ${repo_dir}/dist/* ${release_version}-${rc_version}
+# check svn status
+svn status
+# add to svn
+svn add ${release_version}-${rc_version}
+# check svn status
+svn status
+# commit to SVN remote server
+svn commit -m "Prepare for fury ${release_version}-${rc_version}"
+```
+
+Visit https://dist.apache.org/repos/dist/dev/incubator/fury/ to check the
artifacts are uploaded correctly.
+
+### What to do if something goes wrong
+
+If some files are unexpected, you need to remove by `svn delete` and repeat
the above upload process.
+
+## Voting
+
+### check version
+
+As an incubating project, Fury requires votes from both the FUry Community and
Incubator Community.
+
+- release_version: the version for fury, like 0.5.0.
+- release_candidate_version: the version for voting, like 0.5.0-rc1.
+- maven_artifact_number: the number for Maven staging artifacts, like 1001.
Specifically, the maven_artifact_number can
+ be found by searching "fury" on
https://repository.apache.org/#stagingRepositories.
+
+### Build the source code of fury and release it to nexus
+
+#### Configure Apache Account Passwords
+
+Before publishing Fury to Nexus, you need to securely configure your Apache
account credentials. This step is critical
+as passwords must be encrypted.
+
+First, open your Maven global settings file `settings.xml`, typically located
at `~/.m2/settings.xml`. Add or modify the
+following section:
+
+```xml
+
+<servers>
+ <server>
+ <id>apache.snapshots.https</id>
+ <username>your-apache-username</username>
+ <password>{your-encrypted-password}</password>
+ </server>
+ <server>
+ <id>apache.releases.https</id>
+ <username>your-apache-username</username>
+ <password>{your-encrypted-password}</password>
+ </server>
+</servers>
+```
+
+**Important Notes:**
+
+- Replace `your-apache-username` with your Apache LDAP username
+- Passwords must be encrypted using Maven's password encryption tool
+- Encrypted passwords should be enclosed in curly braces `{}`
+
+Refer to the official documentation for detailed encryption
+instructions: [Publishing Maven
Artifacts](https://infra.apache.org/publishing-maven-artifacts.html)
+
+Steps to encrypt your password:
+
+1. Generate a master password (if you haven't already):
+
+2. ```sh
+
+ mvn --encrypt-master-password your-master-password
+
+ ```
+
+ Save the output to `~/.m2/settings-security.xml`:
+
+3. ```xml
+
+ <settingsSecurity>
+ <master>{your-encrypted-master-password}</master>
+ </settingsSecurity>
+
+ ```
+
+2. Encrypt your Apache account password:
+
+ ```sh
+
+ mvn --encrypt-password your-apache-password
+
+ ```
+
+ Place the encrypted output into the `password` field in `settings.xml`
+
+#### Build and Publish Java Module
+
+```sh
+
+# Navigate to the Java module directory
+cd java
+
+# Execute Maven build and deploy to Nexus
+# -T10: Use 10 threads for parallel build, improving speed
+# clean: Clean the project
+# deploy: Deploy to remote repository
+# -Papache-release: Activate apache-release profile
+# -DskipTests: Skip tests
+# -Dgpg.skip=false: Enable GPG signing (required for release verification)
+mvn -T10 clean deploy -Papache-release -DskipTests -Dgpg.skip=false
+
+```
+
+#### Build and Publish Kotlin Module
+
+```sh
+
+# Return to project root and navigate to Kotlin module
+cd ../kotlin
+
+# Execute the same Maven command as Java module
+# Configuration parameters are identical to Java module
+mvn -T10 clean deploy -Papache-release -DskipTests -Dgpg.skip=false
+
+```
+
+#### Build and Publish Scala Module
+
+```sh
+
+# Return to project root and navigate to Scala module
+cd ../scala
+
+# Build and sign JARs for all Scala versions
+# +publishSigned: Execute publishSigned for all configured Scala versions
+echo "Starting to build Scala JARs..."
+sbt +publishSigned
+
+# Prepare for upload to Sonatype (Nexus)
+# sonatypePrepare: Prepare for Maven Central Repository release
+echo "Starting upload preparation..."
+sbt sonatypePrepare
+
+# Upload packaged JARs to Sonatype
+# sonatypeBundleUpload: Upload prepared bundles
+echo "Starting JAR upload..."
+sbt sonatypeBundleUpload
+
+echo "Scala JAR deployment succeeded!"
+
+```
+
+#### Lock the Release in Nexus
+
+After completing the publication of all modules, perform the following steps
in Nexus:
+
+1. Log in to the Apache Nexus repository management interface
+2. Navigate to the "Snapshots" or "Releases" repository (depending on your
release type)
+3. Locate the latest Fury project version
+4. Execute the "Close" operation to validate all uploaded artifacts
+5. After successful validation, execute the "Release" operation to finalize
the deployment
+
+These steps ensure all published artifacts are verified and correctly deployed
to the public repository.
+
+### build a Pre-release
+
+You need to build a Pre-release before voting, such as:
+https://github.com/apache/fury/releases/tag/v0.10.3-rc2
+
+### Fury Community Vote
+
+you need send a email to Fury Community: [email protected]:
+
+Title:
+
+```
+[VOTE] Release Apache Fury(incubating) v${release_version}-${rc_version}
+```
+
+Content:
+
+```
+Hello, Apache Fury(incubating) Community:
+
+This is a call for vote to release Apache Fury(Incubating)
+version release-0.5.0-rc3.
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+The discussion thread:
+https://lists.apache.org/thread/xxr3od301g6v3ndj14zqc05byp9qvclh
+
+The change lists about this release:
+https://github.com/apache/fury/compare/v0.4.1...v0.5.0-rc3
+
+The release candidates:
+https://dist.apache.org/repos/dist/dev/incubator/fury/0.5.0-rc3/
+
+The maven staging for this release:
+https://repository.apache.org/content/repositories/orgapachefury-1003
+
+Git tag for the release:
+https://github.com/apache/fury/releases/tag/v0.5.0-rc3
+
+Git commit for the release:
+https://github.com/apache/fury/commit/fae06330edd049bb960536e978a45b97bca66faf
+
+The artifacts signed with PGP key [5E580BA4], corresponding to
+[[email protected]], that can be found in keys file:
+https://downloads.apache.org/incubator/fury/KEYS
+
+The vote will be open for at least 72 hours until the necessary number of
votes are reached.
+
+Please vote accordingly:
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about Fury, please see https://fury.apache.org/
+
+*Valid check is a requirement for a vote. *Checklist for reference:
+
+[ ] Download Fury is valid.
+[ ] Checksums and PGP signatures are valid.
+[ ] Source code distributions have correct names matching the current release.
+[ ] LICENSE and NOTICE files are correct.
+[ ] All files have license headers if necessary.
+[ ] No compiled archives bundled in source archive.
+[ ] Can compile from source.
+
+More detail checklist please refer:
+https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist
+
+How to Build and Test, please refer to:
https://github.com/apache/fury/blob/main/docs/guide/DEVELOPMENT.md
+
+
+Thanks,
+Chaokun Yang
+```
+
+After at least 3 +1 binding vote (from Fury Podling PMC member and committers)
and no veto, claim the vote result:
+
+Title:
+
+```
+[RESULT][VOTE] Release Apache Fury(incubating)
v${release_version}-${rc_version}
+```
+
+Content:
+
+```
+Hello, Apache Fury(incubating) Community,
+
+The vote to release Apache Fury(Incubating) v${release_version}-${rc_version}
has passed.
+
+The vote PASSED with 3 binding +1 and 0 -1 vote:
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Vote thread: ${vote_thread_url}
+
+Thanks,
+
+${name}
+```
+
+### Incubator Community Vote
+
+Send an email to: [email protected]:
+
+Title:
+
+```
+[VOTE] Release Apache Fury(incubating) v${release_version}-${rc_version}
+```
+
+Content:
+
+```
+Hello everyone,
+
+This is a call for the vote to release Apache Fury(Incubating)
v${release_version}-${rc_version}.
+
+The Apache Fury community has voted and approved the release of Apache
+Fury(incubating) v${release_version}-${rc_version}. We now kindly request the
IPMC members
+review and vote for this release.
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+Fury community vote thread:
+${community_vote_thread_url}
+
+Vote result thread:
+${community_vote_result_thread_url}
+
+The release candidate:
+https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/
+
+This release has been signed with a PGP available here:
+https://downloads.apache.org/incubator/fury/KEYS
+
+Git tag for the release:
+https://github.com/apache/fury/releases/tag/v${release_version}-${rc_version}/
+
+Git commit for the release:
+https://github.com/apache/fury/commit/$xxx
+
+Maven staging repo:
+https://repository.apache.org/content/repositories/orgapachefury-${maven_artifact_number}/
+
+How to Build and Test, please refer to:
+https://github.com/apache/fury/blob/main/docs/guide/DEVELOPMENT.md
+
+Please download, verify, and test.
+
+The VOTE will pass after 3 binding approve.
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about apache fury, please see https://fury.apache.org/
+
+Checklist for reference:
+
+[ ] Download links are valid.
+[ ] Checksums and signatures.
+[ ] LICENSE/NOTICE files exist
+[ ] No unexpected binary files
+[ ] All source files have ASF headers
+[ ] Can compile from source
+
+Thanks,
+
+${name}
+```
+
+After at least 72 hours with at least 3 +1 binding vote (from Incubator PMC
member) and no veto, claim the vote result:
+
+Title:
+
+```
+[RESULT][VOTE] Release Apache Fury(incubating)
v${release_version}-${rc_version}
+```
+
+Content:
+
+```
+Hi Incubator PMC,
+
+The vote to release Apache Fury(incubating) v${release_version}-${rc_version}
has passed with
+4 +1 binding and 3 +1 non-binding votes, no +0 or -1 votes.
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Non-Binding votes:
+
+- aaa
+
+Vote thread: ${incubator_vote_thread_url}
+
+Thanks for reviewing and voting for our release candidate.
+
+We will proceed with publishing the approved artifacts and sending out the
announcement soon.
+```
+
+### What if vote fail
+
+If the vote failed, click "Drop" to drop the staging Maven artifacts.
+
+Address the raised issues, then bump `rc_version` and file a new vote again.
+
+## Official Release
+
+### Publish artifacts to SVN Release Directory
+
+- release_version: the release version for fury, like 0.5.0
+- release_candidate_version: the version for voting, like 0.5.0-rc1
+
+```bash
+svn mv
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}
https://dist.apache.org/repos/dist/release/incubator/fury/${release_version}
-m "Release fury ${release_version}"
+```
+
+In the repository at https://dist.apache.org/repos/dist/dev/incubator/fury/,
if any
+outdated release_candidate_version are left behind when releasing the
release_version,
+please clear them to keep the dev repository tidy.
+
+When
`https://archive.apache.org/dist/incubator/fury/0.10.0/${release_version}` is
+accessible (confirming that the release_version has been successfully released
+and archived), we may clean up the previous release version in the release
repository,
+leaving only the current version.
+
+### Update Fury&Fury-Site content
+
+Submit a PR to https://github.com/apache/fury-site to update Fury-site.
+Reference implementation: [#222](https://github.com/apache/fury-site/pull/222)
+and [#223](https://github.com/apache/fury-site/pull/223).
+
+Submit a PR to https://github.com/apache/fury to update
[README](https://github.com/apache/fury/blob/main/README.md),
+like [#2207](https://github.com/apache/fury/pull/2207).
+
+### Github officially released
+
+You need to officially release this version in the Fury project
+Reference implementation: https://github.com/apache/fury/releases/tag/v0.10.3
+
+### Release Maven artifacts
+
+- maven_artifact_number: the number for Maven staging artifacts, like 1001.
+- Open https://repository.apache.org/#stagingRepositories.
+- Find the artifact `orgapachefury-${maven_artifact_number}`, click "Release".
+
+### Send the announcement
+
+Send the release announcement to [email protected] and CC
[email protected].
+
+Title:
+
+```
+[ANNOUNCE] Release Apache Fury(incubating) ${release_version}
+```
+
+Content:
+
+```
+Hi all,
+
+The Apache Fury(incubating) community is pleased to announce
+that Apache Fury(incubating) {release_version} has been released!
+
+Apache Fury(incubating) - A blazingly fast multi-language serialization
+framework powered by JIT and zero-copy.
+
+The release notes are available here:
+https://github.com/apache/fury/releases/tag/v${release_version}
+
+For the complete list of changes:
+https://github.com/apache/fury/compare/v0.5.0...v${release_version}
+
+Apache Fury website: https://fury.apache.org/
+
+Download Links: https://fury.apache.org/download
+
+Fury Resources:
+- Fury github repo: https://github.com/apache/fury
+- Issue: https://github.com/apache/fury/issues
+- Mailing list: [email protected]
+
+We are looking to grow our community and welcome new contributors. If
+you are interested in contributing to Fury, please contact us on the
+mailing list or on GitHub. We will be happy to help you get started.
+
+------------------
+Best Regards,
+${your_name}
+```
+
+Remember to use plain text instead of rich text format, or you may be rejected
when CC [email protected]
+
+After completing the above steps, the Fury release process comes to an end.
diff --git a/versioned_docs/version-0.10/community/how_to_verify.md
b/versioned_docs/version-0.10/community/how_to_verify.md
new file mode 100644
index 00000000..23b7395b
--- /dev/null
+++ b/versioned_docs/version-0.10/community/how_to_verify.md
@@ -0,0 +1,122 @@
+---
+title: How to verify
+sidebar_position: 0
+id: how_to_verify
+---
+
+
+For detailed check list, please refer to the [official check
list](https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist)
+
+## Download the candidate version
+
+```bash
+#If there is svn locally, you can clone to the local
+svn co
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/
+# You can download the material file directly
+wget
https://dist.apache.org/repos/dist/dev/incubator/fury/${release_version}-${rc_version}/xxx.xxx
+```
+
+## Verify checksums and signatures
+
+First you need to install gpg:
+
+```bash
+apt-get install gnupg
+# or
+yum install gnupg
+# or
+brew install gnupg
+```
+
+Then import the Fury release manager's public key:
+
+```bash
+curl https://downloads.apache.org/incubator/fury/KEYS > KEYS # Download KEYS
+gpg --import KEYS # Import KEYS to local
+# Then, trust the public key:
+gpg --edit-key <KEY-used-in-this-version> # Edit the key(mentioned in vote
email)
+# It will enter the interactive mode, use the following command to trust the
key:
+gpg (GnuPG) 2.0.22; Copyright (C) 2013 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.
+
+
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: unknown validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+
+gpg> trust
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: unknown validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+
+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
+Do you really want to set this key to ultimate trust? (y/N) y
+
+pub 4096R/5E580BA4 created: 2024-03-27 expires: never usage: SC
+ trust: ultimate validity: unknown
+sub 4096R/A31EF728 created: 2024-03-27 expires: never usage: E
+[ unknown] (1). chaokunyang (CODE SIGNING KEY) <[email protected]>
+Please note that the shown key validity is not necessarily correct
+unless you restart the program.
+```
+
+Next verify signature:
+
+```bash
+for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i; done
+```
+
+If something like the following appears, it means the signature is correct:
+
+```bash
+apache-fury-incubating-0.5.0-src.tar.gz
+gpg: Signature made Wed 17 Apr 2024 11:49:45 PM CST using RSA key ID 5E580BA4
+gpg: checking the trustdb
+gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
+gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
+gpg: Good signature from "chaokunyang (CODE SIGNING KEY)
<[email protected]>"
+```
+
+Then verify checksum:
+
+```bash
+for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
+```
+
+It should output something like:
+
+```bash
+apache-fury-incubating-0.5.0-src.tar.gz
+apache-fury-incubating-0.5.0-src.tar.gz: OK
+```
+
+## Check the file content of the source package
+
+Unzip `apache-fury-${release_version}-${rc_version}-src.tar.gz` and check the
follows:
+
+- LICENSE and NOTICE files are correct for the repository.
+- All files have ASF license headers if necessary.
+- Building is OK.
+
+## Check the Maven artifacts of fury-java
+
+Download the artifacts from
https://repository.apache.org/content/repositories/orgapachefury-${maven_artifact_number}/.
+
+You can check the follows:
+
+- Checksum of JARs match the bundled checksum file.
+- Signature of JARs match the bundled signature file.
+- JARs is reproducible locally. This means you can build the JARs on your
machine and verify the checksum is the same with the bundled one.
diff --git a/docs/introduction/benchmark.md
b/versioned_docs/version-0.10/docs/01-Introduction/benchmark.md
similarity index 100%
rename from docs/introduction/benchmark.md
rename to versioned_docs/version-0.10/docs/01-Introduction/benchmark.md
diff --git a/docs/introduction/features.md
b/versioned_docs/version-0.10/docs/01-Introduction/features.md
similarity index 100%
rename from docs/introduction/features.md
rename to versioned_docs/version-0.10/docs/01-Introduction/features.md
diff --git a/docs/introduction/introduction.md
b/versioned_docs/version-0.10/docs/01-Introduction/introduction.md
similarity index 100%
rename from docs/introduction/introduction.md
rename to versioned_docs/version-0.10/docs/01-Introduction/introduction.md
diff --git a/docs/start/install.md
b/versioned_docs/version-0.10/docs/02-Start/install.md
similarity index 100%
rename from docs/start/install.md
rename to versioned_docs/version-0.10/docs/02-Start/install.md
diff --git a/docs/start/usage.md
b/versioned_docs/version-0.10/docs/02-Start/usage.md
similarity index 100%
rename from docs/start/usage.md
rename to versioned_docs/version-0.10/docs/02-Start/usage.md
diff --git a/docs/guide/DEVELOPMENT.md
b/versioned_docs/version-0.10/docs/03-Guide/DEVELOPMENT.md
similarity index 100%
rename from docs/guide/DEVELOPMENT.md
rename to versioned_docs/version-0.10/docs/03-Guide/DEVELOPMENT.md
diff --git a/docs/guide/graalvm_guide.md
b/versioned_docs/version-0.10/docs/03-Guide/graalvm_guide.md
similarity index 100%
rename from docs/guide/graalvm_guide.md
rename to versioned_docs/version-0.10/docs/03-Guide/graalvm_guide.md
diff --git a/docs/guide/java_serialization_guide.md
b/versioned_docs/version-0.10/docs/03-Guide/java_serialization_guide.md
similarity index 100%
rename from docs/guide/java_serialization_guide.md
rename to versioned_docs/version-0.10/docs/03-Guide/java_serialization_guide.md
diff --git a/docs/guide/row_format_guide.md
b/versioned_docs/version-0.10/docs/03-Guide/row_format_guide.md
similarity index 100%
rename from docs/guide/row_format_guide.md
rename to versioned_docs/version-0.10/docs/03-Guide/row_format_guide.md
diff --git a/docs/guide/scala_guide.md
b/versioned_docs/version-0.10/docs/03-Guide/scala_guide.md
similarity index 100%
rename from docs/guide/scala_guide.md
rename to versioned_docs/version-0.10/docs/03-Guide/scala_guide.md
diff --git a/docs/guide/xlang_serialization_guide.md
b/versioned_docs/version-0.10/docs/03-Guide/xlang_serialization_guide.md
similarity index 100%
rename from docs/guide/xlang_serialization_guide.md
rename to versioned_docs/version-0.10/docs/03-Guide/xlang_serialization_guide.md
diff --git a/docs/guide/xlang_type_mapping.md
b/versioned_docs/version-0.10/docs/03-Guide/xlang_type_mapping.md
similarity index 98%
rename from docs/guide/xlang_type_mapping.md
rename to versioned_docs/version-0.10/docs/03-Guide/xlang_type_mapping.md
index b6acb9a9..1638e2ab 100644
--- a/docs/guide/xlang_type_mapping.md
+++ b/versioned_docs/version-0.10/docs/03-Guide/xlang_type_mapping.md
@@ -21,7 +21,7 @@ license: |
Note:
-- For type definition, see [Type Systems in
Spec](../specification/xlang_serialization_spec.md#type-systems)
+- For type definition, see [Type Systems in
Spec](../docs/specification/xlang_serialization_spec.md#type-systems)
- `int16_t[n]/vector<T>` indicates `int16_t[n]/vector<int16_t>`
- The cross-language serialization is not stable, do not use it in your
production environment.
diff --git
a/versioned_docs/version-0.10/specification/java_serialization_spec.md
b/versioned_docs/version-0.10/specification/java_serialization_spec.md
new file mode 100644
index 00000000..257f0172
--- /dev/null
+++ b/versioned_docs/version-0.10/specification/java_serialization_spec.md
@@ -0,0 +1,560 @@
+---
+title: Fury Java Serialization Format
+sidebar_position: 1
+id: fury_java_serialization_spec
+license: |
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+---
+
+## Spec overview
+
+Fury Java Serialization is an automatic object serialization framework that
supports reference and polymorphism. Fury
+will
+convert an object from/to fury java serialization binary format. Fury has two
core concepts for java serialization:
+
+- **Fury Java Binary format**
+- **Framework to convert object to/from Fury Java Binary format**
+
+The serialization format is a dynamic binary format. The dynamics and
reference/polymorphism support make Fury flexible,
+much more easy to use, but
+also introduce more complexities compared to static serialization frameworks.
So the format will be more complex.
+
+Here is the overall format:
+
+```
+| fury header | object ref meta | object class meta | object value data |
+```
+
+The data are serialized using little endian byte order overall. If bytes swap
is costly for some object,
+Fury will write the byte order for that object into the data instead of
converting it to little endian.
+
+## Fury header
+
+Fury header consists starts one byte:
+
+```
+| 4 bits | 1 bit | 1 bit | 1 bit | 1 bit | optional 4 bytes
|
++---------------+-------+-------+--------+-------+------------------------------------+
+| reserved bits | oob | xlang | endian | null | unsigned int for meta start
offset |
+```
+
+- null flag: 1 when object is null, 0 otherwise. If an object is null, other
bits won't be set.
+- endian flag: 1 when data is encoded by little endian, 0 for big endian.
+- xlang flag: 1 when serialization uses xlang format, 0 when serialization
uses Fury java format.
+- oob flag: 1 when passed `BufferCallback` is not null, 0 otherwise.
+
+If meta share mode is enabled, an uncompressed unsigned int is appended to
indicate the start offset of metadata.
+
+## Reference Meta
+
+Reference tracking handles whether the object is null, and whether to track
reference for the object by writing
+corresponding flags and maintaining internal state.
+
+Reference flags:
+
+| Flag | Byte Value | Description
|
+|---------------------|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------|
+| NULL FLAG | `-3` | This flag indicates the object is a null
value. We don't use another byte to indicate REF, so that we can save one byte.
|
+| REF FLAG | `-2` | This flag indicates the object is already
serialized previously, and fury will write a ref id with unsigned varint format
instead of serialize it again |
+| NOT_NULL VALUE FLAG | `-1` | This flag indicates the object is a
non-null value and fury doesn't track ref for this type of object.
|
+| REF VALUE FLAG | `0` | This flag indicates the object is
referencable and the first time to serialize.
|
+
+When reference tracking is disabled globally or for specific types, or for
certain types within a particular
+context(e.g., a field of a class), only the `NULL` and `NOT_NULL VALUE` flags
will be used for reference meta.
+
+## Class Meta
+
+Fury supports to register class by an optional id, the registration can be
used for security check and class
+identification.
+If a class is registered, it will have a user-provided or an auto-growing
unsigned int i.e. `class_id`.
+
+Depending on whether meta share mode and registration is enabled for current
class, Fury will write class meta
+differently.
+
+### Schema consistent
+
+If schema consistent mode is enabled globally or enabled for current class,
class meta will be written as follows:
+
+- If class is registered, it will be written as a fury unsigned varint:
`class_id << 1`.
+- If class is not registered:
+ - If class is not an array, fury will write one byte `0bxxxxxxx1` first,
then write class name.
+ - The first little bit is `1`, which is different from first bit `0` of
+ encoded class id. Fury can use this information to determine whether
to read class by class id for
+ deserialization.
+ - If class is not registered and class is an array, fury will write one byte
`dimensions << 1 | 1` first, then write
+ component
+ class subsequently. This can reduce array class name cost if component
class is or will be serialized.
+ - Class will be written as two enumerated fury unsigned by default: `package
name` and `class name`. If meta share
+ mode is
+ enabled,
+ class will be written as an unsigned varint which points to index in
`MetaContext`.
+
+### Schema evolution
+
+If schema evolution mode is enabled globally or enabled for current class,
class meta will be written as follows:
+
+- If meta share mode is not enabled, class meta will be written as schema
consistent mode. Additionally, field meta such
+ as field type
+ and name will be written with the field value using a key-value like layout.
+- If meta share mode is enabled, class meta will be written as a meta-share
encoded binary if class hasn't been written
+ before, otherwise an unsigned varint id which references to previous written
class meta will be written.
+
+## Meta share
+
+> This mode will forbid streaming writing since it needs to look back for
update the start offset after the whole object
+> graph
+> writing and meta collecting is finished. Only in this way we can ensure
deserialization failure doesn't lost shared
+> meta.
+> Meta streamline will be supported in the future for enclosed meta sharing
which doesn't cross multiple serializations
+> of different objects.
+
+For Schema consistent mode, class will be encoded as an enumerated string by
full class name. Here we mainly describe
+the meta layout for schema evolution mode:
+
+```
+| 8 bytes global meta header | 1~2 bytes | variable bytes | variable
bytes | variable bytes |
++-------------------------------+-------------|--------------------+-------------------+----------------+
+| 50 bits hash + 14 bits header | type header | current class meta | parent
class meta | ... |
+```
+
+Class meta are encoded from parent class to leaf class, only class with
serializable fields will be encoded.
+
+### Global meta header
+
+Meta header is a 64 bits number value encoded in little endian order.
+
+- lower 12 bits are used to encode meta size. If meta size `>=
0b111_1111_1111`, then write
+ `meta_ size - 0b111_1111_1111` next.
+- 13rd bit is used to indicate whether to write fields meta. When this class
is schema-consistent or use registered
+ serializer, fields meta will be skipped. Class Meta will be used for share
namespace + type name only.
+- 14rd bit is used to indicate whether meta is compressed.
+- Other 50 bits is used to store the unique hash of `flags + all layers class
meta`.
+
+### Type header
+
+- Lowest 4 digits `0b0000~0b1110` are used to record num classes. `0b1111` is
preserved to indicate that Fury need to
+ read more bytes for length using Fury unsigned int encoding. If current
class doesn't has parent class, or parent
+ class doesn't have fields to serialize, or we're in a context which
serialize fields of current class
+ only(`ObjectStreamSerializer#SlotInfo` is an example), num classes will be 1.
+- Other 4 bits are preserved to future extensions.
+- If num classes are greater than or equal to `0b1111`, write `num_classes -
0b1111` as varuint next.
+
+### Single layer class meta
+
+```
+| unsigned varint | meta string | meta string |
field info: variable bytes | variable bytes | ... |
++----------------------------+-----------------------+---------------------+-------------------------------+-----------------+-----+
+| num fields + register flag | header + package name | header + class name |
header + type id + field name | next field info | ... |
+```
+
+- num fields: encode `num fields << 1 | register flag(1 when class
registered)` as unsigned varint.
+ - If class is registered, then an unsigned varint class id will be written
next, package and class name will be
+ omitted.
+ - If current class is schema consistent, then num field will be `0` to flag
it.
+ - If current class isn't schema consistent, then num field will be the
number of compatible fields. For example,
+ users
+ can use tag id to mark some field as compatible field in schema
consistent context. In such cases, schema
+ consistent
+ fields will be serialized first, then compatible fields will be
serialized next. At deserialization, Fury will use
+ fields info of those fields which aren't annotated by tag id for
deserializing schema consistent fields, then use
+ fields info in meta for deserializing compatible fields.
+- Package name encoding(omitted when class is registered):
+ - encoding algorithm: `UTF8/ALL_TO_LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL`
+ - Header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
+ the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
+- Class name encoding(omitted when class is registered):
+ - encoding algorithm:
`UTF8/LOWER_UPPER_DIGIT_SPECIAL/FIRST_TO_LOWER_SPECIAL/ALL_TO_LOWER_SPECIAL`
+ - header: `6 bits size | 2 bits encoding flags`. The `6 bits size: 0~63`
will be used to indicate size `0~63`,
+ the value `63` the size need more byte to read, the encoding will encode
`size - 63` as a varint next.
+- Field info:
+ - header(8
+ bits): `3 bits size + 2 bits field name encoding + polymorphism flag +
nullability flag + ref tracking flag`.
+ Users can use annotation to provide those info.
+ - 2 bits field name encoding:
+ - encoding: `UTF8/ALL_TO_LOWER_SPECIAL/LOWER_UPPER_DIGIT_SPECIAL/TAG_ID`
+ - If tag id is used, i.e. field name is written by an unsigned varint
tag id. 2 bits encoding will be `11`.
+ - size of field name:
+ - The `3 bits size: 0~7` will be used to indicate length `1~7`, the
value `6` the size read more bytes,
+ the encoding will encode `size - 7` as a varint next.
+ - If encoding is `TAG_ID`, then num_bytes of field name will be used to
store tag id.
+ - ref tracking: when set to 1, ref tracking will be enabled for this field.
+ - nullability: when set to 1, this field can be null.
+ - polymorphism: when set to 1, the actual type of field will be the
declared field type even the type if
+ not `final`.
+ - type id:
+ - For registered type-consistent classes, it will be the registered class
id.
+ - Otherwise it will be encoded as `OBJECT_ID` if it isn't `final` and
`FINAL_OBJECT_ID` if it's `final`. The
+ meta for such types is written separately instead of inlining here
is to reduce meta space cost if object of
+ this type is serialized in current object graph multiple times, and
the field value may be null too.
+ - Field name: If type id is set, type id will be used instead. Otherwise
meta string encoding length and data will
+ be written instead.
+
+Field order are left as implementation details, which is not exposed to
specification, the deserialization need to
+resort fields based on Fury field comparator. In this way, fury can compute
statistics for field names or types and
+using a more compact encoding.
+
+### Other layers class meta
+
+Same encoding algorithm as the previous layer except:
+
+- header + package name:
+ - Header:
+ - If package name has been written before: `varint index + sharing
flag(set)` will be written
+ - If package name hasn't been written before:
+ - If meta string encoding is `LOWER_SPECIAL` and the length of encoded
string `<=` 64, then header will be
+ `6 bits size + encoding flag(set) + sharing flag(unset)`.
+ - Otherwise, header will
+ be `3 bits unset + 3 bits encoding flags + encoding flag(unset)
+ sharing flag(unset)`
+
+## Meta String
+
+Meta string is mainly used to encode meta strings such as class name and field
names.
+
+### Encoding Algorithms
+
+String binary encoding algorithm:
+
+| Algorithm | Pattern | Description
|
+|---------------------------|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| LOWER_SPECIAL | `a-z._$\|` | every char is written using 5
bits, `a-z`: `0b00000~0b11001`, `._$\|`: `0b11010~0b11101`, prepend one bit at
the start to indicate whether strip last char since last byte may have 7
redundant bits(1 indicates strip last char)
|
+| LOWER_UPPER_DIGIT_SPECIAL | `a-zA-Z0~9._` | every char is written using 6
bits, `a-z`: `0b00000~0b11001`, `A-Z`: `0b11010~0b110011`, `0~9`:
`0b110100~0b111101`, `._`: `0b111110~0b111111`, prepend one bit at the start
to indicate whether strip last char since last byte may have 7 redundant bits(1
indicates strip last char) |
+| UTF-8 | any chars | UTF-8 encoding
|
+
+Encoding flags:
+
+| Encoding Flag | Pattern
| Encoding Algorithm
|
+|---------------------------|---------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| LOWER_SPECIAL | every char is in `a-z._$\|`
| `LOWER_SPECIAL`
|
+| FIRST_TO_LOWER_SPECIAL | every char is in `a-z[c1,c2]` except first char
is upper case | replace first upper case char to lower case, then use
`LOWER_SPECIAL`
|
+| ALL_TO_LOWER_SPECIAL | every char is in `a-zA-Z[c1,c2]`
| replace every upper case char by `\|` + `lower case`, then use
`LOWER_SPECIAL`, use this encoding if it's smaller than Encoding
`LOWER_UPPER_DIGIT_SPECIAL` |
+| LOWER_UPPER_DIGIT_SPECIAL | every char is in `a-zA-Z[c1,c2]`
| use `LOWER_UPPER_DIGIT_SPECIAL` encoding if it's smaller than
Encoding `FIRST_TO_LOWER_SPECIAL`
|
+| UTF8 | any utf-8 char
| use `UTF-8` encoding
|
+| Compression | any utf-8 char
| lossless compression
|
+
+Notes:
+
+- For package name encoding, `c1,c2` should be `._`; For field/type name
encoding, `c1,c2` should be `_$`;
+- Depending on cases, one can choose encoding `flags + data` jointly, uses 3
bits of first byte for flags and other
+ bytes
+ for data.
+
+### Shared meta string
+
+The shared meta string format consists of header and encoded string binary.
Header of encoded string binary will be
+inlined
+in shared meta header.
+
+Header is written using little endian order, Fury can read this flag first to
determine how to deserialize the data.
+
+#### Write by data
+
+If string hasn't been written before, the data will be written as follows:
+
+```
+| unsigned varint: string binary size + 1 bit: not written before | 56 bits:
unique hash | 3 bits encoding flags + string binary |
+```
+
+If string binary size is less than `16` bytes, the hash will be omitted to
save spaces. Unique hash can be omitted too
+if caller pass a flag to disable it. In such cases, the format will be:
+
+```
+| unsigned varint: string binary size + 1 bit: not written before | 3 bits
encoding flags + string binary |
+```
+
+#### Write by ref
+
+If string has been written before, the data will be written as follows:
+
+```
+| unsigned varint: written string id + 1 bit: written before |
+```
+
+## Value Format
+
+### Basic types
+
+#### Bool
+
+- size: 1 byte
+- format: 0 for `false`, 1 for `true`
+
+#### Byte
+
+- size: 1 byte
+- format: write as pure byte.
+
+#### Short
+
+- size: 2 byte
+- byte order: little endian order
+
+#### Char
+
+- size: 2 byte
+- byte order: little endian order
+
+#### Unsigned int
+
+- size: 1~5 byte
+- Format: The most significant bit (MSB) in every byte indicates whether to
have the next byte. If first bit is set
+ i.e. `b & 0x80 == 0x80`, then
+ the next byte should be read until the first bit of the next byte is unset.
+
+#### Signed int
+
+- size: 1~5 byte
+- Format: First convert the number into positive unsigned int by `(v << 1) ^
(v >> 31)` ZigZag algorithm, then encoding
+ it as an unsigned int.
+
+#### Unsigned long
+
+- size: 1~9 byte
+- Fury PVL(Progressive Variable-length Long) Encoding:
+ - positive long format: first bit in every byte indicates whether to have
the next byte. If first bit is set
+ i.e. `b & 0x80 == 0x80`, then the next byte should be read until the
first bit is unset.
+
+#### Signed long
+
+- size: 1~9 byte
+- Fury SLI(Small long as int) Encoding:
+ - If long is in [-1073741824, 1073741823], encode as 4 bytes int: `|
little-endian: ((int) value) << 1 |`
+ - Otherwise write as 9 bytes: `| 0b1 | little-endian 8 bytes long |`
+- Fury PVL(Progressive Variable-length Long) Encoding:
+ - First convert the number into positive unsigned long by `(v << 1) ^ (v >>
63)` ZigZag algorithm to reduce cost of
+ small negative numbers, then encoding it as an unsigned long.
+
+#### Float
+
+- size: 4 byte
+- format: convert float to 4 bytes int by `Float.floatToRawIntBits`, then
write as binary by little endian order.
+
+#### Double
+
+- size: 8 byte
+- format: convert double to 8 bytes int by `Double.doubleToRawLongBits`, then
write as binary by little endian order.
+
+### String
+
+Format:
+
+```
+| header: size << 2 | 2 bits encoding flags | binary data |
+```
+
+- `size + encoding` will be concat as a long and encoded as an unsigned var
long. The little 2 bits is used for
+ encoding:
+ 0 for `latin`, 1 for `utf-16`, 2 for `utf-8`.
+- encoded string binary data based on encoding: `latin/utf-16/utf-8`.
+
+Which encoding to choose:
+
+- For JDK8: fury detect `latin` at runtime, if string is `latin` string, then
use `latin` encoding, otherwise
+ use `utf-16`.
+- For JDK9+: fury use `coder` in `String` object for encoding,
`latin`/`utf-16` will be used for encoding.
+- If the string is encoded by `utf-8`, then fury will use `utf-8` to decode
the data. But currently fury doesn't enable
+ utf-8 encoding by default for java. Cross-language string serialization of
fury uses `utf-8` by default.
+
+### Collection
+
+> All collection serializers must extend `AbstractCollectionSerializer`.
+
+Format:
+
+```
+length(unsigned varint) | collection header | elements header | elements data
+```
+
+#### Collection header
+
+- For `ArrayList/LinkedArrayList/HashSet/LinkedHashSet`, this will be empty.
+- For `TreeSet`, this will be `Comparator`
+- For subclass of `ArrayList`, this may be extra object field info.
+
+#### Elements header
+
+In most cases, all collection elements are same type and not null, elements
header will encode those homogeneous
+information to avoid the cost of writing it for every element. Specifically,
there are four kinds of information
+which will be encoded by elements header, each use one bit:
+
+- If track elements ref, use the first bit `0b1` of the header to flag it.
+- If the collection has null, use the second bit `0b10` of the header to flag
it. If ref tracking is enabled for this
+ element type, this flag is invalid.
+- If the collection element types are not declared type, use the 3rd bit
`0b100` of the header to flag it.
+- If the collection element types are different, use the 4rd bit `0b1000`
header to flag it.
+
+By default, all bits are unset, which means all elements won't track ref, all
elements are same type, not null and
+the actual element is the declared type in the custom class field.
+
+The implementation can generate different deserialization code based read
header, and look up the generated code from a
+linear map/list.
+
+#### Elements data
+
+Based on the elements header, the serialization of elements data may skip `ref
flag`/`null flag`/`element class info`.
+
+`CollectionSerializer#write/read` can be taken as an example.
+
+### Array
+
+#### Primitive array
+
+Primitive array are taken as a binary buffer, serialization will just write
the length of array size as an unsigned int,
+then copy the whole buffer into the stream.
+
+Such serialization won't compress the array. If users want to compress
primitive array, users need to register custom
+serializers for such types.
+
+#### Object array
+
+Object array is serialized using the collection format. Object component type
will be taken as collection element
+generic
+type.
+
+### Map
+
+> All Map serializers must extend `AbstractMapSerializer`.
+
+Format:
+
+```
+| length(unsigned varint) | map header | key value pairs data |
+```
+
+#### Map header
+
+- For `HashMap/LinkedHashMap`, this will be empty.
+- For `TreeMap`, this will be `Comparator`
+- For other `Map`, this may be extra object field info.
+
+#### Map Key-Value data
+
+Map iteration is too expensive, Fury won't compute the header like for
collection before since it introduce
+[considerable overhead](https://github.com/apache/fury/issues/925).
+Users can use `MapFieldInfo` annotation to provide header in advance.
Otherwise Fury will use first key-value pair to
+predict header optimistically, and update the chunk header if the prediction
failed at some pair.
+
+Fury will serialize map chunk by chunk, every chunk has 127 pairs at most.
+
+```
+| 1 byte | 1 byte | variable bytes |
++----------------+----------------+-----------------+
+| KV header | chunk size: N | N*2 objects |
+```
+
+KV header:
+
+- If track key ref, use the first bit `0b1` of the header to flag it.
+- If the key has null, use the second bit `0b10` of the header to flag it. If
ref tracking is enabled for this
+ key type, this flag is invalid.
+- If the actual key type of map is not the declared key type, use the 3rd bit
`0b100` of the header to flag it.
+- If track value ref, use the 4th bit `0b1000` of the header to flag it.
+- If the value has null, use the 5th bit `0b10000` of the header to flag it.
If ref tracking is enabled for this
+ value type, this flag is invalid.
+- If the value type of map is not the declared value type, use the 6rd bit
`0b100000` of the header to flag it.
+- If key or value is null, that key and value will be written as a separate
chunk, and chunk size writing will be
+ skipped too.
+
+If streaming write is enabled, which means Fury can't update written `chunk
size`. In such cases, map key-value data
+format will be:
+
+```
+| 1 byte | variable bytes |
++----------------+-----------------+
+| KV header | N*2 objects |
+```
+
+`KV header` will be a header marked by `MapFieldInfo` in java. The
implementation can generate different deserialization
+code based read header, and look up the generated code from a linear map/list.
+
+### Enum
+
+Enums are serialized as an unsigned var int. If the order of enum values
change, the deserialized enum value may not be
+the value users expect. In such cases, users must register enum serializer by
make it write enum value as an enumerated
+string with unique hash disabled.
+
+### Object
+
+Object means object of `pojo/struct/bean/record` type.
+Object will be serialized by writing its fields data in fury order.
+
+Depending on schema compatibility, objects will have different formats.
+
+#### Field order
+
+Field will be ordered as following, every group of fields will have its own
order:
+
+- primitive fields: larger size type first, smaller later, variable size type
last.
+- boxed primitive fields: same order as primitive fields
+- final fields: same type together, then sorted by field name
lexicographically.
+- collection fields: same order as final fields
+- map fields: same order as final fields
+- other fields: same order as final fields
+
+#### Schema consistent
+
+Object fields will be serialized one by one using following format:
+
+```
+Primitive field value:
+| var bytes |
++----------------+
+| value data |
++----------------+
+Boxed field value:
+| one byte | var bytes |
++-----------+---------------+
+| null flag | field value |
++-----------+---------------+
+field value of final type with ref tracking:
+| var bytes | var objects |
++-----------+-------------+
+| ref meta | value data |
++-----------+-------------+
+field value of final type without ref tracking:
+| one byte | var objects |
++-----------+-------------+
+| null flag | field value |
++-----------+-------------+
+field value of non-final type with ref tracking:
+| one byte | var bytes | var objects |
++-----------+-------------+-------------+
+| ref meta | class meta | value data |
++-----------+-------------+-------------+
+field value of non-final type without ref tracking:
+| one byte | var bytes | var objects |
++-----------+------------+------------+
+| null flag | class meta | value data |
++-----------+------------+------------+
+```
+
+#### Schema evolution
+
+Schema evolution have similar format as schema consistent mode for object
except:
+
+- For this object type itself, `schema consistent` mode will write class by
id/name, but `schema evolution` mode will
+ write class field names, types and other meta too, see [Class
meta](#class-meta).
+- Class meta of `final custom type` needs to be written too, because peers may
not have this class defined.
+
+### Class
+
+Class will be serialized using class meta format.
+
+## Implementation guidelines
+
+- Try to merge multiple bytes into an int/long write before writing to reduce
memory IO and bound check cost.
+- Read multiple bytes as an int/long, then split into multiple bytes to reduce
memory IO and bound check cost.
+- Try to use one varint/long to write flags and length together to save one
byte cost and reduce memory io.
+- Condition branches are less expensive compared to memory IO cost unless
there are too many branches.
diff --git a/versioned_docs/version-0.10/specification/row_format_spec.md
b/versioned_docs/version-0.10/specification/row_format_spec.md
new file mode 100644
index 00000000..eefd9d97
--- /dev/null
+++ b/versioned_docs/version-0.10/specification/row_format_spec.md
@@ -0,0 +1,24 @@
+---
+title: Fury Row Format
+sidebar_position: 2
+id: fury_row_format_spec
+license: |
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+---
+
+## Row Format
+
+Coming soon
diff --git a/docs/specification/xlang_serialization_spec.md
b/versioned_docs/version-0.10/specification/xlang_serialization_spec.md
similarity index 99%
copy from docs/specification/xlang_serialization_spec.md
copy to versioned_docs/version-0.10/specification/xlang_serialization_spec.md
index 60925476..8f15e542 100644
--- a/docs/specification/xlang_serialization_spec.md
+++ b/versioned_docs/version-0.10/specification/xlang_serialization_spec.md
@@ -151,7 +151,7 @@ types.
### Type mapping
-See [Type mapping](../guide/xlang_type_mapping.md)
+See [Type mapping](../docs/guide/xlang_type_mapping.md)
## Spec overview
diff --git a/versioned_sidebars/version-0.10-sidebars.json
b/versioned_sidebars/version-0.10-sidebars.json
new file mode 100644
index 00000000..b14cd02a
--- /dev/null
+++ b/versioned_sidebars/version-0.10-sidebars.json
@@ -0,0 +1,20 @@
+{
+ "docsSidebar": [
+ {
+ "type": "autogenerated",
+ "dirName": "docs"
+ }
+ ],
+ "specificationSidebar": [
+ {
+ "type": "autogenerated",
+ "dirName": "specification"
+ }
+ ],
+ "communitySidebar": [
+ {
+ "type": "autogenerated",
+ "dirName": "community"
+ }
+ ]
+}
diff --git a/versions.json b/versions.json
new file mode 100644
index 00000000..384ee231
--- /dev/null
+++ b/versions.json
@@ -0,0 +1,3 @@
+[
+ "0.10"
+]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]