For each release cycle, we dedicate a team of two individuals, one from Eventing and one from Serving, to shepherd the release process. Participation is voluntary and based on good faith. We are only expected to participate during our local office hour.
We seed this rotation with all approvers from all the Serving and Eventing workgroups, excluding productivity. If you are no longer active in Knative, or if you are contributing on personal capacity and do not have time to contribute in the rotation, feel free to send a PR to remove yourself.
This roster is seeded with all approvers from Serving workgroups.
- dprotaso
- julz
- JRBANCEL
- markusthoemmes
- mattmoor
- nak3
- tcnghia
- vagababov
- yanweiguo
- ZhiminXiang
This roster is seeded with all approvers from Eventing workgroups.
- evankanderson
- grantr
- Harwayne
- lionelvillard
- matzew
- n3wscott
- nachocano
- slinkydeveloper
- vaikas
Release | Release Date | Serving | Eventing | Unpin repos | PKG cut |
---|---|---|---|---|---|
v0.17 | 2020-08-18 | yanweiguo | Harwayne | - | 2020-08-11 |
v0.18 | 2020-09-29 | ZhiminXiang | n3wscott | 2020-08-19 | 2020-09-22 |
v0.19 | 2020-11-10 | julz | n3wscott | 2020-09-30 | 2020-11-03 |
v0.20 | 2021-01-12 | nak3 | slinkydeveloper | 2020-11-11 | 2021-01-07 |
v0.21 | 2021-02-23 | mattmoor | lionelvillard | 2021-01-13 | 2021-02-16 |
v0.22 | 2021-04-06 | markusthoemmes | evankanderson | 2021-02-24 | 2021-03-30 |
v0.23 | 2021-05-18 | tcnghia | vaikas | 2021-04-07 | 2021-05-11 |
v0.24 | 2021-06-29 | dprotaso | matzew | 2021-05-19 | 2021-06-22 |
v0.25 | 2021-08-10 | vagababov | grantr | 2021-06-30 | 2021-08-03 |
v0.26 | 2021-09-21 | JRBANCEL | ... | 2021-08-11 | 2021-09-14 |
NOTE: v0.20 is moved by 3 weeks for end of year holidays
We release the components of Knative every 6 weeks. All of these components must be moved to the latest "release" of all shared dependencies prior to each release.
Check to make sure you already are in the "Knative Release Leads" team in https://github.com/knative/community/blob/master/peribolos/knative.yaml and https://github.com/knative/community/blob/master/peribolos/knative-sandbox.yaml . If not, send a PR like this one to grant yourself some super power.
Ask someone from the TOC to create a release-#
Slack channel that will be
used to help manage this release.
Update the defaults in knative-releasability.yaml to this release. These changes will be propagated to the rest of Knative in the next round of workflow syncs.
Announce on #general that pkg
will be cut in a week.
Announce on #general that the release will be cut in a week and that additional caution should be used when merging big changes.
Make a new HackMD release notes document. last release notes document, empty it out and send it to the WG leads of the respective project (serving or eventing) to fill in. Coordinate with both serving and eventing leads.
Each repo has a Release Notes
GitHub Action workflow. This can be used to
generate the starting point for the release notes. See an example in
Eventing.
The default starting and ending SHAs will work if running out of the master
branch, or you can determin the correct starting and ending SHAs for the script
to run.
If the
Releasability
script reports a "GO", then the repo is ready to cut the release-v.y
branch.
This can be done by using the GitHub UI:
-
Click on the branch selection box at the top level page of the repository.
-
Search for the correct
release-x.y
branch name for the release. -
Click "Create branch: release-x.y".
If the Releasability script reported a "NO-GO", the repo needs to be updated. This can be performed by running the the Knobots Auto Updates workflow, or making a PR to update master from the results of running a manul update deps:
RELEASE=0.19
./hack/update-deps.sh --upgrade --release ${RELEASE}
After a release-x.y
branch exists, a 4 hourly prow job will produce the label
and GitHub Release. Update the description of the release with the release notes
collected. Can't wait 4 hours?
Manually trigger the auto-release job.
If you need or want to perform the release branch cutting process locally, here is how:
Prerequisite: Install the buoy tool.
We have staged releasibility status checks that are sent to the release Slack channel to give alerts when things are ready to go. You can manually run that for each repo before cutting the release branch,
RELEASE=0.19
[email protected]:knative/example.git
tmpdir=$(dirname $(mktemp -u))
cd ${tmpdir}
git clone ${REPO}
cd "$(basename "${REPO}" .git)"
if buoy check go.mod --domain knative.dev --release ${RELEASE} --verbose; then
git checkout -b release-${RELEASE}
./hack/update-deps.sh --upgrade --release ${RELEASE}
# consistency check, shouldnt do anything
echo "There should be no changes to git:"
git status
fi
Then to push the release branch if no changes.
git push origin release-${RELEASE}
Otherwise, make a PR to master to update the repo. After that merges then try the above script again.
Note: This assumes the upstream knative github repo is a remote called origin.
This should be done for each repo following the dependency chain and required timing.
-
Navigate to https://prow.knative.dev/
-
Search for the
*-auto-release
job for the repository. -
Rerun the auto-release job.
We need to start cutting release branches in each module that does not produce a release artifact, but we will do it from least dependent to most dependent. Follow the cutting release branches guide, starting with the hack repo:
After hack:
After pkg:
Automation will propagate these updates to all the downstream repos in the next
few cycles. The goal is to have the first wave of repo releases (serving,
eventing, etc) to become "releasabile" by the end of the week. This is
signaled via the Slack report of releasability posted to the release-#
channel every morning (5am PST, M-F).
The automation used to cut the actual releases is the very same as the automation used to cut nightly releases. Verify via testgrid that all relevant nightly releases are passing. If they are not coordinate with the relevant WG leads to fix them.
Confirm with the respective WG leads that the release is imminent and obtain green light.
Follow the cutting release branches instructions for each repo. Wait for release automation to kick in (runs on a 2 hour interval). Once the release automation passed, it will create a release tag in the repository. Enhance the respective tags with the collected release-notes using the GitHub UI.
In general the release dependency order is something like the following (as of
v0.19). Note: buoy check
will fail if the dependencies are not yet ready.
First:
After serving:
After eventing:
- knative-sandbox/eventing-awssqs
- knative-sandbox/eventing-camel
- knative-sandbox/eventing-ceph
- knative-sandbox/eventing-couchdb
- knative-sandbox/eventing-kafka
- knative-sandbox/eventing-kafka-broker
- knative-sandbox/eventing-natss
- knative-sandbox/eventing-prometheus
- knative-sandbox/eventing-rabbitmq
- knative-sandbox/sample-source
After both eventing and serving:
Lastly:
We have a few repos inside of Knative that are not handled in the standard process at the moment. They might have additional dependencies or depend on the releases existing. Skip these. Special cases are:
Send a PR like this one to grant ACLs for the next release leads, and to remove yourself from the rotation. Include the next release leads in the PR as a reminder.