Release managementlink
Overviewlink
Releases are the process by which we build and deliver software to our users. We use a mix of automation and operational practices as part of our continuous delivery (CD) efforts.
Releases have the following goals (among others):
- Produce and publish easily installable packages to common package managers for users.
- Introduce checkpoints with predictable versions around which release notes, testing efforts, and other related activities can align.
- Improve project and ecosystem velocity and stability.
Stable and nightly releaseslink
In addition to stable releases, we build and publish nightly releases too. Nightly releases are less tested and may not include all configurations at all times, but they are convenient to install as a preview for what the next stable release will contain.
- Stable releases are published to GitHub releases, are pushed to PyPI, and are
installable via
pip install
using default options. - Nightly releases are published to only GitHub releases as "pre-releases" and
are installable via
pip install
using non-default options like--find-links
and our hosted index page at https://iree.dev/pip-release-links.html.
Projects in scopelink
The IREE release process currently considers packages in these projects to be in scope:
Info
If you maintain a project that you would like to connect with this release process, please reach out on one of our communication channels. The current project list is driven by the priorities of the core project maintainers and we would be happy to adapt the process to include other projects too.
The dependency graph looks like this:
graph TD
accTitle: Dependency graph between in-scope packages
subgraph iree["iree-org/iree"]
iree-base-compiler
iree-base-runtime
iree-tools-tf
iree-tools-tflite
end
subgraph turbine["iree-org/iree-turbine"]
iree-turbine
end
iree-base-compiler --> iree-turbine
iree-base-runtime --> iree-turbine
subgraph sharkai["nod-ai/shark-ai"]
sharktank
shortfin
shark-ai
end
iree-base-compiler --> sharktank
iree-turbine --> sharktank
iree-base-runtime -. source dependency .-> shortfin
sharktank --> shark-ai
shortfin --> shark-ai
Types of dependency linkslink
Most dependencies are loose requirements, not imposing strict limitations on the versions installed. This allows users to freely install similar versions of each package without risking issues during pip dependency resolution. This is important for libraries near the root or middle of a dependency graph.
Requires-Dist: numpy
Requires-Dist: iree-base-compiler
Requires-Dist: iree-base-runtime
Requires-Dist: Jinja2>=3.1.3
Requires-Dist: ml_dtypes>=0.5.0
The shark-ai package is special in that it is a leaf project acting as a full solution for ML model development that does specify precise versions. By installing this package, users will receive packages that have been more rigorously tested together:
Requires-Dist: iree-base-compiler==3.2.*
Requires-Dist: iree-base-runtime==3.2.*
Requires-Dist: iree-turbine==3.2.*
Requires-Dist: sharktank==3.2.0
Requires-Dist: shortfin==3.2.0
This feeds back into the release process - while release candidate selection typically flows from the base projects outwards, leaf projects are responsible for testing regularly and ensuring that the entire collective continues to work as expected.
Release timelinelink
Over the course of a release cycle there are several milestones to look out for:
- Week 0
- Release
X.Y.0
is published (see also Versioning scheme) - Versions in source code are updated to
X.{Y+1}.0
(see also Creating a patch release) - The next release date target is set for ~6 weeks later
- Subprojects set goals for the release
- Release
- ~1 week before the release date
- Any unstable build/test/release workflows must be stabilized
- Calls for release note contributions are sent out
- Release notes are drafted
- Release candidates are selected
- Release candidates are tested
- Release day
- Release candidates are promoted, release notes are published
- The cycle repeats
Downstream projects are encouraged to test as close to HEAD as possible leading up to each release, so there are multiple high quality candidates to choose from and release candidate testing processes require minimal manual effort.
Note
We do not yet have a process for creating release branches. Instead, we
choose a release candidate from nightly builds of the main
branch. We
also do not choose a cutoff point in advance for the release candidate
selection.
This process will likely need to evolve for future releases.
Release statuslink
Stable release history: https://github.com/iree-org/iree/releases?q=prerelease%3Afalse.
iree-org projectslink
Project | Package | Release status |
---|---|---|
iree-org/iree | GitHub release (stable) | |
GitHub release (nightly) | ||
iree-base-compiler |
||
iree-base-runtime |
||
iree-tools-tf |
||
iree-tools-tflite |
||
iree-org/iree-turbine | GitHub release (stable) | |
iree-turbine |
Community projectslink
Project | Package | Release status |
---|---|---|
nod-ai/shark-ai | GitHub release (stable) | |
shark-ai |
||
sharktank |
||
shortfin |
Deprecated packageslink
Project | Package | Release status | Notes |
---|---|---|---|
iree-org/iree | iree-compiler |
Renamed to iree-base-compiler |
|
iree-runtime |
Renamed to iree-base-runtime |
||
iree-runtime-instrumented |
Merged into iree[-base]-runtime |
||
iree-tools-xla |
Merged into iree-tools-tf |
||
nod-ai/SHARK-Turbine | shark-turbine |
Renamed to iree-turbine |
Release mechanicslink
IREE cuts automated releases via a workflow that is triggered daily. The only constraint placed on the commit that is released is that it has passed certain CI checks. These are published on GitHub with the "pre-release" status. For debugging this process, see the Release debugging playbook.
We periodically promote one of these candidates to a "stable" release.
Running a releaselink
A pinned issue tracking the next release should be filed like https://github.com/iree-org/iree/issues/18380. Developers authoring patches that include major or breaking changes should coordinate merge timing and contribute release notes on those issues.
Picking a candidate to promotelink
After approximately one month since the previous release, a new release should be promoted from nightly release candidates.
When selecting a candidate we aim to meet the following criteria:
- Includes packages for all platforms, including macOS and Windows
- ⪆2 days old so that problems with it may have been spotted
- Contains no major regressions vs the previous stable release
When you've identified a potential candidate, comment on the tracking issue with the proposal and solicit feedback. People may point out known regressions or request that some feature make the cut.
Promoting a candidate to stablelink
-
(Authorized users only) Push to PyPI using pypi_deploy.sh
-
Create a new release on GitHub:
-
Set the tag to be created and select a target commit. For example, if the candidate release was tagged
iree-3.1.0rc20241119
at commit3ed07da
, set the new release tagv3.1.0
and use the same commit.If the commit does not appear in the list, create and push a tag manually:
git checkout iree-3.1.0rc20250107 git tag -a v3.1.0 -m "Version 3.1.0 release." git push upstream v3.1.0
-
Set the title to
Release vX.Y.Z
. -
Paste the release notes from the release tracking issue.
-
Upload the
.whl
files produced by thepypy_deploy.sh
script (look for them in your/tmp/
directory). These have the stable release versions in them. -
Download the
iree-dist-.*.tar.xz
files from the candidate release and upload them to the new stable release. -
Uncheck the option for "pre-release", and check the option for "latest".
-
-
Complete any remaining checkbox items on the release tracking issue then close it and open a new one for the next release.
Creating a patch releaselink
-
Create a new branch.
Checkout the corresponding stable release and create a branch for the patch release:
git checkout v3.0.0 git checkout -b v3.0.1
-
Apply and commit the patches.
-
Set the patch level:
-
Adjust
compiler/version.json
if patches are applied to the compiler. -
Adjust
runtime/version.json
if patches are applied to the runtime.
-
-
Push all changes to the new branch.
-
Trigger the Oneshot candidate release workflow to create a release.
-
Select to run the workflow from the patch branch.
-
Set the type of build version to produce to "stable".
-
-
Follow the documentation above to promote to stable. The step to create a new tag can be skipped.