leaves12138 commented on code in PR #26:
URL: https://github.com/apache/paimon-mosaic/pull/26#discussion_r3278859585


##########
docs/creating-a-release.html:
##########
@@ -0,0 +1,352 @@
+<!--
+  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.
+-->
+
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>Creating a Release - Paimon Mosaic</title>
+    <link rel="stylesheet" href="css/style.css">
+    <script src="js/main.js"></script>
+</head>
+<body>
+    <button class="menu-toggle" aria-label="Menu">&#9776;</button>
+    <div class="overlay"></div>
+
+    <aside class="sidebar">
+        <div class="sidebar-header">
+            <h2>Paimon Mosaic</h2>
+            <p>Columnar-bucket hybrid format</p>
+        </div>
+        <nav>
+            <ul>
+                <li><a href="index.html">Home</a></li>
+                <li><a href="design.html">Design</a></li>
+                <li><a href="java-api.html">Java API</a></li>
+                <li><a href="python-api.html">Python API</a></li>
+                <li><a href="cpp-api.html">C++ API</a></li>
+                <li><a href="releases.html">Releases</a></li>
+            </ul>
+        </nav>
+        <div class="sidebar-footer">
+            <button class="theme-toggle">Dark Mode</button>
+        </div>
+    </aside>
+
+    <main class="main">
+        <div class="content">
+            <h1>Creating a Release</h1>
+            <p class="subtitle">Guide for Release Managers of Apache Paimon 
Mosaic, following <a 
href="https://www.apache.org/legal/release-policy.html";>ASF Release 
Policy</a>.</p>
+
+            <!-- ============================================================ 
-->
+            <h2>Overview</h2>
+            <p>The release process consists of:</p>
+            <ol>
+                <li><a href="#decide-to-release">Decide to release</a></li>
+                <li><a href="#prepare-for-the-release">Prepare for the 
release</a></li>
+                <li><a href="#build-a-release-candidate">Build a release 
candidate</a></li>
+                <li><a href="#vote-on-the-release-candidate">Vote on the 
release candidate</a></li>
+                <li><a href="#fix-any-issues">If necessary, fix any issues and 
go back to step 3</a></li>
+                <li><a href="#finalize-the-release">Finalize the 
release</a></li>
+                <li><a href="#promote-the-release">Promote the release</a></li>
+            </ol>
+
+            <h3>Automated Publishing</h3>
+            <p>When a version tag is pushed, GitHub Actions automatically 
publishes language-specific artifacts:</p>
+            <table>
+                <thead>
+                    <tr><th>Component</th><th>Tag Pattern</th><th>Published 
To</th><th>Pre-release (<code>-rc</code>) Behavior</th></tr>
+                </thead>
+                <tbody>
+                    <tr><td>Rust 
crate</td><td><code>v0.1.0</code></td><td>crates.io</td><td>Dry-run 
only</td></tr>
+                    <tr><td>Java 
binding</td><td><code>v0.1.0</code></td><td>Apache Nexus 
staging</td><td>Deploys to staging</td></tr>
+                    <tr><td>Python 
binding</td><td><code>v0.1.0</code></td><td>PyPI</td><td>Publishes to 
TestPyPI</td></tr>
+                </tbody>
+            </table>
+            <p>The Release Manager's primary responsibility is managing the 
<strong>source release</strong> (tarball + signature) and coordinating the 
community vote. Language artifact publishing is handled by CI once the tag is 
pushed.</p>
+
+            <!-- ============================================================ 
-->
+            <h2 id="decide-to-release">Decide to Release</h2>
+            <p>Anybody can propose a release on the dev <a 
href="https://lists.apache.org/[email protected]";>mailing 
list</a>, giving a short rationale and nominating a committer as Release 
Manager (including themselves).</p>
+            <p><strong>Checklist:</strong></p>
+            <ul>
+                <li>Community agrees to release</li>
+                <li>A Release Manager is selected</li>
+            </ul>
+
+            <!-- ============================================================ 
-->
+            <h2 id="prepare-for-the-release">Prepare for the Release</h2>
+
+            <h3>One-time Release Manager Setup</h3>
+
+            <h4>GPG Key</h4>
+            <ol>
+                <li>
+                    <p>Install GnuPG:</p>
+<pre><code># macOS
+brew install gnupg
+
+# Ubuntu / Debian
+sudo apt install gnupg2</code></pre>
+                </li>
+                <li>
+                    <p>Generate a key pair (RSA 4096, does not expire, use 
your <code>@apache.org</code> email):</p>
+<pre><code>gpg --full-gen-key</code></pre>
+                </li>
+                <li>
+                    <p>Find your key ID:</p>
+<pre><code>gpg --list-keys --keyid-format short</code></pre>
+                </li>
+                <li>
+                    <p>Upload to key server:</p>
+<pre><code>gpg --keyserver hkps://keyserver.ubuntu.com --send-keys 
&lt;YOUR_KEY_ID&gt;</code></pre>
+                </li>
+                <li>
+                    <p>Append to the project <a 
href="https://downloads.apache.org/paimon/KEYS";>KEYS</a> file:</p>
+<pre><code>svn co https://dist.apache.org/repos/dist/release/paimon/ 
paimon-dist-release --depth=files
+cd paimon-dist-release
+(gpg --list-sigs &lt;YOUR_KEY_ID&gt; &amp;&amp; gpg --armor --export 
&lt;YOUR_KEY_ID&gt;) &gt;&gt; KEYS
+svn ci -m "Add &lt;YOUR_NAME&gt;'s public key"</code></pre>
+                </li>
+                <li>
+                    <p>Configure Git to sign tags:</p>
+<pre><code>git config --global user.signingkey &lt;YOUR_KEY_ID&gt;</code></pre>
+                </li>
+            </ol>
+
+            <h4>GitHub Actions Secrets</h4>
+            <p>Ensure the following repository secrets are configured:</p>
+            <table>
+                <thead>
+                    <tr><th>Secret</th><th>Purpose</th></tr>
+                </thead>
+                <tbody>
+                    
<tr><td><code>CARGO_REGISTRY_TOKEN</code></td><td>crates.io publishing</td></tr>
+                    
<tr><td><code>NEXUS_STAGE_DEPLOYER_USER</code></td><td>Apache Nexus 
staging</td></tr>
+                    
<tr><td><code>NEXUS_STAGE_DEPLOYER_PW</code></td><td>Apache Nexus 
staging</td></tr>
+                    <tr><td><code>GPG_SECRET_KEY</code></td><td>Java artifact 
signing</td></tr>
+                    <tr><td><code>GPG_PASSPHRASE</code></td><td>Java artifact 
signing</td></tr>
+                    <tr><td><code>PYPI_API_TOKEN</code></td><td>PyPI 
publishing</td></tr>
+                    <tr><td><code>TEST_PYPI_API_TOKEN</code></td><td>TestPyPI 
publishing</td></tr>
+                </tbody>
+            </table>
+
+            <h3>Clone into a Fresh Workspace</h3>
+<pre><code>git clone https://github.com/apache/paimon-mosaic.git
+cd paimon-mosaic</code></pre>
+
+            <h3>Set Up Environment Variables</h3>
+<pre><code>RELEASE_VERSION="0.1.0"
+NEXT_VERSION="0.2.0"
+RC_NUM="1"</code></pre>
+
+            <h3>Create a Release Branch</h3>
+<pre><code>cd tools
+RELEASE_VERSION=${RELEASE_VERSION} RELEASE_CANDIDATE=${RC_NUM} 
./releasing/create_release_branch.sh</code></pre>
+            <p>This creates a branch named 
<code>release-${RELEASE_VERSION}-rc${RC_NUM}</code> from the current HEAD.</p>
+
+            <h3>Bump Version on Main</h3>
+            <p>After cutting the release branch, bump <code>main</code> to the 
next version:</p>
+<pre><code>git checkout main
+cd tools
+OLD_VERSION=${RELEASE_VERSION} NEW_VERSION=${NEXT_VERSION} 
./releasing/update_branch_version.sh</code></pre>

Review Comment:
   This main-branch bump command still leaves the Java artifact at the old 
SNAPSHOT version. I simulated the documented command from the current tree: 
`OLD_VERSION=0.1.0 NEW_VERSION=0.2.0 ./releasing/update_branch_version.sh` 
updates `core/Cargo.toml` and `python/pyproject.toml` to `0.2.0`, but 
`java/pom.xml` remains `0.1.0-SNAPSHOT` because the script only replaces exact 
`<version>0.1.0</version>` entries in POMs. Please either document/use 
`NEXT_VERSION=0.2.0-SNAPSHOT` for the Java POM path, or make 
`update_branch_version.sh` handle both `${OLD_VERSION}` and 
`${OLD_VERSION}-SNAPSHOT` consistently for POMs.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to