- General Overview
- Cutting release branches
- Drafting RCs (Release Candidates)
- Promoting RCs to Stable
- Patch Releases
- Special Topics
Releasing a new version of PyTorch generally entails 3 major steps:
- Cutting a release branch and making release branch specific changes
- Drafting RCs (Release Candidates), and merging cherry picks
- Promoting RCs to stable
Release branches are typically cut from the branch viable/strict
as to ensure that tests are passing on the release branch.
There's a convenience script to create release branches from current viable/strict
(from root pytorch/pytorch
):
DRY_RUN=disabled scripts/release/cut-release-branch.sh
This script should create 2 branches:
release/{MAJOR}.{MINOR}
orig/release/{MAJOR}.{MINOR}
Convenience script can also be used domains as well as pytorch/builder
NOTE: RELEASE_VERSION only needs to be specified if version.txt is not available in root directory
DRY_RUN=disabled GIT_BRANCH_TO_CUT_FROM=main RELEASE_VERSION=1.11 scripts/release/cut-release-branch.sh
These are examples of changes that should be made to release branches so that CI / tooling can function normally on them:
- Update backwards compatibility tests to use RC binaries instead of nightlies
- Example: pytorch#40706
- A release branches should also be created in
pytorch/xla
andpytorch/builder
repos and pinned inpytorch/pytorch
- Example PR (CircleCI, to be removed): pytorch#65433
- Example PR (GHA): pytorch#72739
These are examples of changes that should be made to the default branch after a release branch is cut
- Nightly versions should be updated in all version files to the next MINOR release (i.e. 0.9.0 -> 0.10.0) in the default branch:
- Example: pytorch#65435
Create a PR from release/{MAJOR}.{MINOR}
to orig/release/{MAJOR}.{MINOR}
in order to start CI testing for cherry-picks into release branch.
Example:
To draft RCs, a user with the necessary permissions can push a git tag to the main pytorch/pytorch
git repository.
The git tag for a release candidate must follow the following format:
v{MAJOR}.{MINOR}.{PATCH}-rc{RC_NUMBER}
An example of this would look like:
v1.8.1-rc1
Pushing a release candidate should trigger the binary_builds
workflow within CircleCI using pytorch/pytorch-probot
's trigger-circleci-workflows
functionality.
This trigger functionality is configured here: pytorch-circleci-labels.yml
Release candidates are currently stored in the following places:
- Wheels: https://download.pytorch.org/whl/test/
- Conda: https://anaconda.org/pytorch-test
- Libtorch: https://download.pytorch.org/libtorch/test
Backups are stored in a non-public S3 bucket at s3://pytorch-backup
Typically within a release cycle fixes are necessary for regressions, test fixes, etc.
For fixes that are to go into a release after the release branch has been cut we typically employ the use of a cherry pick tracker.
An example of this would look like:
Please also make sure to add milestone target to the PR/issue, especially if it needs to be considered for inclusion into the dot release.
NOTE: The cherry pick process is not an invitation to add new features, it is mainly there to fix regressions
Promotion of RCs to stable is done with this script:
pytorch/builder:release/promote.sh
Users of that script should take care to update the versions necessary for the specific packages you are attempting to promote.
Promotion should occur in two steps:
- Promote S3 artifacts (wheels, libtorch) and Conda packages
- Promote S3 wheels to PyPI
NOTE: The promotion of wheels to PyPI can only be done once so take caution when attempting to promote wheels to PyPI, (see pypi/warehouse#726 for a discussion on potential draft releases within PyPI)
A patch release is a maintenance release of PyTorch that includes fixes for regressions found in a previous minor release. Patch releases typically will bump the patch
version from semver (i.e. [major].[minor].[patch]
Patch releases should be considered if a regression meets the following criteria:
- Does the regression break core functionality (stable / beta features) including functionality in first party domain libraries?
- First party domain libraries:
- Is there not a viable workaround?
- Can the regression be solved simply or is it not overcomable?
NOTE: Patch releases should only be considered when functionality is broken, documentation does not typically fall within this category
Main POC: Triage Reviewers
- Tag issues / pull requests that are candidates for a potential patch release with
triage review
- Triage reviewers will then check if the regression / fix identified fits within above mentioned Patch Release Criteria
- Triage reviewers will then add the issue / pull request to the related milestone (i.e.
1.9.1
) if the regressions if found to be within the Patch Release Criteria
Main POC: Patch Release Managers
- After regressions / fixes have been triaged Patch Release Managers will work together and build /announce a schedule for the patch release
- NOTE: Ideally this should be ~2-3 weeks after a regression has been identified to allow other regressions to be identified
- Patch Release Managers will work with the authors of the regressions / fixes to cherry pick their change into the related release branch (i.e.
release/1.9
for1.9.1
)
Main POC: Patch Release managers
- Patch Release Managers will follow the process of Drafting RCs (Release Candidates)
- Patch Release Managers will follow the process of Promoting RCs to Stable
In the event a submodule cannot be fast forwarded and a patch must be applied we can take two different approaches:
- (preferred) Fork the said repository under the pytorch Github organization, apply the patches we need there, and then switch our submodule to accept our fork.
- Get the dependencies maintainers to support a release branch for us
Editing submodule remotes can be easily done with: (running from the root of the git repository)
git config --file=.gitmodules -e
An example of this process can be found here: