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