blob: b8c45136f364544c12a3e4a9efbef687180206a9 [file]
.. 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>`__.
(See :doc:`ci_cd` for how wheels are built with cibuildwheel.)
**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="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.
.. 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