- For newly supported Platform or Buildpack API versions, or breaking changes (e.g., API deprecations).
- Ideally we should ship a pre-release (waiting a few days for folks to try it out) before we ship a new minor.
- We typically don't ship pre-releases for patches or backports.
- For go version updates, CVE fixes / dependency bumps, bug fixes, etc.
- Review the latest commits on
main
to determine if any are unacceptable for a patch - if there are commits that should be excluded, branch off the latest tag for the current minor and cherry-pick commits over.
- New patch for an old minor. Typically, to help folks out who haven't yet upgraded from unsupported APIs.
- For go version updates, CVE fixes / dependency bumps, bug fixes, etc.
- Branch off the latest tag for the desired minor.
Determine the type of release (new minor, pre-release, new patch, or backport) and prepare the branch accordingly.
To prepare the release branch:
- Check open PRs for any dependabot updates that should be merged.
- Create a release branch in the format
release/0.99.0-rc.1
(for pre-releases) orrelease/0.99.0
(for final releases).- New commits to this branch will trigger the
build
workflow and produce a lifecycle image:buildpacksio/lifecycle:<commit sha>
.
- New commits to this branch will trigger the
- If applicable, ensure the README is updated with the latest supported apis (example PR: #550).
- For final releases (not pre-releases), remove the pre-release note (
*
) for the latest apis.
- For final releases (not pre-releases), remove the pre-release note (
For final releases (not pre-releases):
- Ensure the relevant spec APIs have been released.
- Ensure the
lifecycle/0.99.0
milestone on the docs repo is complete, such that every new feature in the lifecycle is fully explained in therelease/lifecycle/0.99
branch on the docs repo, and migration guides (if relevant) are included.
- Manually trigger the
draft-release
workflow: Actions -> draft-release -> Run workflow -> Use workflow from branch:release/<release version>
. This will create a draft release on GitHub using the artifacts from thebuild
workflow run for the latest commit on the release branch. - Edit the release notes as necessary.
- Perform any manual validation of the artifacts as necessary (usually none).
- Edit the release page and click "Publish release".
- This will trigger the
post-release
workflow that will re-tag the lifecycle image frombuildpacksio/lifecycle:<commit sha>
tobuildpacksio/lifecycle:<release version>
.- For final releases ONLY, this will also re-tag the lifecycle image from
buildpacksio/lifecycle:<commit sha>
tobuildpacksio/lifecycle:latest
.
- For final releases ONLY, this will also re-tag the lifecycle image from
- This will trigger the
For pre-releases:
- Ask the relevant teams to try out the pre-released artifacts.
For final releases:
- Update the
main
branch to remove the pre-release note in README.md and/or mergerelease/0.99.0
intomain
. - Ask the learning team to merge the
release/lifecycle/0.99
branch intomain
on the docs repo.
Go version updates should be released as a new minor or new patch release.
If the go patch is in actions/go-versions then CI should pull it in automatically without any action needed. We simply need to create the release branch and let the pipeline run.
We typically do this when the existing patch version exceeds 6 - e.g., 1.22.6
. This means we have about 6 months to upgrade before the current minor becomes unsupported due to the introduction of the new n+2 minor.
- Update go.mod
- Search for the old
major.minor
, there are a few files that need to be updated (example PR: https://github.com/buildpacks/lifecycle/pull/1405/files) - Update the linter to a version that supports the current
major.minor
- Fix any lint errors as necessary