Release Process
Shrinkwrap is released at least once every quarter as a tagged snapshot of a branch. If critical bugs are discovered in the release, subsequent bugfix-only releases may be made available.
This document describes the process and serves as a checklist for the maintainer to make a shrinkwrap release.
Release Contents
- Shrinkwrap consists of 3 parts:
Shrinkwrap Python Package
Shrinkwrap Container Images
Shrinkwrap Documentation
A release is a consistent snapshot of all 3 parts, with a defined set of features that has been through a quality assurance process. The Python package is tagged in the Gitlab repository, the contianer images are tagged in docker hub, and the documentation is tagged in readthedocs. In future, the Python package may additionally be uploaded to PyPI.
Versioning Scheme
Shrinkwrap uses a date-based versioning scheme that is compatible with PEP 440, which is required by PyPI:
<year>.<month>.<patch>[.dev0]
component |
description |
|---|---|
|
Version year as 4 digit decimal integer. |
|
Version month as 1 or 2 digit decimal integer (no trailing zero). |
|
Patch level: 0 for the primary release, then increments for each bugfix release. |
|
Used for in-development versions. A release snapshot never has this suffix. |
As an example, let’s say we have just released version 2025.12.0. The
version in the main branch of the repository will be immediately bumped to
2026.3.0.dev0 to indicate that the branch now represents the in-development
version that will be released in March 2026. When development is complete and we
are ready for release (hopefully in March 2026), the version in the main branch
is updated to 2026.3.0 and the release is tagged. Then the version is
updated to 2026.6.0.dev0 and the cycle begins again.
Bug Fix Releases
If the <year>.<month>.0 release is found to have a critical bug, the
decision may be taken to make a bugfix release which will increment the
<patch>. First a branch is created in Gitlab, from the <year>.<month>.0
version tag. The version is incremented to <year>.<month>.1.dev0, then fixes
are backported from main onto the branch. Finally the version is set to
<year>.<month>.1 and the release is done following the same process but
using the release branch.
Release Checklist
Maintainer determines that
mainis ready to start the release processAll planned features have landed
The
mainCI pipeline passesDiscretionary manual testing has been performed and no issues found
Documentation has been reviewed and is up-to-date
Maintainer writes and commits the release notes to
mainMaintainer makes commit to remove
.dev0from versionMaintainer triggers “full” pipeline in Gitlab, running full set of tests
On failure, debug and fix then go back to start
On success, containers are automatically tagged with version number in docker hub
Maintainer creates tag of the tested SHA in Gitlab
Maintainer creates new version corresponding to tag in readthedocs
Maintainer makes commit to set the next version for the newly started development cycle
<year>.<month>.0.dev0Maintainer and Project Manager fill out Arm-specific release forms
Project Manager makes release announcement