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.
Prerequisite
The following environment variables need to be set before running the release steps:
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, andshasum;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 apache/tvm-ffi.
Step 0.2. Open a voting thread: apache/tvm-ffi#new (Example)
Step 1. Create Release Candidate#
This builds and signs the source release artifacts under
tvm-ffi-$FFI_VERSION/.
_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: apache/tvm-ffi#new. (Example)
Step 2.2. Publish PyPI wheel: apache/tvm-ffi.
Step 2.3. Update documentation to latest: apache/tvm-site.
Step 2.4. Re-tag the release candidate to the final release version, and bump the version in the source tree:
_retag_and_bump_version() {
local _ffi_version="$1"
local _ffi_release_version="$2"
# Configuration variables
local _repo_url="git@github.com: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.
_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