We are moving to a release cadence of 3 months. We will try out this cadence and see if it's too aggressive or too modest and iterate accordingly. These are the timelines proposed for the process
Week | Event (Ideal timelines with 3 months of cadence) |
---|---|
1 | Development |
2 | Development |
3 | Development |
4 | Development |
5 | Development |
6 | Development |
7 | Development |
8 | Development |
9 | Development |
10 | Development |
11 | Development + Start the prep i.e. Announce/Reminder about upcoming feature freeze date in 2 weeks |
12 | Development (Last week of development) |
13 | Feature Freeze + RC0 Released + Documentation update starts |
14 | Testing |
15 | RC1 Released if necessary |
16 | Testing |
17 | RC2 Released if necessary |
18 | Testing + End of documentation |
19 | Final release |
In 11th week,
- Create an issue of type feature in kserve/kserve to start tracking the release process
- Copy paste the above timeline table in that issue and fill in the dates accordingly
- Announce the feature freeze and rest of the dates in the #kserve channel
We will be creating the first release candidate (RC0) on the feature freeze day that could be and should be consumed by the community in their pre-production environments to test for any
bugs that might have been introduced in recent development cycles.
Create a branch from the master and do the following:
- Update the version number in following places:
- VERSION to
${MAJOR}.${MINOR}.${PATCH}rc${RELEASE_CANDIDATE_VERSION}
(note that the dash before "rc" is removed intentionally to meet PyPI package version requirements) - quick_install.sh to
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
- Chart.yaml in kserve-crd to
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
- Chart.yaml in kserve-crd-minimal to
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
- Chart.yaml in kserve-resources to
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
- values.yaml in kserve-resources to
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
. In addition, bumpmodelmeshVersion
if it a newer version of ModelMesh is available. - Run
pre-commit run
to update the Helm chart documentation - The steps are automated in the script prepare-for-release.sh
9. To use it execute:
make bump-version NEW_VERSION=0.14.0-rc2 PRIOR_VERSION=0.14.0-rc1
10. Note the-
in the version, keep it, the version will be updated accordingly and the dash removed when needed.
- VERSION to
- Add a new version
v${MAJOR}.${MINOR}.${PATCH}-rc${RELEASE_CANDIDATE_VERSION}
in theRELEASES
array in generate-install.sh. Example: Refer this commit - Generate install manifest
./hack/generate-install.sh $VERSION
. - Run
./hack/python-release.sh
to update pyproject.toml files for all packages. - Run
make go-lint
from the Kserve root directory. Address any lint errors if found. - Submit your PR and wait for it to merge.
- After it is merged,
- Create a release branch of the form release-X.Y.Z from the master
- Create a release candidate tag X.Y.Z-rc0 from that branch and do git push for both the branch and tag
- Now goto GITHUB and from the recently pushed X.Y.Z-rc0 tag, create a release-candidate (basically a pre-release) on GITHUB
- With this you are done with the creation of RC0 for upcoming release
- Announce in the community about the availability of release-candidate so that community can start consuming and testing. And ask them to report bugs as soon as possible.
- After feature freeze date, now only bug fixes will be merged into the release branch.
After feature freeze, we will be merging only the bug fixes into the release branch and creating another release candidate (RC1) out of it. This is only needed if any bugs have been fixed after feature freeze. Otherwise, it is not needed Steps:
- Create a PR following the
Step 1-3
from the above section and bump up the version torc1
in all the places and label it withcherrypick-approved
- Get this PR reviewed and merged to the master
- Now, cherry-pick the
merge commits
that have come out of PRs labeled withcherrypick-approved
into the release branch (including the just created PR in step 1 in this section) Note: Make sure merged commits are cherry-picked in the order they were merged. Cherry-picking should not result in any sort of merge conflicts since no one is working on release branch. - After all the commits have been cherry-picked into the release branch,
- Create a release candidate tag X.Y.Z-rc1 from that branch and do git push for both the branch and the tag
- Now goto GITHUB and from the recently pushed X.Y.Z-rc1 tag, create a release-candidate (basically a pre-release) on GITHUB
- With this you are done with the creation of RC1 for upcoming release
- Announce in the community about the availability of release-candidate so that community can start consuming and testing. And ask them to report bugs as soon as possible.
You can repeat same steps for RC2 or other release candidates if needed
We can use the GitHub action to automatically cherry-pick PRs. use the following comment
/cherry-pick release-branch
This will be the last commit before the release and last one to be cherry-picked into release branch. So, we have to update the release version in master to reflect the latest release we are at.
- Create a PR with the following changes to update the version number in the following places in the master:
- VERSION to
${MAJOR}.${MINOR}.${PATCH}
- quick_install.sh to
v${MAJOR}.${MINOR}.${PATCH}
- Chart.yaml in kserve-crd to
v${MAJOR}.${MINOR}.${PATCH}
- Chart.yaml in kserve-crd-minimal to
v${MAJOR}.${MINOR}.${PATCH}
- Chart.yaml in kserve-resources to
v${MAJOR}.${MINOR}.${PATCH}
- values.yaml in kserve-resources to
v${MAJOR}.${MINOR}.${PATCH}
- Run
pre-commit run
to update the Helm chart documentation
- VERSION to
- Add a new version
v${MAJOR}.${MINOR}.${PATCH}
in theRELEASES
array in generate-install.sh. Example: Refer this commit - Generate install manifest
./hack/generate-install.sh $VERSION
. - Run
./hack/python-release.sh
to update pyproject.toml files for all packages. - Run
make go-lint
from the Kserve root directory. Address any lint errors if found. - Submit your PR and wait for it to merge.
- Once merged, cherry-pick the
merge commits
that have come out of PRs labeled withcherrypick-approved
to the release branch (including the just created PR in step 1 in this section) - Create a release tag X.Y.Z from the release branch and do git push for both the branch and tag
- From that tag create the final release on GITHUB
- With this you are done with the creation of final release
- Announce in the community about the availability of release so that community can start consuming it