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

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new b09fa85  deploy: 21c933a9419c6bf27415d5c752970d4d5f6d4267
b09fa85 is described below

commit b09fa85bd0964f7eb60fdd1d5917f93b6d112978
Author: Fokko <[email protected]>
AuthorDate: Fri Jan 26 11:05:48 2024 +0000

    deploy: 21c933a9419c6bf27415d5c752970d4d5f6d4267
---
 404.html                                 |   2 +-
 CONTRIBUTING.html                        |  12 +-
 install.html => download.html            |  17 +-
 index.html                               |   2 +-
 install.html                             |   6 +-
 introduction.html                        |   2 +-
 print.html                               | 463 +++++++++++++++++++++++++-
 install.html => reference/setup_gpg.html | 169 ++++++++--
 release.html                             | 546 +++++++++++++++++++++++++++++++
 searchindex.js                           |   2 +-
 searchindex.json                         |   2 +-
 11 files changed, 1164 insertions(+), 59 deletions(-)

diff --git a/404.html b/404.html
index 2fea3b3..7c8ca0e 100644
--- a/404.html
+++ b/404.html
@@ -89,7 +89,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded "><a 
href="download.html">Download</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.ht [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
diff --git a/CONTRIBUTING.html b/CONTRIBUTING.html
index 1df1291..cb613f1 100644
--- a/CONTRIBUTING.html
+++ b/CONTRIBUTING.html
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.html" class="active">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded "><a 
href="download.html">Download</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.ht [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
@@ -284,10 +284,13 @@ cargo 1.69.0 (6e9a83356 2023-04-12)
 
                     <nav class="nav-wrapper" aria-label="Page navigation">
                         <!-- Mobile navigation buttons -->
-                            <a rel="prev" href="install.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
+                            <a rel="prev" href="download.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
                                 <i class="fa fa-angle-left"></i>
                             </a>
 
+                            <a rel="next prefetch" href="release.html" 
class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
+                                <i class="fa fa-angle-right"></i>
+                            </a>
 
                         <div style="clear: both"></div>
                     </nav>
@@ -295,10 +298,13 @@ cargo 1.69.0 (6e9a83356 2023-04-12)
             </div>
 
             <nav class="nav-wide-wrapper" aria-label="Page navigation">
-                    <a rel="prev" href="install.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
+                    <a rel="prev" href="download.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
                         <i class="fa fa-angle-left"></i>
                     </a>
 
+                    <a rel="next prefetch" href="release.html" 
class="nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
+                        <i class="fa fa-angle-right"></i>
+                    </a>
             </nav>
 
         </div>
diff --git a/install.html b/download.html
similarity index 90%
copy from install.html
copy to download.html
index 1c0d401..ad15158 100644
--- a/install.html
+++ b/download.html
@@ -3,7 +3,7 @@
     <head>
         <!-- Book generated using mdBook -->
         <meta charset="UTF-8">
-        <title>Install - Iceberg Rust</title>
+        <title>Download - Iceberg Rust</title>
 
 
         <!-- Custom HTML head -->
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html" class="active">Install</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a 
href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded "><a 
href="download.html" class="active">Download</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a href=" [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
@@ -150,7 +150,7 @@
                         <a href="https://github.com/apache/iceberg-rust"; 
title="Git repository" aria-label="Git repository">
                             <i id="git-repository-button" class="fa 
fa-github"></i>
                         </a>
-                        <a 
href="https://github.com/apache/iceberg-rust/edit/main/website/src/install.md"; 
title="Suggest an edit" aria-label="Suggest an edit">
+                        <a 
href="https://github.com/apache/iceberg-rust/edit/main/website/src/download.md"; 
title="Suggest an edit" aria-label="Suggest an edit">
                             <i id="git-edit-button" class="fa fa-edit"></i>
                         </a>
 
@@ -197,19 +197,12 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<h1 id="install"><a class="header" href="#install">Install</a></h1>
-<p>Add <code>iceberg</code> into <code>Cargo.toml</code> dependencies:</p>
-<pre><code class="language-toml">iceberg = &quot;0.2.0&quot;
-</code></pre>
-<p>iceberg is under active development, you may want to use the git version 
instead:</p>
-<pre><code class="language-toml">iceberg = { git = 
&quot;https://github.com/apache/iceberg-rust&quot;, rev = 
&quot;commit-hash&quot; }
-</code></pre>
 
                     </main>
 
                     <nav class="nav-wrapper" aria-label="Page navigation">
                         <!-- Mobile navigation buttons -->
-                            <a rel="prev" href="introduction.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
+                            <a rel="prev" href="install.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
                                 <i class="fa fa-angle-left"></i>
                             </a>
 
@@ -223,7 +216,7 @@
             </div>
 
             <nav class="nav-wide-wrapper" aria-label="Page navigation">
-                    <a rel="prev" href="introduction.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
+                    <a rel="prev" href="install.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
                         <i class="fa fa-angle-left"></i>
                     </a>
 
diff --git a/index.html b/index.html
index 0f47584..9f077f5 100644
--- a/index.html
+++ b/index.html
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html" class="active">Introduction</a></li><li 
class="chapter-item expanded affix "><li class="part-title">User Guide</li><li 
class="chapter-item expanded "><a href="install.html">Install</a></li><li 
class="chapter-item expanded affix "><li class="part-title">Developer 
Guide</li><li class="chapter-item expanded "><a 
href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html" class="active">Introduction</a></li><li 
class="chapter-item expanded affix "><li class="part-title">User Guide</li><li 
class="chapter-item expanded "><a href="install.html">Install</a></li><li 
class="chapter-item expanded "><a href="download.html">Download</a></li><li 
class="chapter-item expanded affix "><li class="part-title">Developer 
Guide</li><li class="chapter-item expanded "><a href=" [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
diff --git a/install.html b/install.html
index 1c0d401..57bb206 100644
--- a/install.html
+++ b/install.html
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html" class="active">Install</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a 
href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html" class="active">Install</a></li><li class="chapter-item 
expanded "><a href="download.html">Download</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a href=" [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
@@ -213,7 +213,7 @@
                                 <i class="fa fa-angle-left"></i>
                             </a>
 
-                            <a rel="next prefetch" href="CONTRIBUTING.html" 
class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
+                            <a rel="next prefetch" href="download.html" 
class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
                                 <i class="fa fa-angle-right"></i>
                             </a>
 
@@ -227,7 +227,7 @@
                         <i class="fa fa-angle-left"></i>
                     </a>
 
-                    <a rel="next prefetch" href="CONTRIBUTING.html" 
class="nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
+                    <a rel="next prefetch" href="download.html" 
class="nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
                         <i class="fa fa-angle-right"></i>
                     </a>
             </nav>
diff --git a/introduction.html b/introduction.html
index 0f47584..9f077f5 100644
--- a/introduction.html
+++ b/introduction.html
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html" class="active">Introduction</a></li><li 
class="chapter-item expanded affix "><li class="part-title">User Guide</li><li 
class="chapter-item expanded "><a href="install.html">Install</a></li><li 
class="chapter-item expanded affix "><li class="part-title">Developer 
Guide</li><li class="chapter-item expanded "><a 
href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html" class="active">Introduction</a></li><li 
class="chapter-item expanded affix "><li class="part-title">User Guide</li><li 
class="chapter-item expanded "><a href="install.html">Install</a></li><li 
class="chapter-item expanded "><a href="download.html">Download</a></li><li 
class="chapter-item expanded affix "><li class="part-title">Developer 
Guide</li><li class="chapter-item expanded "><a href=" [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
diff --git a/print.html b/print.html
index 9b292e4..b0df82c 100644
--- a/print.html
+++ b/print.html
@@ -89,7 +89,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded "><a 
href="download.html">Download</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.ht [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
@@ -240,6 +240,24 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
+<div style="break-before: page; page-break-before: always;"></div><!--
+  ~ 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.
+-->
 <h1 id="contributing"><a class="header" 
href="#contributing">Contributing</a></h1>
 <p>First, thank you for contributing to Iceberg Rust! The goal of this 
document is to provide everything you need to start contributing to 
iceberg-rust. The following TOC is sorted progressively, starting with the 
basics and expanding into more specifics.</p>
 <ul>
@@ -322,6 +340,449 @@ cargo 1.69.0 (6e9a83356 2023-04-12)
 </ul>
 <h2 id="code-of-conduct"><a class="header" href="#code-of-conduct">Code of 
Conduct</a></h2>
 <p>We expect all community members to follow our <a 
href="https://www.apache.org/foundation/policies/conduct.html";>Code of 
Conduct</a>.</p>
+<div style="break-before: page; page-break-before: always;"></div><!--
+  ~ 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.
+-->
+<p>This document mainly introduces how the release manager releases a new 
version in accordance with the Apache requirements.</p>
+<h2 id="introduction"><a class="header" 
href="#introduction">Introduction</a></h2>
+<p><code>Source Release</code> is the key point which Apache values, and is 
also necessary for an ASF release.</p>
+<p>Please remember that publishing software has legal consequences.</p>
+<p>This guide complements the foundation-wide policies and guides:</p>
+<ul>
+<li><a href="https://www.apache.org/legal/release-policy.html";>Release 
Policy</a></li>
+<li><a href="https://infra.apache.org/release-distribution";>Release 
Distribution Policy</a></li>
+<li><a href="https://infra.apache.org/release-publishing.html";>Release 
Creation Process</a></li>
+</ul>
+<h2 id="some-terminology-of-release"><a class="header" 
href="#some-terminology-of-release">Some Terminology of release</a></h2>
+<p>In the context of our release, we use several terms to describe different 
stages of the release process.</p>
+<p>Here's an explanation of these terms:</p>
+<ul>
+<li><code>iceberg_version</code>: the version of Iceberg to be released, like 
<code>0.2.0</code>.</li>
+<li><code>release_version</code>: the version of release candidate, like 
<code>0.2.0-rc.1</code>.</li>
+<li><code>rc_version</code>: the minor version for voting round, like 
<code>rc.1</code>.</li>
+</ul>
+<h2 id="preparation"><a class="header" href="#preparation">Preparation</a></h2>
+<div class="warning">
+<p>This section is the requirements for individuals who are new to the role of 
release manager.</p>
+</div>
+<p>Refer to <a href="reference/setup_gpg.html">Setup GPG Key</a> to make sure 
the GPG key has been set up.</p>
+<h2 id="start-a-tracking-issue-about-the-next-release"><a class="header" 
href="#start-a-tracking-issue-about-the-next-release">Start a tracking issue 
about the next release</a></h2>
+<p>Start a tracking issue on GitHub for the upcoming release to track all 
tasks that need to be completed.</p>
+<p>Title:</p>
+<pre><code>Tracking issues of Iceberg Rust ${iceberg_version} Release
+</code></pre>
+<p>Content:</p>
+<pre><code class="language-markdown">This issue is used to track tasks of the 
iceberg rust ${iceberg_version} release.
+
+## Tasks
+
+### Blockers
+
+&gt; Blockers are the tasks that must be completed before the release.
+
+### Build Release
+
+#### GitHub Side
+
+- [ ] Bump version in project
+- [ ] Update docs
+- [ ] Generate dependencies list
+- [ ] Push release candidate tag to GitHub
+
+#### ASF Side
+
+- [ ] Create an ASF Release
+- [ ] Upload artifacts to the SVN dist repo
+
+### Voting
+
+- [ ] Start VOTE at iceberg community
+
+### Official Release
+
+- [ ] Push the release git tag
+- [ ] Publish artifacts to SVN RELEASE branch
+- [ ] Change Iceberg Rust Website download link
+- [ ] Send the announcement
+
+For details of each step, please refer to: 
https://rust.iceberg.apache.org/release
+</code></pre>
+<h2 id="github-side"><a class="header" href="#github-side">GitHub Side</a></h2>
+<h3 id="bump-version-in-project"><a class="header" 
href="#bump-version-in-project">Bump version in project</a></h3>
+<p>Bump all components' version in the project to the new iceberg version.
+Please note that this version is the exact version of the release, not the 
release candidate version.</p>
+<ul>
+<li>rust core: bump version in <code>Cargo.toml</code></li>
+</ul>
+<h3 id="update-docs"><a class="header" href="#update-docs">Update docs</a></h3>
+<ul>
+<li>Update <code>CHANGELOG.md</code>, refer to <a 
href="reference/generate_release_note.html">Generate Release Note</a> for more 
information.</li>
+</ul>
+<h3 id="generate-dependencies-list"><a class="header" 
href="#generate-dependencies-list">Generate dependencies list</a></h3>
+<p>Download and setup <code>cargo-deny</code>. You can refer to <a 
href="https://embarkstudios.github.io/cargo-deny/cli/index.html";>cargo-deny</a>.</p>
+<p>Running <code>python3 ./scripts/dependencies.py generate</code> to update 
the dependencies list of every package.</p>
+<h3 id="push-release-candidate-tag"><a class="header" 
href="#push-release-candidate-tag">Push release candidate tag</a></h3>
+<p>After bump version PR gets merged, we can create a GitHub release for the 
release candidate:</p>
+<ul>
+<li>Create a tag at <code>main</code> branch on the <code>Bump Version</code> 
/ <code>Patch up version</code> commit: <code>git tag -s 
&quot;v0.2.0-rc.1&quot;</code>, please correctly check out the corresponding 
commit instead of directly tagging on the main branch.</li>
+<li>Push tags to GitHub: <code>git push --tags</code>.</li>
+</ul>
+<h2 id="asf-side"><a class="header" href="#asf-side">ASF Side</a></h2>
+<p>If any step in the ASF Release process fails and requires code changes,
+we will abandon that version and prepare for the next one.
+Our release page will only display ASF releases instead of GitHub Releases.</p>
+<h3 id="create-an-asf-release"><a class="header" 
href="#create-an-asf-release">Create an ASF Release</a></h3>
+<p>After GitHub Release has been created, we can start to create ASF 
Release.</p>
+<ul>
+<li>Checkout to released tag. (e.g. <code>git checkout v0.2.0-rc.1</code>, tag 
is created in the previous step)</li>
+<li>Use the release script to create a new release: 
<code>ICEBERG_VERSION=&lt;iceberg_version&gt; 
ICEBERG_VERSION_RC=&lt;rc_version&gt; ./scripts/release.sh</code>(e.g. 
<code>ICEBERG_VERSION=0.2.0 ICEBERG_VERSION_RC=rc.1 ./scripts/release.sh</code>)
+<ul>
+<li>This script will do the following things:
+<ul>
+<li>Create a new branch named by <code>release-${release_version}</code> from 
the tag</li>
+<li>Generate the release candidate artifacts under <code>dist</code>, 
including:
+<ul>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz</code></li>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz.asc</code></li>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz.sha512</code></li>
+</ul>
+</li>
+<li>Check the header of the source code. This step needs docker to run.</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>Push the newly created branch to GitHub</li>
+</ul>
+<p>This script will create a new release under <code>dist</code>.</p>
+<p>For example:</p>
+<pre><code class="language-shell">&gt; tree dist
+dist
+├── apache-iceberg-rust-0.2.0-src.tar.gz
+├── apache-iceberg-rust-0.2.0-src.tar.gz.asc
+└── apache-iceberg-rust-0.2.0-src.tar.gz.sha512
+</code></pre>
+<h3 id="upload-artifacts-to-the-svn-dist-repo"><a class="header" 
href="#upload-artifacts-to-the-svn-dist-repo">Upload artifacts to the SVN dist 
repo</a></h3>
+<p>SVN is required for this step.</p>
+<p>The svn repository of the dev branch is: <a 
href="https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust";>https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust</a></p>
+<p>First, checkout Iceberg to local directory:</p>
+<pre><code class="language-shell"># 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/iceberg/iceberg-rust 
iceberg-dist-dev
+</code></pre>
+<p>Then, upload the artifacts:</p>
+<blockquote>
+<p>The <code>${release_version}</code> here should be like 
<code>0.2.0-rc.1</code></p>
+</blockquote>
+<pre><code class="language-shell">cd iceberg-dist-dev
+# create a directory named by version
+mkdir ${release_version}
+# copy source code and signature package to the versioned directory
+cp ${repo_dir}/dist/* ${release_version}/
+# check svn status
+svn status
+# add to svn
+svn add ${release_version}
+# check svn status
+svn status
+# commit to SVN remote server
+svn commit -m &quot;Prepare for ${release_version}&quot;
+</code></pre>
+<p>Visit <a 
href="https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/";>https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/</a>
 to make sure the artifacts are uploaded correctly.</p>
+<h3 id="rescue"><a class="header" href="#rescue">Rescue</a></h3>
+<p>If you accidentally published wrong or unexpected artifacts, like wrong 
signature files, wrong sha256 files,
+please cancel the release for the current <code>release_version</code>,
+<em>increase th RC counting</em> and re-initiate a release with the new 
<code>release_version</code>.
+And remember to delete the wrong artifacts from the SVN dist repo.</p>
+<h2 id="voting"><a class="header" href="#voting">Voting</a></h2>
+<p>Iceberg Community Vote should send email to: <a 
href="mailto:[email protected]";>[email protected]</a>:</p>
+<p>Title:</p>
+<pre><code>[VOTE] Release Apache Iceberg Rust ${release_version} RC1
+</code></pre>
+<p>Content:</p>
+<pre><code>Hello, Apache Iceberg Rust Community,
+
+This is a call for a vote to release Apache Iceberg rust version 
${iceberg_version}.
+
+The tag to be voted on is ${iceberg_version}.
+
+The release candidate:
+
+https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version}/
+
+Keys to verify the release candidate:
+
+https://downloads.apache.org/iceberg/KEYS
+
+Git tag for the release:
+
+https://github.com/apache/iceberg-rust/releases/tag/${release_version}
+
+Please download, verify, and test.
+
+The VOTE will be open for at least 72 hours and until the necessary
+number of votes are reached.
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about Apache Iceberg, please see https://rust.iceberg.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
+
+More detailed checklist please refer to:
+https://github.com/apache/iceberg-rust/tree/main/scripts
+
+To compile from source, please refer to:
+https://github.com/apache/iceberg-rust/blob/main/CONTRIBUTING.md
+
+Here is a Python script in release to help you verify the release candidate:
+
+./scripts/verify.py
+
+Thanks
+
+${name}
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/c211gqq2yl15jbxqk4rcnq1bdqltjm5l";>https://lists.apache.org/thread/c211gqq2yl15jbxqk4rcnq1bdqltjm5l</a></p>
+<p>After at least 3 <code>+1</code> binding vote (from Iceberg PMC member), 
claim the vote result:</p>
+<p>Title:</p>
+<pre><code>[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} RC1
+</code></pre>
+<p>Content:</p>
+<pre><code>Hello, Apache Iceberg Rust Community,
+
+The vote to release Apache Iceberg Rust ${release_version} has passed.
+
+The vote PASSED with 3 +1 binding and 1 +1 non-binding votes, no +0 or -1 
votes:
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Non-Binding votes:
+
+- aaa
+
+Vote thread: ${vote_thread_url}
+
+Thanks
+
+${name}
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6";>https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6</a></p>
+<h2 id="official-release"><a class="header" href="#official-release">Official 
Release</a></h2>
+<h3 id="push-the-release-git-tag"><a class="header" 
href="#push-the-release-git-tag">Push the release git tag</a></h3>
+<pre><code class="language-shell"># Checkout the tags that passed VOTE
+git checkout ${release_version}
+# Tag with the iceberg version
+git tag -s ${iceberg_version}
+# Push tags to github to trigger releases
+git push origin ${iceberg_version}
+</code></pre>
+<h3 id="publish-artifacts-to-svn-release-branch"><a class="header" 
href="#publish-artifacts-to-svn-release-branch">Publish artifacts to SVN 
RELEASE branch</a></h3>
+<pre><code class="language-shell">svn mv 
https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version} 
https://dist.apache.org/repos/dist/release/iceberg/iceberg-rust/${iceberg_version}
 -m &quot;Release ${iceberg_version}&quot;
+</code></pre>
+<h3 id="change-iceberg-rust-website-download-link"><a class="header" 
href="#change-iceberg-rust-website-download-link">Change Iceberg Rust Website 
download link</a></h3>
+<p>Update the download link in <code>website/src/download.md</code> to the new 
release version.</p>
+<h3 id="create-a-github-release"><a class="header" 
href="#create-a-github-release">Create a GitHub Release</a></h3>
+<ul>
+<li>Click <a 
href="https://github.com/apache/iceberg-rust/releases/new";>here</a> to create a 
new release.</li>
+<li>Pick the git tag of this release version from the dropdown menu.</li>
+<li>Make sure the branch target is <code>main</code>.</li>
+<li>Generate the release note by clicking the <code>Generate release 
notes</code> button.</li>
+<li>Add the release note from every component's <code>upgrade.md</code> if 
there are breaking changes before the content generated by GitHub. Check them 
carefully.</li>
+<li>Publish the release.</li>
+</ul>
+<h3 id="send-the-announcement"><a class="header" 
href="#send-the-announcement">Send the announcement</a></h3>
+<p>Send the release announcement to <code>[email protected]</code> and 
CC <code>[email protected]</code>.</p>
+<p>Instead of adding breaking changes, let's include the new features as 
&quot;notable changes&quot; in the announcement.</p>
+<p>Title:</p>
+<pre><code>[ANNOUNCE] Release Apache Iceberg Rust ${iceberg_version}
+</code></pre>
+<p>Content:</p>
+<pre><code>Hi all,
+
+The Apache Iceberg Rust community is pleased to announce
+that Apache Iceberg Rust ${iceberg_version} has been released!
+
+Iceberg is a data access layer that allows users to easily and efficiently
+retrieve data from various storage services in a unified way.
+
+The notable changes since ${iceberg_version} include:
+1. xxxxx
+2. yyyyyy
+3. zzzzzz
+
+Please refer to the change log for the complete list of changes:
+https://github.com/apache/iceberg-rust/releases/tag/v${iceberg_version}
+
+Apache Iceberg Rust website: https://rust.iceberg.apache.org/
+
+Download Links: https://rust.iceberg.apache.org/download
+
+Iceberg Resources:
+- Issue: https://github.com/apache/iceberg-rust/issues
+- Mailing list: [email protected]
+
+Thanks
+On behalf of Apache Iceberg Community
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s";>https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s</a></p>
+<div style="break-before: page; page-break-before: always;"></div><!--
+  ~ 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.
+-->
+<h1 id="setup-gpg-key"><a class="header" href="#setup-gpg-key">Setup GPG 
key</a></h1>
+<blockquote>
+<p>This section is a brief from the <a 
href="https://infra.apache.org/openpgp.html";>Cryptography with OpenPGP</a> 
guideline.</p>
+</blockquote>
+<h2 id="install-gpg"><a class="header" href="#install-gpg">Install GPG</a></h2>
+<p>For more details, please refer to <a 
href="https://www.gnupg.org/download/index.html";>GPG official website</a>. Here 
shows one approach to install GPG with <code>apt</code>:</p>
+<pre><code class="language-shell">sudo apt install gnupg2
+</code></pre>
+<h2 id="generate-gpg-key"><a class="header" href="#generate-gpg-key">Generate 
GPG Key</a></h2>
+<p>Attentions:</p>
+<ul>
+<li>Name is best to keep consistent with your full name of Apache ID;</li>
+<li>Email should be the Apache email;</li>
+<li>Name is best to only use English to avoid garbled.</li>
+</ul>
+<p>Run <code>gpg --full-gen-key</code> and complete the generation 
interactively:</p>
+<pre><code class="language-shell">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
+      &lt;n&gt;  = key expires in n days
+      &lt;n&gt;w = key expires in n weeks
+      &lt;n&gt;m = key expires in n months
+      &lt;n&gt;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: Hulk Lin               # input your name
+Email address: [email protected]    # input your email
+Comment:                          # input some annotations, optional
+You selected this USER-ID:
+    &quot;Hulk &lt;[email protected]&gt;&quot;
+
+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: _______________________________          │
+│                                                      │
+│       &lt;OK&gt;                              &lt;Cancel&gt;     │
+└──────────────────────────────────────────────────────┘
+# 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/hulk/.gnupg/openpgp-revocs.d/F77B887A4F25A9468C513E9AA3008E49B00F626B.rev'
+public and secret key created and signed.
+
+pub   rsa4096 2022-07-12 [SC]
+      F77B887A4F25A9468C513E9AA3008E49B00F626B
+uid           [ultimate] hulk &lt;[email protected]&gt;
+sub   rsa4096 2022-07-12 [E]
+</code></pre>
+<h2 id="upload-your-key-to-public-gpg-keyserver"><a class="header" 
href="#upload-your-key-to-public-gpg-keyserver">Upload your key to public GPG 
keyserver</a></h2>
+<p>Firstly, list your key:</p>
+<pre><code class="language-shell">gpg --list-keys
+</code></pre>
+<p>The output is like:</p>
+<pre><code class="language-shell">-------------------------------
+pub   rsa4096 2022-07-12 [SC]
+      F77B887A4F25A9468C513E9AA3008E49B00F626B
+uid           [ultimate] hulk &lt;[email protected]&gt;
+sub   rsa4096 2022-07-12 [E]
+</code></pre>
+<p>Then, send your key id to key server:</p>
+<pre><code class="language-shell">gpg --keyserver keys.openpgp.org --send-key 
&lt;key-id&gt; # e.g., F77B887A4F25A9468C513E9AA3008E49B00F626B
+</code></pre>
+<p>Among them, <code>keys.openpgp.org</code> is a randomly selected keyserver, 
you can use <code>keyserver.ubuntu.com</code> or any other full-featured 
keyserver.</p>
+<h2 id="check-whether-the-key-is-created-successfully"><a class="header" 
href="#check-whether-the-key-is-created-successfully">Check whether the key is 
created successfully</a></h2>
+<p>Uploading takes about one minute; after that, you can check by your email 
at the corresponding keyserver.</p>
+<p>Uploading keys to the keyserver is mainly for joining a <a 
href="https://infra.apache.org/release-signing.html#web-of-trust";>Web of 
Trust</a>.</p>
+<h2 id="add-your-gpg-public-key-to-the-keys-document"><a class="header" 
href="#add-your-gpg-public-key-to-the-keys-document">Add your GPG public key to 
the KEYS document</a></h2>
+<p>:::info</p>
+<p><code>SVN</code> is required for this step.</p>
+<p>:::</p>
+<p>The svn repository of the release branch is: 
https://dist.apache.org/repos/dist/release/iceberg</p>
+<p>Please always add the public key to KEYS in the release branch:</p>
+<pre><code class="language-shell">svn co 
https://dist.apache.org/repos/dist/release/iceberg iceberg-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 iceberg-dist
+(gpg --list-sigs [email protected] &amp;&amp; gpg --export --armor 
[email protected]) &gt;&gt; KEYS # Append your key to the KEYS file
+svn add .   # It is not needed if the KEYS document exists before.
+svn ci -m &quot;add gpg key for YOUR_NAME&quot; # Later on, if you are asked 
to enter a username and password, just use your apache username and password.
+</code></pre>
+<h2 id="upload-the-gpg-public-key-to-your-github-account"><a class="header" 
href="#upload-the-gpg-public-key-to-your-github-account">Upload the GPG public 
key to your GitHub account</a></h2>
+<ul>
+<li>Enter https://github.com/settings/keys to add your GPG key.</li>
+<li>Please remember to bind the email address used in the GPG key to your 
GitHub account (https://github.com/settings/emails) if you find 
&quot;unverified&quot; after adding it.</li>
+</ul>
 
                     </main>
 
diff --git a/install.html b/reference/setup_gpg.html
similarity index 51%
copy from install.html
copy to reference/setup_gpg.html
index 1c0d401..d6782bb 100644
--- a/install.html
+++ b/reference/setup_gpg.html
@@ -3,7 +3,7 @@
     <head>
         <!-- Book generated using mdBook -->
         <meta charset="UTF-8">
-        <title>Install - Iceberg Rust</title>
+        <title>Setup GPG key - Iceberg Rust</title>
 
 
         <!-- Custom HTML head -->
@@ -12,21 +12,21 @@
         <meta name="viewport" content="width=device-width, initial-scale=1">
         <meta name="theme-color" content="#ffffff">
 
-        <link rel="icon" href="favicon.svg">
-        <link rel="shortcut icon" href="favicon.png">
-        <link rel="stylesheet" href="css/variables.css">
-        <link rel="stylesheet" href="css/general.css">
-        <link rel="stylesheet" href="css/chrome.css">
-        <link rel="stylesheet" href="css/print.css" media="print">
+        <link rel="icon" href="../favicon.svg">
+        <link rel="shortcut icon" href="../favicon.png">
+        <link rel="stylesheet" href="../css/variables.css">
+        <link rel="stylesheet" href="../css/general.css">
+        <link rel="stylesheet" href="../css/chrome.css">
+        <link rel="stylesheet" href="../css/print.css" media="print">
 
         <!-- Fonts -->
-        <link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
-        <link rel="stylesheet" href="fonts/fonts.css">
+        <link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
+        <link rel="stylesheet" href="../fonts/fonts.css">
 
         <!-- Highlight.js Stylesheets -->
-        <link rel="stylesheet" href="highlight.css">
-        <link rel="stylesheet" href="tomorrow-night.css">
-        <link rel="stylesheet" href="ayu-highlight.css">
+        <link rel="stylesheet" href="../highlight.css">
+        <link rel="stylesheet" href="../tomorrow-night.css">
+        <link rel="stylesheet" href="../ayu-highlight.css">
 
         <!-- Custom theme stylesheets -->
 
@@ -35,7 +35,7 @@
     <div id="body-container">
         <!-- Provide site root to javascript -->
         <script>
-            var path_to_root = "";
+            var path_to_root = "../";
             var default_theme = window.matchMedia("(prefers-color-scheme: 
dark)").matches ? "navy" : "light";
         </script>
 
@@ -88,7 +88,7 @@
 
         <nav id="sidebar" class="sidebar" aria-label="Table of contents">
             <div class="sidebar-scrollbox">
-                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html" class="active">Install</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a 
href="CONTRIBUTING.html">Contributing</a></li></ol>
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="../introduction.html">Introduction</a></li><li class="chapter-item 
expanded affix "><li class="part-title">User Guide</li><li class="chapter-item 
expanded "><a href="../install.html">Install</a></li><li class="chapter-item 
expanded "><a href="../download.html">Download</a></li><li class="chapter-item 
expanded affix "><li class="part-title">Developer Guide</li><li 
class="chapter-item expanded "><a href="../CON [...]
             </div>
             <div id="sidebar-resize-handle" class="sidebar-resize-handle">
                 <div class="sidebar-resize-indicator"></div>
@@ -144,13 +144,13 @@
                     <h1 class="menu-title">Iceberg Rust</h1>
 
                     <div class="right-buttons">
-                        <a href="print.html" title="Print this book" 
aria-label="Print this book">
+                        <a href="../print.html" title="Print this book" 
aria-label="Print this book">
                             <i id="print-button" class="fa fa-print"></i>
                         </a>
                         <a href="https://github.com/apache/iceberg-rust"; 
title="Git repository" aria-label="Git repository">
                             <i id="git-repository-button" class="fa 
fa-github"></i>
                         </a>
-                        <a 
href="https://github.com/apache/iceberg-rust/edit/main/website/src/install.md"; 
title="Suggest an edit" aria-label="Suggest an edit">
+                        <a 
href="https://github.com/apache/iceberg-rust/edit/main/website/src/reference/setup_gpg.md";
 title="Suggest an edit" aria-label="Suggest an edit">
                             <i id="git-edit-button" class="fa fa-edit"></i>
                         </a>
 
@@ -197,25 +197,127 @@
   ~ specific language governing permissions and limitations
   ~ under the License.
 -->
-<h1 id="install"><a class="header" href="#install">Install</a></h1>
-<p>Add <code>iceberg</code> into <code>Cargo.toml</code> dependencies:</p>
-<pre><code class="language-toml">iceberg = &quot;0.2.0&quot;
+<h1 id="setup-gpg-key"><a class="header" href="#setup-gpg-key">Setup GPG 
key</a></h1>
+<blockquote>
+<p>This section is a brief from the <a 
href="https://infra.apache.org/openpgp.html";>Cryptography with OpenPGP</a> 
guideline.</p>
+</blockquote>
+<h2 id="install-gpg"><a class="header" href="#install-gpg">Install GPG</a></h2>
+<p>For more details, please refer to <a 
href="https://www.gnupg.org/download/index.html";>GPG official website</a>. Here 
shows one approach to install GPG with <code>apt</code>:</p>
+<pre><code class="language-shell">sudo apt install gnupg2
 </code></pre>
-<p>iceberg is under active development, you may want to use the git version 
instead:</p>
-<pre><code class="language-toml">iceberg = { git = 
&quot;https://github.com/apache/iceberg-rust&quot;, rev = 
&quot;commit-hash&quot; }
+<h2 id="generate-gpg-key"><a class="header" href="#generate-gpg-key">Generate 
GPG Key</a></h2>
+<p>Attentions:</p>
+<ul>
+<li>Name is best to keep consistent with your full name of Apache ID;</li>
+<li>Email should be the Apache email;</li>
+<li>Name is best to only use English to avoid garbled.</li>
+</ul>
+<p>Run <code>gpg --full-gen-key</code> and complete the generation 
interactively:</p>
+<pre><code class="language-shell">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
+      &lt;n&gt;  = key expires in n days
+      &lt;n&gt;w = key expires in n weeks
+      &lt;n&gt;m = key expires in n months
+      &lt;n&gt;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: Hulk Lin               # input your name
+Email address: [email protected]    # input your email
+Comment:                          # input some annotations, optional
+You selected this USER-ID:
+    &quot;Hulk &lt;[email protected]&gt;&quot;
+
+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: _______________________________          │
+│                                                      │
+│       &lt;OK&gt;                              &lt;Cancel&gt;     │
+└──────────────────────────────────────────────────────┘
+# 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/hulk/.gnupg/openpgp-revocs.d/F77B887A4F25A9468C513E9AA3008E49B00F626B.rev'
+public and secret key created and signed.
+
+pub   rsa4096 2022-07-12 [SC]
+      F77B887A4F25A9468C513E9AA3008E49B00F626B
+uid           [ultimate] hulk &lt;[email protected]&gt;
+sub   rsa4096 2022-07-12 [E]
 </code></pre>
+<h2 id="upload-your-key-to-public-gpg-keyserver"><a class="header" 
href="#upload-your-key-to-public-gpg-keyserver">Upload your key to public GPG 
keyserver</a></h2>
+<p>Firstly, list your key:</p>
+<pre><code class="language-shell">gpg --list-keys
+</code></pre>
+<p>The output is like:</p>
+<pre><code class="language-shell">-------------------------------
+pub   rsa4096 2022-07-12 [SC]
+      F77B887A4F25A9468C513E9AA3008E49B00F626B
+uid           [ultimate] hulk &lt;[email protected]&gt;
+sub   rsa4096 2022-07-12 [E]
+</code></pre>
+<p>Then, send your key id to key server:</p>
+<pre><code class="language-shell">gpg --keyserver keys.openpgp.org --send-key 
&lt;key-id&gt; # e.g., F77B887A4F25A9468C513E9AA3008E49B00F626B
+</code></pre>
+<p>Among them, <code>keys.openpgp.org</code> is a randomly selected keyserver, 
you can use <code>keyserver.ubuntu.com</code> or any other full-featured 
keyserver.</p>
+<h2 id="check-whether-the-key-is-created-successfully"><a class="header" 
href="#check-whether-the-key-is-created-successfully">Check whether the key is 
created successfully</a></h2>
+<p>Uploading takes about one minute; after that, you can check by your email 
at the corresponding keyserver.</p>
+<p>Uploading keys to the keyserver is mainly for joining a <a 
href="https://infra.apache.org/release-signing.html#web-of-trust";>Web of 
Trust</a>.</p>
+<h2 id="add-your-gpg-public-key-to-the-keys-document"><a class="header" 
href="#add-your-gpg-public-key-to-the-keys-document">Add your GPG public key to 
the KEYS document</a></h2>
+<p>:::info</p>
+<p><code>SVN</code> is required for this step.</p>
+<p>:::</p>
+<p>The svn repository of the release branch is: 
https://dist.apache.org/repos/dist/release/iceberg</p>
+<p>Please always add the public key to KEYS in the release branch:</p>
+<pre><code class="language-shell">svn co 
https://dist.apache.org/repos/dist/release/iceberg iceberg-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 iceberg-dist
+(gpg --list-sigs [email protected] &amp;&amp; gpg --export --armor 
[email protected]) &gt;&gt; KEYS # Append your key to the KEYS file
+svn add .   # It is not needed if the KEYS document exists before.
+svn ci -m &quot;add gpg key for YOUR_NAME&quot; # Later on, if you are asked 
to enter a username and password, just use your apache username and password.
+</code></pre>
+<h2 id="upload-the-gpg-public-key-to-your-github-account"><a class="header" 
href="#upload-the-gpg-public-key-to-your-github-account">Upload the GPG public 
key to your GitHub account</a></h2>
+<ul>
+<li>Enter https://github.com/settings/keys to add your GPG key.</li>
+<li>Please remember to bind the email address used in the GPG key to your 
GitHub account (https://github.com/settings/emails) if you find 
&quot;unverified&quot; after adding it.</li>
+</ul>
 
                     </main>
 
                     <nav class="nav-wrapper" aria-label="Page navigation">
                         <!-- Mobile navigation buttons -->
-                            <a rel="prev" href="introduction.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
+                            <a rel="prev" href="../release.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
                                 <i class="fa fa-angle-left"></i>
                             </a>
 
-                            <a rel="next prefetch" href="CONTRIBUTING.html" 
class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
-                                <i class="fa fa-angle-right"></i>
-                            </a>
 
                         <div style="clear: both"></div>
                     </nav>
@@ -223,13 +325,10 @@
             </div>
 
             <nav class="nav-wide-wrapper" aria-label="Page navigation">
-                    <a rel="prev" href="introduction.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
+                    <a rel="prev" href="../release.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
                         <i class="fa fa-angle-left"></i>
                     </a>
 
-                    <a rel="next prefetch" href="CONTRIBUTING.html" 
class="nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
-                        <i class="fa fa-angle-right"></i>
-                    </a>
             </nav>
 
         </div>
@@ -242,13 +341,13 @@
         </script>
 
 
-        <script src="elasticlunr.min.js"></script>
-        <script src="mark.min.js"></script>
-        <script src="searcher.js"></script>
+        <script src="../elasticlunr.min.js"></script>
+        <script src="../mark.min.js"></script>
+        <script src="../searcher.js"></script>
 
-        <script src="clipboard.min.js"></script>
-        <script src="highlight.js"></script>
-        <script src="book.js"></script>
+        <script src="../clipboard.min.js"></script>
+        <script src="../highlight.js"></script>
+        <script src="../book.js"></script>
 
         <!-- Custom JS scripts -->
 
diff --git a/release.html b/release.html
new file mode 100644
index 0000000..53f2a44
--- /dev/null
+++ b/release.html
@@ -0,0 +1,546 @@
+<!DOCTYPE HTML>
+<html lang="en" class="light" dir="ltr">
+    <head>
+        <!-- Book generated using mdBook -->
+        <meta charset="UTF-8">
+        <title>Release - Iceberg Rust</title>
+
+
+        <!-- Custom HTML head -->
+        
+        <meta name="description" content="">
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+        <meta name="theme-color" content="#ffffff">
+
+        <link rel="icon" href="favicon.svg">
+        <link rel="shortcut icon" href="favicon.png">
+        <link rel="stylesheet" href="css/variables.css">
+        <link rel="stylesheet" href="css/general.css">
+        <link rel="stylesheet" href="css/chrome.css">
+        <link rel="stylesheet" href="css/print.css" media="print">
+
+        <!-- Fonts -->
+        <link rel="stylesheet" href="FontAwesome/css/font-awesome.css">
+        <link rel="stylesheet" href="fonts/fonts.css">
+
+        <!-- Highlight.js Stylesheets -->
+        <link rel="stylesheet" href="highlight.css">
+        <link rel="stylesheet" href="tomorrow-night.css">
+        <link rel="stylesheet" href="ayu-highlight.css">
+
+        <!-- Custom theme stylesheets -->
+
+    </head>
+    <body class="sidebar-visible no-js">
+    <div id="body-container">
+        <!-- Provide site root to javascript -->
+        <script>
+            var path_to_root = "";
+            var default_theme = window.matchMedia("(prefers-color-scheme: 
dark)").matches ? "navy" : "light";
+        </script>
+
+        <!-- Work around some values being stored in localStorage wrapped in 
quotes -->
+        <script>
+            try {
+                var theme = localStorage.getItem('mdbook-theme');
+                var sidebar = localStorage.getItem('mdbook-sidebar');
+
+                if (theme.startsWith('"') && theme.endsWith('"')) {
+                    localStorage.setItem('mdbook-theme', theme.slice(1, 
theme.length - 1));
+                }
+
+                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
+                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, 
sidebar.length - 1));
+                }
+            } catch (e) { }
+        </script>
+
+        <!-- Set the theme before any content is loaded, prevents flash -->
+        <script>
+            var theme;
+            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
+            if (theme === null || theme === undefined) { theme = 
default_theme; }
+            var html = document.querySelector('html');
+            html.classList.remove('light')
+            html.classList.add(theme);
+            var body = document.querySelector('body');
+            body.classList.remove('no-js')
+            body.classList.add('js');
+        </script>
+
+        <input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
+
+        <!-- Hide / unhide sidebar before it is displayed -->
+        <script>
+            var body = document.querySelector('body');
+            var sidebar = null;
+            var sidebar_toggle = 
document.getElementById("sidebar-toggle-anchor");
+            if (document.body.clientWidth >= 1080) {
+                try { sidebar = localStorage.getItem('mdbook-sidebar'); } 
catch(e) { }
+                sidebar = sidebar || 'visible';
+            } else {
+                sidebar = 'hidden';
+            }
+            sidebar_toggle.checked = sidebar === 'visible';
+            body.classList.remove('sidebar-visible');
+            body.classList.add("sidebar-" + sidebar);
+        </script>
+
+        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
+            <div class="sidebar-scrollbox">
+                <ol class="chapter"><li class="chapter-item expanded "><a 
href="introduction.html">Introduction</a></li><li class="chapter-item expanded 
affix "><li class="part-title">User Guide</li><li class="chapter-item expanded 
"><a href="install.html">Install</a></li><li class="chapter-item expanded "><a 
href="download.html">Download</a></li><li class="chapter-item expanded affix 
"><li class="part-title">Developer Guide</li><li class="chapter-item expanded 
"><a href="CONTRIBUTING.ht [...]
+            </div>
+            <div id="sidebar-resize-handle" class="sidebar-resize-handle">
+                <div class="sidebar-resize-indicator"></div>
+            </div>
+        </nav>
+
+        <!-- Track and set sidebar scroll position -->
+        <script>
+            var sidebarScrollbox = document.querySelector('#sidebar 
.sidebar-scrollbox');
+            sidebarScrollbox.addEventListener('click', function(e) {
+                if (e.target.tagName === 'A') {
+                    sessionStorage.setItem('sidebar-scroll', 
sidebarScrollbox.scrollTop);
+                }
+            }, { passive: true });
+            var sidebarScrollTop = sessionStorage.getItem('sidebar-scroll');
+            sessionStorage.removeItem('sidebar-scroll');
+            if (sidebarScrollTop) {
+                // preserve sidebar scroll position when navigating via links 
within sidebar
+                sidebarScrollbox.scrollTop = sidebarScrollTop;
+            } else {
+                // scroll sidebar to current active section when navigating 
via "next/previous chapter" buttons
+                var activeSection = document.querySelector('#sidebar .active');
+                if (activeSection) {
+                    activeSection.scrollIntoView({ block: 'center' });
+                }
+            }
+        </script>
+
+        <div id="page-wrapper" class="page-wrapper">
+
+            <div class="page">
+                                <div id="menu-bar-hover-placeholder"></div>
+                <div id="menu-bar" class="menu-bar sticky">
+                    <div class="left-buttons">
+                        <label id="sidebar-toggle" class="icon-button" 
for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle 
Table of Contents" aria-controls="sidebar">
+                            <i class="fa fa-bars"></i>
+                        </label>
+                        <button id="theme-toggle" class="icon-button" 
type="button" title="Change theme" aria-label="Change theme" 
aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
+                            <i class="fa fa-paint-brush"></i>
+                        </button>
+                        <ul id="theme-list" class="theme-popup" 
aria-label="Themes" role="menu">
+                            <li role="none"><button role="menuitem" 
class="theme" id="light">Light</button></li>
+                            <li role="none"><button role="menuitem" 
class="theme" id="rust">Rust</button></li>
+                            <li role="none"><button role="menuitem" 
class="theme" id="coal">Coal</button></li>
+                            <li role="none"><button role="menuitem" 
class="theme" id="navy">Navy</button></li>
+                            <li role="none"><button role="menuitem" 
class="theme" id="ayu">Ayu</button></li>
+                        </ul>
+                        <button id="search-toggle" class="icon-button" 
type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" 
aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
+                            <i class="fa fa-search"></i>
+                        </button>
+                    </div>
+
+                    <h1 class="menu-title">Iceberg Rust</h1>
+
+                    <div class="right-buttons">
+                        <a href="print.html" title="Print this book" 
aria-label="Print this book">
+                            <i id="print-button" class="fa fa-print"></i>
+                        </a>
+                        <a href="https://github.com/apache/iceberg-rust"; 
title="Git repository" aria-label="Git repository">
+                            <i id="git-repository-button" class="fa 
fa-github"></i>
+                        </a>
+                        <a 
href="https://github.com/apache/iceberg-rust/edit/main/website/src/release.md"; 
title="Suggest an edit" aria-label="Suggest an edit">
+                            <i id="git-edit-button" class="fa fa-edit"></i>
+                        </a>
+
+                    </div>
+                </div>
+
+                <div id="search-wrapper" class="hidden">
+                    <form id="searchbar-outer" class="searchbar-outer">
+                        <input type="search" id="searchbar" name="searchbar" 
placeholder="Search this book ..." aria-controls="searchresults-outer" 
aria-describedby="searchresults-header">
+                    </form>
+                    <div id="searchresults-outer" class="searchresults-outer 
hidden">
+                        <div id="searchresults-header" 
class="searchresults-header"></div>
+                        <ul id="searchresults">
+                        </ul>
+                    </div>
+                </div>
+
+                <!-- Apply ARIA attributes after the sidebar and the sidebar 
toggle button are added to the DOM -->
+                <script>
+                    
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar 
=== 'visible');
+                    
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 
'visible');
+                    Array.from(document.querySelectorAll('#sidebar 
a')).forEach(function(link) {
+                        link.setAttribute('tabIndex', sidebar === 'visible' ? 
0 : -1);
+                    });
+                </script>
+
+                <div id="content" class="content">
+                    <main>
+                        <!--
+  ~ 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.
+-->
+<p>This document mainly introduces how the release manager releases a new 
version in accordance with the Apache requirements.</p>
+<h2 id="introduction"><a class="header" 
href="#introduction">Introduction</a></h2>
+<p><code>Source Release</code> is the key point which Apache values, and is 
also necessary for an ASF release.</p>
+<p>Please remember that publishing software has legal consequences.</p>
+<p>This guide complements the foundation-wide policies and guides:</p>
+<ul>
+<li><a href="https://www.apache.org/legal/release-policy.html";>Release 
Policy</a></li>
+<li><a href="https://infra.apache.org/release-distribution";>Release 
Distribution Policy</a></li>
+<li><a href="https://infra.apache.org/release-publishing.html";>Release 
Creation Process</a></li>
+</ul>
+<h2 id="some-terminology-of-release"><a class="header" 
href="#some-terminology-of-release">Some Terminology of release</a></h2>
+<p>In the context of our release, we use several terms to describe different 
stages of the release process.</p>
+<p>Here's an explanation of these terms:</p>
+<ul>
+<li><code>iceberg_version</code>: the version of Iceberg to be released, like 
<code>0.2.0</code>.</li>
+<li><code>release_version</code>: the version of release candidate, like 
<code>0.2.0-rc.1</code>.</li>
+<li><code>rc_version</code>: the minor version for voting round, like 
<code>rc.1</code>.</li>
+</ul>
+<h2 id="preparation"><a class="header" href="#preparation">Preparation</a></h2>
+<div class="warning">
+<p>This section is the requirements for individuals who are new to the role of 
release manager.</p>
+</div>
+<p>Refer to <a href="reference/setup_gpg.html">Setup GPG Key</a> to make sure 
the GPG key has been set up.</p>
+<h2 id="start-a-tracking-issue-about-the-next-release"><a class="header" 
href="#start-a-tracking-issue-about-the-next-release">Start a tracking issue 
about the next release</a></h2>
+<p>Start a tracking issue on GitHub for the upcoming release to track all 
tasks that need to be completed.</p>
+<p>Title:</p>
+<pre><code>Tracking issues of Iceberg Rust ${iceberg_version} Release
+</code></pre>
+<p>Content:</p>
+<pre><code class="language-markdown">This issue is used to track tasks of the 
iceberg rust ${iceberg_version} release.
+
+## Tasks
+
+### Blockers
+
+&gt; Blockers are the tasks that must be completed before the release.
+
+### Build Release
+
+#### GitHub Side
+
+- [ ] Bump version in project
+- [ ] Update docs
+- [ ] Generate dependencies list
+- [ ] Push release candidate tag to GitHub
+
+#### ASF Side
+
+- [ ] Create an ASF Release
+- [ ] Upload artifacts to the SVN dist repo
+
+### Voting
+
+- [ ] Start VOTE at iceberg community
+
+### Official Release
+
+- [ ] Push the release git tag
+- [ ] Publish artifacts to SVN RELEASE branch
+- [ ] Change Iceberg Rust Website download link
+- [ ] Send the announcement
+
+For details of each step, please refer to: 
https://rust.iceberg.apache.org/release
+</code></pre>
+<h2 id="github-side"><a class="header" href="#github-side">GitHub Side</a></h2>
+<h3 id="bump-version-in-project"><a class="header" 
href="#bump-version-in-project">Bump version in project</a></h3>
+<p>Bump all components' version in the project to the new iceberg version.
+Please note that this version is the exact version of the release, not the 
release candidate version.</p>
+<ul>
+<li>rust core: bump version in <code>Cargo.toml</code></li>
+</ul>
+<h3 id="update-docs"><a class="header" href="#update-docs">Update docs</a></h3>
+<ul>
+<li>Update <code>CHANGELOG.md</code>, refer to <a 
href="reference/generate_release_note.html">Generate Release Note</a> for more 
information.</li>
+</ul>
+<h3 id="generate-dependencies-list"><a class="header" 
href="#generate-dependencies-list">Generate dependencies list</a></h3>
+<p>Download and setup <code>cargo-deny</code>. You can refer to <a 
href="https://embarkstudios.github.io/cargo-deny/cli/index.html";>cargo-deny</a>.</p>
+<p>Running <code>python3 ./scripts/dependencies.py generate</code> to update 
the dependencies list of every package.</p>
+<h3 id="push-release-candidate-tag"><a class="header" 
href="#push-release-candidate-tag">Push release candidate tag</a></h3>
+<p>After bump version PR gets merged, we can create a GitHub release for the 
release candidate:</p>
+<ul>
+<li>Create a tag at <code>main</code> branch on the <code>Bump Version</code> 
/ <code>Patch up version</code> commit: <code>git tag -s 
&quot;v0.2.0-rc.1&quot;</code>, please correctly check out the corresponding 
commit instead of directly tagging on the main branch.</li>
+<li>Push tags to GitHub: <code>git push --tags</code>.</li>
+</ul>
+<h2 id="asf-side"><a class="header" href="#asf-side">ASF Side</a></h2>
+<p>If any step in the ASF Release process fails and requires code changes,
+we will abandon that version and prepare for the next one.
+Our release page will only display ASF releases instead of GitHub Releases.</p>
+<h3 id="create-an-asf-release"><a class="header" 
href="#create-an-asf-release">Create an ASF Release</a></h3>
+<p>After GitHub Release has been created, we can start to create ASF 
Release.</p>
+<ul>
+<li>Checkout to released tag. (e.g. <code>git checkout v0.2.0-rc.1</code>, tag 
is created in the previous step)</li>
+<li>Use the release script to create a new release: 
<code>ICEBERG_VERSION=&lt;iceberg_version&gt; 
ICEBERG_VERSION_RC=&lt;rc_version&gt; ./scripts/release.sh</code>(e.g. 
<code>ICEBERG_VERSION=0.2.0 ICEBERG_VERSION_RC=rc.1 ./scripts/release.sh</code>)
+<ul>
+<li>This script will do the following things:
+<ul>
+<li>Create a new branch named by <code>release-${release_version}</code> from 
the tag</li>
+<li>Generate the release candidate artifacts under <code>dist</code>, 
including:
+<ul>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz</code></li>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz.asc</code></li>
+<li><code>apache-iceberg-rust-${release_version}-src.tar.gz.sha512</code></li>
+</ul>
+</li>
+<li>Check the header of the source code. This step needs docker to run.</li>
+</ul>
+</li>
+</ul>
+</li>
+<li>Push the newly created branch to GitHub</li>
+</ul>
+<p>This script will create a new release under <code>dist</code>.</p>
+<p>For example:</p>
+<pre><code class="language-shell">&gt; tree dist
+dist
+├── apache-iceberg-rust-0.2.0-src.tar.gz
+├── apache-iceberg-rust-0.2.0-src.tar.gz.asc
+└── apache-iceberg-rust-0.2.0-src.tar.gz.sha512
+</code></pre>
+<h3 id="upload-artifacts-to-the-svn-dist-repo"><a class="header" 
href="#upload-artifacts-to-the-svn-dist-repo">Upload artifacts to the SVN dist 
repo</a></h3>
+<p>SVN is required for this step.</p>
+<p>The svn repository of the dev branch is: <a 
href="https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust";>https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust</a></p>
+<p>First, checkout Iceberg to local directory:</p>
+<pre><code class="language-shell"># 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/iceberg/iceberg-rust 
iceberg-dist-dev
+</code></pre>
+<p>Then, upload the artifacts:</p>
+<blockquote>
+<p>The <code>${release_version}</code> here should be like 
<code>0.2.0-rc.1</code></p>
+</blockquote>
+<pre><code class="language-shell">cd iceberg-dist-dev
+# create a directory named by version
+mkdir ${release_version}
+# copy source code and signature package to the versioned directory
+cp ${repo_dir}/dist/* ${release_version}/
+# check svn status
+svn status
+# add to svn
+svn add ${release_version}
+# check svn status
+svn status
+# commit to SVN remote server
+svn commit -m &quot;Prepare for ${release_version}&quot;
+</code></pre>
+<p>Visit <a 
href="https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/";>https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/</a>
 to make sure the artifacts are uploaded correctly.</p>
+<h3 id="rescue"><a class="header" href="#rescue">Rescue</a></h3>
+<p>If you accidentally published wrong or unexpected artifacts, like wrong 
signature files, wrong sha256 files,
+please cancel the release for the current <code>release_version</code>,
+<em>increase th RC counting</em> and re-initiate a release with the new 
<code>release_version</code>.
+And remember to delete the wrong artifacts from the SVN dist repo.</p>
+<h2 id="voting"><a class="header" href="#voting">Voting</a></h2>
+<p>Iceberg Community Vote should send email to: <a 
href="mailto:[email protected]";>[email protected]</a>:</p>
+<p>Title:</p>
+<pre><code>[VOTE] Release Apache Iceberg Rust ${release_version} RC1
+</code></pre>
+<p>Content:</p>
+<pre><code>Hello, Apache Iceberg Rust Community,
+
+This is a call for a vote to release Apache Iceberg rust version 
${iceberg_version}.
+
+The tag to be voted on is ${iceberg_version}.
+
+The release candidate:
+
+https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version}/
+
+Keys to verify the release candidate:
+
+https://downloads.apache.org/iceberg/KEYS
+
+Git tag for the release:
+
+https://github.com/apache/iceberg-rust/releases/tag/${release_version}
+
+Please download, verify, and test.
+
+The VOTE will be open for at least 72 hours and until the necessary
+number of votes are reached.
+
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove with the reason
+
+To learn more about Apache Iceberg, please see https://rust.iceberg.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
+
+More detailed checklist please refer to:
+https://github.com/apache/iceberg-rust/tree/main/scripts
+
+To compile from source, please refer to:
+https://github.com/apache/iceberg-rust/blob/main/CONTRIBUTING.md
+
+Here is a Python script in release to help you verify the release candidate:
+
+./scripts/verify.py
+
+Thanks
+
+${name}
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/c211gqq2yl15jbxqk4rcnq1bdqltjm5l";>https://lists.apache.org/thread/c211gqq2yl15jbxqk4rcnq1bdqltjm5l</a></p>
+<p>After at least 3 <code>+1</code> binding vote (from Iceberg PMC member), 
claim the vote result:</p>
+<p>Title:</p>
+<pre><code>[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} RC1
+</code></pre>
+<p>Content:</p>
+<pre><code>Hello, Apache Iceberg Rust Community,
+
+The vote to release Apache Iceberg Rust ${release_version} has passed.
+
+The vote PASSED with 3 +1 binding and 1 +1 non-binding votes, no +0 or -1 
votes:
+
+Binding votes:
+
+- xxx
+- yyy
+- zzz
+
+Non-Binding votes:
+
+- aaa
+
+Vote thread: ${vote_thread_url}
+
+Thanks
+
+${name}
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6";>https://lists.apache.org/thread/xk5myl10mztcfotn59oo59s4ckvojds6</a></p>
+<h2 id="official-release"><a class="header" href="#official-release">Official 
Release</a></h2>
+<h3 id="push-the-release-git-tag"><a class="header" 
href="#push-the-release-git-tag">Push the release git tag</a></h3>
+<pre><code class="language-shell"># Checkout the tags that passed VOTE
+git checkout ${release_version}
+# Tag with the iceberg version
+git tag -s ${iceberg_version}
+# Push tags to github to trigger releases
+git push origin ${iceberg_version}
+</code></pre>
+<h3 id="publish-artifacts-to-svn-release-branch"><a class="header" 
href="#publish-artifacts-to-svn-release-branch">Publish artifacts to SVN 
RELEASE branch</a></h3>
+<pre><code class="language-shell">svn mv 
https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/${release_version} 
https://dist.apache.org/repos/dist/release/iceberg/iceberg-rust/${iceberg_version}
 -m &quot;Release ${iceberg_version}&quot;
+</code></pre>
+<h3 id="change-iceberg-rust-website-download-link"><a class="header" 
href="#change-iceberg-rust-website-download-link">Change Iceberg Rust Website 
download link</a></h3>
+<p>Update the download link in <code>website/src/download.md</code> to the new 
release version.</p>
+<h3 id="create-a-github-release"><a class="header" 
href="#create-a-github-release">Create a GitHub Release</a></h3>
+<ul>
+<li>Click <a 
href="https://github.com/apache/iceberg-rust/releases/new";>here</a> to create a 
new release.</li>
+<li>Pick the git tag of this release version from the dropdown menu.</li>
+<li>Make sure the branch target is <code>main</code>.</li>
+<li>Generate the release note by clicking the <code>Generate release 
notes</code> button.</li>
+<li>Add the release note from every component's <code>upgrade.md</code> if 
there are breaking changes before the content generated by GitHub. Check them 
carefully.</li>
+<li>Publish the release.</li>
+</ul>
+<h3 id="send-the-announcement"><a class="header" 
href="#send-the-announcement">Send the announcement</a></h3>
+<p>Send the release announcement to <code>[email protected]</code> and 
CC <code>[email protected]</code>.</p>
+<p>Instead of adding breaking changes, let's include the new features as 
&quot;notable changes&quot; in the announcement.</p>
+<p>Title:</p>
+<pre><code>[ANNOUNCE] Release Apache Iceberg Rust ${iceberg_version}
+</code></pre>
+<p>Content:</p>
+<pre><code>Hi all,
+
+The Apache Iceberg Rust community is pleased to announce
+that Apache Iceberg Rust ${iceberg_version} has been released!
+
+Iceberg is a data access layer that allows users to easily and efficiently
+retrieve data from various storage services in a unified way.
+
+The notable changes since ${iceberg_version} include:
+1. xxxxx
+2. yyyyyy
+3. zzzzzz
+
+Please refer to the change log for the complete list of changes:
+https://github.com/apache/iceberg-rust/releases/tag/v${iceberg_version}
+
+Apache Iceberg Rust website: https://rust.iceberg.apache.org/
+
+Download Links: https://rust.iceberg.apache.org/download
+
+Iceberg Resources:
+- Issue: https://github.com/apache/iceberg-rust/issues
+- Mailing list: [email protected]
+
+Thanks
+On behalf of Apache Iceberg Community
+</code></pre>
+<p>Example: <a 
href="https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s";>https://lists.apache.org/thread/oy77n55brvk72tnlb2bjzfs9nz3cfd0s</a></p>
+
+                    </main>
+
+                    <nav class="nav-wrapper" aria-label="Page navigation">
+                        <!-- Mobile navigation buttons -->
+                            <a rel="prev" href="CONTRIBUTING.html" 
class="mobile-nav-chapters previous" title="Previous chapter" 
aria-label="Previous chapter" aria-keyshortcuts="Left">
+                                <i class="fa fa-angle-left"></i>
+                            </a>
+
+                            <a rel="next prefetch" 
href="reference/setup_gpg.html" class="mobile-nav-chapters next" title="Next 
chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
+                                <i class="fa fa-angle-right"></i>
+                            </a>
+
+                        <div style="clear: both"></div>
+                    </nav>
+                </div>
+            </div>
+
+            <nav class="nav-wide-wrapper" aria-label="Page navigation">
+                    <a rel="prev" href="CONTRIBUTING.html" class="nav-chapters 
previous" title="Previous chapter" aria-label="Previous chapter" 
aria-keyshortcuts="Left">
+                        <i class="fa fa-angle-left"></i>
+                    </a>
+
+                    <a rel="next prefetch" href="reference/setup_gpg.html" 
class="nav-chapters next" title="Next chapter" aria-label="Next chapter" 
aria-keyshortcuts="Right">
+                        <i class="fa fa-angle-right"></i>
+                    </a>
+            </nav>
+
+        </div>
+
+
+
+
+        <script>
+            window.playground_copyable = true;
+        </script>
+
+
+        <script src="elasticlunr.min.js"></script>
+        <script src="mark.min.js"></script>
+        <script src="searcher.js"></script>
+
+        <script src="clipboard.min.js"></script>
+        <script src="highlight.js"></script>
+        <script src="book.js"></script>
+
+        <!-- Custom JS scripts -->
+
+
+    </div>
+    </body>
+</html>
diff --git a/searchindex.js b/searchindex.js
index 07364ac..8ea6b2a 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Object.assign(window.search, 
{"doc_urls":["introduction.html#iceberg-rust","install.html#install","CONTRIBUTING.html#contributing","CONTRIBUTING.html#your-first-contribution","CONTRIBUTING.html#workflow","CONTRIBUTING.html#git-branches","CONTRIBUTING.html#github-pull-requests","CONTRIBUTING.html#ci","CONTRIBUTING.html#setup","CONTRIBUTING.html#using-a-dev-container-environment","CONTRIBUTING.html#bring-your-own-toolbox","CONTRIBUTING.html#build","CONTRIBUTING.html#code-of-conduct"],"inde
 [...]
\ No newline at end of file
+Object.assign(window.search, 
{"doc_urls":["introduction.html#iceberg-rust","install.html#install","download.html","CONTRIBUTING.html#contributing","CONTRIBUTING.html#your-first-contribution","CONTRIBUTING.html#workflow","CONTRIBUTING.html#git-branches","CONTRIBUTING.html#github-pull-requests","CONTRIBUTING.html#ci","CONTRIBUTING.html#setup","CONTRIBUTING.html#using-a-dev-container-environment","CONTRIBUTING.html#bring-your-own-toolbox","CONTRIBUTING.html#build","CONTRIBUTING.html#code-of
 [...]
\ No newline at end of file
diff --git a/searchindex.json b/searchindex.json
index dc93216..3804b55 100644
--- a/searchindex.json
+++ b/searchindex.json
@@ -1 +1 @@
-{"doc_urls":["introduction.html#iceberg-rust","install.html#install","CONTRIBUTING.html#contributing","CONTRIBUTING.html#your-first-contribution","CONTRIBUTING.html#workflow","CONTRIBUTING.html#git-branches","CONTRIBUTING.html#github-pull-requests","CONTRIBUTING.html#ci","CONTRIBUTING.html#setup","CONTRIBUTING.html#using-a-dev-container-environment","CONTRIBUTING.html#bring-your-own-toolbox","CONTRIBUTING.html#build","CONTRIBUTING.html#code-of-conduct"],"index":{"documentStore":{"docInfo
 [...]
\ No newline at end of file
+{"doc_urls":["introduction.html#iceberg-rust","install.html#install","download.html","CONTRIBUTING.html#contributing","CONTRIBUTING.html#your-first-contribution","CONTRIBUTING.html#workflow","CONTRIBUTING.html#git-branches","CONTRIBUTING.html#github-pull-requests","CONTRIBUTING.html#ci","CONTRIBUTING.html#setup","CONTRIBUTING.html#using-a-dev-container-environment","CONTRIBUTING.html#bring-your-own-toolbox","CONTRIBUTING.html#build","CONTRIBUTING.html#code-of-conduct","release.html#intro
 [...]
\ No newline at end of file

Reply via email to