Release Process¶
(Work In Progress)
Release Timeline and Schedule¶
Kokkos follows a time-based release schedule to provide predictable updates to the community:
Major releases (X.0.0): Every 3 years
Minor releases (X.Y.0): Every 4 months
Patch releases (X.Y.Z): As needed for bug fixes
Annual Release Cadence¶
Kokkos follows a three-cycle annual schedule with releases in March, July, and November:
Month |
Activity |
Notes |
|---|---|---|
February |
Branch Creation |
Last week: Create |
March |
X.Y.0 Release |
Mid-to-late March (3 weeks after branch creation) |
April |
Patch Release |
X.Y.1 released if needed (~6 weeks after branch creation) |
May |
Patch Releases |
X.Y.2+ released as needed |
June |
Branch Creation |
Last week: Create next release candidate branch |
July |
X.Y.0 Release |
Mid-to-late July |
August |
Patch Release |
X.Y.1 released if needed |
September |
Patch Releases |
X.Y.2+ released as needed |
October |
Branch Creation |
Last week: Create next release candidate branch |
November |
X.Y.0 Release |
Mid-to-late November |
December |
Patch Release |
X.Y.1 released if needed |
Release Cycle Timeline¶
Each minor release follows a structured timeline:
Week 0: Release branch created (last week of Feb/Jun/Oct)
- Feature freeze for this release
- Develop branch version bumped to X.Y.99
Week 1-3: Testing and stabilization phase
- Cherry-pick critical fixes
- Run extended CI and integration tests
- Update changelog and documentation
Week 3: X.Y.0 Released (mid-to-late Mar/Jul/Nov)
- Create Git tag
- Publish GitHub release
- Announce to community
Week 5: Release briefing
Week 6: X.Y.1 Released (as needed)
- First patch release with accumulated bug fixes
Week 6-17: X.Y.2+ Released (as needed)
- Additional patches for critical issues
Week 17: Next release branch created
- Cycle repeats (approximately 4 months or 17 weeks)
Release Phase Guidelines¶
Weeks 0-1 (Early Release Candidate):
Cherry-pick bug fixes, and feature completions
Broad testing across supported platforms
Documentation updates
Weeks 2-3 (Late Release Candidate):
Increasingly conservative - focus on critical bugs and regressions only
Final documentation review
Changelog finalization
Week 3 onwards (Post-Release):
Patch releases follow stricter criteria (bug fixes only)
Maintain API compatibility with X.Y.0
Note
The release schedule may be adjusted for holidays, critical bugs, or coordination with major downstream projects.
Create Release Branch and Update Project Version¶
(For maintainers)
Note
Version Numbering Scheme
Development versions use .99 as the patch number to ensure they always
compare as more recent than any release in that series (e.g., 4.2.99 >
4.2.5). This allows code to reliably discriminate between development
and release versions.
Feature Releases (X.Y.0)¶
Important
Steps 1-7 must be completed in sequence without merging other changes to
develop. This ensures accurate version tracking throughout the codebase.
Check that the
developbranch is in decent shape with the Continuous Integration Working Group, that all nightly builds are passing, and that there are no outstanding issues in the integration testing.Create the release candidate branch:
git checkout -b release-candidate-X.Y.0
Update the version number to
X.Y.0in the rootCMakeLists.txt:
# Edit these lines in CMakeLists.txt:
set(Kokkos_VERSION_MAJOR X)
set(Kokkos_VERSION_MINOR Y)
set(Kokkos_VERSION_PATCH 0)
Then commit the change:
git commit -s -m 'Set version number to X.Y.0' CMakeLists.txt
Push the release candidate branch to the upstream repository:
git push https://github.com/kokkos/kokkos.git release-candidate-X.Y.0
Create and checkout a new
bump_version_numberbranch withdevelopas the starting point:
git checkout -b bump_version_number develop
Update the version from
X.(Y-1).99toX.Y.99in the rootCMakeLists.txt:
# Edit these lines in CMakeLists.txt:
set(Kokkos_VERSION_MAJOR X)
set(Kokkos_VERSION_MINOR Y)
set(Kokkos_VERSION_PATCH 99)
Then commit the change:
git commit -s -m 'Bump version from X.(Y-1).99 to X.Y.99' CMakeLists.txt
Push to your fork and open a pull request against the
developbranch:
git push <your-fork-remote> bump_version_number
This pull request must be merged immediately before any other feature PRs to maintain version integrity in the development branch.
Open a tracker issue for the
X.(Y+1)changelog and pin it to the repository (use GitHub’s “Pin issue” feature). Unpin the oldX.Ychangelog issue. Use the old issue as a template, keeping all sections but clearing the entries.Notify developers on the #nucleus channel that the release branch has been created and that the version bump PR needs to be merged as the next change to
develop.
Patch Releases (X.Y.Z)¶
Patch releases are created from the previous release tag to incorporate critical bug fixes into an existing release series.
Note
Unlike feature releases, patch releases do not require updating the
develop branch version, as it already uses the .99 patch number for
the current development series.
Create the release candidate branch from the latest patch release tag:
git checkout -b release-candidate-X.Y.(Z+1) X.Y.Z
Update the version number from
X.Y.ZtoX.Y.(Z+1)in the rootCMakeLists.txt:
# Edit these lines in CMakeLists.txt:
set(Kokkos_VERSION_MAJOR X)
set(Kokkos_VERSION_MINOR Y)
set(Kokkos_VERSION_PATCH Z+1)
Then commit the change:
git commit -s -m 'Bump version from X.Y.Z to X.Y.(Z+1)' CMakeLists.txt
Push the release candidate branch to the upstream repository:
git push https://github.com/kokkos/kokkos.git release-candidate-X.Y.(Z+1)
Proceed to cherry-picking approved changes (see next section).
Cherry-Picking Changes into Release Candidates¶
General Workflow
Changes should follow the develop-first workflow unless there is an exceptional reason, such as:
Develop has diverged significantly, making cherry-picking impractical
Develop is temporarily broken or in an untestable state
The bug only exists in the release branch due to subsequent fixes in develop
Develop contains incompatible changes requiring a fundamentally different fix
Merge to develop first: All changes must be integrated and tested on the
developbranch before being considered for backporting.Get authorization: Once merged to develop, obtain approval from a maintainer, through the weekly developer meeting, or on the #nucleus channel before backporting.
Open cherry-pick PR: Create a pull request targeting the release candidate branch with:
Title format:
[X.Y.Z] Original Well-Crafted Subject LineDescription starts with: “Cherry-picking the changes from PR #1234 into the X.Y.(Z+1) release candidate branch”
Tip
Developers are encouraged (but not required) to seek approval before opening the backport PR to avoid unnecessary work if the change is deemed inappropriate for the release.
Scope Guidelines for Feature Release Candidates (X.Y.0)
During the release candidate phase for a new feature release, patches should be limited to:
Bug fixes discovered during testing
Important optimization improvements that significantly impact performance
Completion of features that were started before the branch was created
Warning
As the release date approaches, patches should be increasingly conservative and limited to:
Critical bugs that affect core functionality
Regressions from the previous release
Build system failures on supported platforms
Scope Guidelines for Patch Releases (X.Y.Z, Z > 0)
Patches for bug fix releases have stricter requirements:
Bug fixes only (preferred)
Very safe and critical performance improvements (requires strong justification)
Must maintain full API compatibility with the X.Y.0 release
Important
Patch releases exist to provide stability for users who have already deployed the X.Y.0 release. Breaking changes of any kind are not acceptable.
Final Tasks¶
(For maintainers)
Automated Steps
Tag and push the release:
git tag --sign X.Y.Z
git push https://github.com/kokkos/kokkos.git X.Y.Z
The release workflow will automatically generate downloadable source code
archives (.zip and .tar.gz) for the X.Y.Z Git tag, it will compute
the corresponding SHA-256 checksums, create a kokkos-X.Y.Z-SHA-256.txt
file, and upload them to the release page.
It will draft release notes with tables gathering links to the source
distributions and summary files.
Manual Verification Steps
Verify checksums:
Once the GitHub CI Action has run, download and verify the integrity of the generated artifacts:
sha256sum -c kokkos-X.Y.Z-SHA-256.txt
Sign the checksum file:
gpg --detach-sig --armor kokkos-X.Y.Z-SHA-256.txt
Publish the Release
4. Navigate to the release page on GitHub (https://github.com/kokkos/kokkos/releases/latest):
Click the “Edit” button
Adjust the release date to
YYYY-MM-DDIn the release notes, add your GPG signing key information (e.g.,
Digitally signed with [Key short ID](link-to-public-key))Upload the
kokkos-X.Y.Z-SHA-256.txt.ascsignature fileClick “Update release”
Double-check that everything looks good. Congratulations, the release is shipped!
Note
The CI/CD Action publishes the X.Y.Z release as the “Latest” release on
GitHub. If this is a patch release for an older version (e.g., releasing
4.7.3 after 5.0.0 is already out), you may need to manually change which
release is marked as “Latest”.