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

junrushao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tvm-ffi.git


The following commit(s) were added to refs/heads/main by this push:
     new 6e7cafa  doc: Add release_process.rst (#368)
6e7cafa is described below

commit 6e7cafab78cb007d066bc860c600e2ba80b4d1a7
Author: Junru Shao <[email protected]>
AuthorDate: Mon Dec 29 02:02:57 2025 -0800

    doc: Add release_process.rst (#368)
    
    Based on @.Hzfengsy's initial script, I fixed some typos and improved
    formality
---
 docs/dev/release_process.rst | 192 +++++++++++++++++++++++++++++++++++++++++++
 docs/index.rst               |   1 +
 2 files changed, 193 insertions(+)

diff --git a/docs/dev/release_process.rst b/docs/dev/release_process.rst
new file mode 100644
index 0000000..7489094
--- /dev/null
+++ b/docs/dev/release_process.rst
@@ -0,0 +1,192 @@
+..  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.
+
+Release Process
+===============
+
+This guide describes Apache TVM-FFI release workflow for creating a release
+candidate, staging artifacts on ASF SVN, finalizing the release tag, and
+publishing release artifacts.
+
+.. admonition:: Prerequisite
+   :class: hint
+
+   The following environment variables need to be set before running the
+   release steps:
+
+   .. code-block:: bash
+
+     export FFI_VERSION="v0.1.7-rc0"
+     export FFI_RELEASE_VERSION="v0.1.7"
+     export ASF_USERNAME="your-apache-username"
+
+   - Tools: ``git``, ``svn``, ``gpg``, ``gtar``, and ``shasum``;
+   - A configured GPG key for signing artifacts.
+
+
+.. important::
+    This tutorial is based on macOS. Adjust commands accordingly for other
+    operating systems.
+
+
+Pre-release checklist (Step 0)
+------------------------------
+
+Before running the steps below, create the release candidate tag and open the
+release vote.
+
+**Step 0.1.** Tag pre-release ``$FFI_VERSION`` on 
`<https://github.com/apache/tvm-ffi/releases/new>`__.
+
+**Step 0.2.** Open a voting thread: 
`https://github.com/apache/tvm-ffi/issues/new 
<https://github.com/apache/tvm-ffi/issues/new>`__ (`Example 
<https://github.com/apache/tvm-ffi/issues/359>`__)
+
+Step 1. Create Release Candidate
+--------------------------------
+
+This builds and signs the source release artifacts under
+``tvm-ffi-$FFI_VERSION/``.
+
+.. code-block:: bash
+
+  _make_tarball() {
+    local _ver="$1"
+    local _workdir="tvm-ffi-$_ver-release-files"
+    local _release_dir="tvm-ffi-$_ver"
+    local _tarball="apache-tvm-ffi-$_ver.tar.gz"
+
+    mkdir -p "$_workdir" "$_release_dir"
+    (
+      cd "$_workdir"
+
+      git clone --recursive https://github.com/apache/tvm-ffi.git ffi-release
+      cd ffi-release
+
+      git checkout "$_ver"
+      rm -rf .DS_Store
+      find . -name ".git*" -print0 | xargs -0 rm -rf
+
+      cd ..
+      gtar -czvf "$_tarball" -C ffi-release .
+      gpg --armor --output "$_tarball.asc" --detach-sig "$_tarball"
+      shasum -a 512 "$_tarball" > "$_tarball.sha512"
+    )
+    mv "$_workdir/$_tarball" "$_release_dir/"
+    mv "$_workdir/$_tarball.asc" "$_release_dir/"
+    mv "$_workdir/$_tarball.sha512" "$_release_dir/"
+    rm -rf "$_workdir"
+  }
+
+  _upload_to_apache_dev_svn() {
+    local _ver="$1"
+    local _asf_username="$2"
+    local _svn_dir="$(pwd)/svn-tvm"
+    local _release_dir="tvm-ffi-$_ver"
+    (
+      svn co --depth=files "https://dist.apache.org/repos/dist/dev/tvm"; 
$_svn_dir
+      cp -r "${_release_dir}/" "$_svn_dir/$_release_dir"
+      cd "$_svn_dir"
+      svn add "$_release_dir"
+      svn ci --username "$_asf_username" -m "Add TVM-FFI $_ver"
+    )
+  }
+
+  _make_tarball "$FFI_VERSION"
+  _upload_to_apache_dev_svn "$FFI_VERSION" "$ASF_USERNAME"
+
+
+Step 2. Conclude Release
+------------------------
+
+After the vote passes, retag the release, publish the wheel, bump versions, and
+trigger the docs release.
+
+**Step 2.1.** Conclude voting results: 
`<https://github.com/apache/tvm-ffi/issues/new>`__. (`Example 
<https://github.com/apache/tvm-ffi/issues/366>`__)
+
+**Step 2.2.** Publish PyPI wheel: 
`<https://github.com/apache/tvm-ffi/actions/workflows/publish_wheel.yml>`__.
+
+**Step 2.3.** Update documentation to latest: 
`<https://github.com/apache/tvm-site/actions/workflows/publish_tvm_ffi_docs.yml>`__.
+
+**Step 2.4.** Re-tag the release candidate to the final release version, and 
bump the version in the source tree:
+
+.. code-block:: bash
+
+  _retag_and_bump_version() {
+    local _ffi_version="$1"
+    local _ffi_release_version="$2"
+
+    # Configuration variables
+    local _repo_url="[email protected]:apache/tvm-ffi.git"
+    local _work_dir="tvm-ffi-release"
+    local _git_remote="upstream"
+    local _header_file="include/tvm/ffi/c_api.h"
+
+    # 1. Git clone with remote named "upstream"
+    echo "Cloning repository..."
+    git clone -o "$_git_remote" "$_repo_url" "$_work_dir"
+    cd "$_work_dir" || return 1
+    git fetch "$_git_remote" --tags
+
+    # 2. Replace tag and push
+    local _ffi_commit="$(git rev-parse "${_ffi_version}^{commit}")"
+    echo "Creating release tag $_ffi_release_version at commit $_ffi_commit..."
+    git tag -a "$_ffi_release_version" "$_ffi_commit" -m "Release 
$_ffi_release_version"
+    git push "$_git_remote" "$_ffi_release_version"
+    git push "$_git_remote" --delete "$_ffi_version"
+
+    # 3. Version bump after the release
+    local _today=$(date +%Y-%m-%d)
+    local _branch_name="${_today}/ver-bump"
+    local _current_patch=$(grep "#define TVM_FFI_VERSION_PATCH" 
"$_header_file" | awk '{print $3}')
+    local _new_patch=$((_current_patch + 1))
+    git checkout -b "$_branch_name"
+    echo "Bumping TVM_FFI_VERSION_PATCH from $_current_patch to $_new_patch"
+    sed "s/#define TVM_FFI_VERSION_PATCH $_current_patch/#define 
TVM_FFI_VERSION_PATCH $_new_patch/" "$_header_file" > "${_header_file}.tmp" && 
mv "${_header_file}.tmp" "$_header_file"
+    echo "Committing and pushing changes..."
+    git add "$_header_file"
+    git commit -m "chore(release): Version bump after release 
$_ffi_release_version"
+    git push -u "$_git_remote" "$_branch_name"
+  }
+
+  _retag_and_bump_version "$FFI_VERSION" "$FFI_RELEASE_VERSION"
+
+
+Step 3. Upload Release Artifacts
+--------------------------------
+
+After the release is final, copy the RC artifacts into ``dist/release`` with 
the
+final version name.
+
+.. code-block:: bash
+
+  _upload_svn() {
+    local _ffi_version="$1"
+    local _ffi_release_version="$2"
+    local _asf_username="$3"
+    local _release_dir="tvm-ffi-$_ffi_version"
+    local _svn_dir="$(pwd)/svn-tvm-release"
+    (
+      svn co --depth=files "https://dist.apache.org/repos/dist/release/tvm"; 
$_svn_dir
+      mkdir -p "$_svn_dir/tvm-ffi-$_ffi_release_version"
+      cp "${_release_dir}/apache-tvm-ffi-$_ffi_version.tar.gz" 
"$_svn_dir/tvm-ffi-$_ffi_release_version/apache-tvm-ffi-src-$_ffi_release_version.tar.gz"
+      cp "${_release_dir}/apache-tvm-ffi-$_ffi_version.tar.gz.asc" 
"$_svn_dir/tvm-ffi-$_ffi_release_version/apache-tvm-ffi-src-$_ffi_release_version.tar.gz.asc"
+      cp "${_release_dir}/apache-tvm-ffi-$_ffi_version.tar.gz.sha512" 
"$_svn_dir/tvm-ffi-$_ffi_release_version/apache-tvm-ffi-src-$_ffi_release_version.tar.gz.sha512"
+      cd "$_svn_dir"
+      svn add "tvm-ffi-$_ffi_release_version"
+      svn ci --username "$_asf_username" -m "Add TVM FFI $_ffi_release_version"
+    )
+  }
+
+  _upload_svn $FFI_VERSION $FFI_RELEASE_VERSION $ASF_USERNAME
diff --git a/docs/index.rst b/docs/index.rst
index 53f922c..0ef3916 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -80,3 +80,4 @@ Table of Contents
    :caption: Developer Manual
 
    dev/build_from_source.md
+   dev/release_process.rst

Reply via email to