RELEASE_PROCESS.md
Podman (and podman-remote) versioning is mostly based on semantic-versioning
standards.
Significant versions
are tagged, including release candidates (rc).
All relevant minor releases (vX.Y) have their own branches. The latest
development efforts occur on the main branch. Branches with a
rhel suffix are use for long-term support of downstream RHEL releases.
git operations and concepts, like creating commits,
local vs. remote branches, rebasing, and conflict resolution.Upstream major or minor releases occur the 2nd week of February, May, August, November. Branching and RC's may start several weeks beforehand. Patch releases occur as-needed.
These releases always begin from main, and are contained in a branch
named with the major and minor version. Major release branches
begin in a release candidate phase, with prospective release tags being
created with an -rc suffix. There may be multiple release candidate
tags before the final/official major version is tagged and released.
Significant minor and patch level releases are normally
branched from main, but there are occasional exceptions.
Additionally, these branches may be named with -rhel (or another)
suffix to signify a specialized purpose. For example, -rhel indicates
a release intended for downstream RHEL consumption.
Non-release versions may occasionally appear tagged on a branch, without the typical (major) receive media postings or artifact distribution. For example, as required for the (separate) RHEL release process. Otherwise these tags are simply milestones of reference purposes and may generally be safely ignored.
Note: This is intended as a guideline, and generalized process. Not all steps are applicable in all situations. Not all steps are spelled with complete minutiae.
Create a new upstream release branch (if none already exist).
Check if a release branch is needed. All major and minor releases should be branched before RC1. Patch releases typically already have a branch created. Branching ensures all changes are curated before inclusion in the release, and no new features land after the release-candidate phases are complete.
Ensure your local clone is fully up to date with the remote upstream
(git remote update). Switch to this branch (git checkout upstream/main).
Make a new local branch for the release based on main. For example,
git checkout -b vX.Y. Where X.Y represent the complete release
version-name, including any suffix (if any) like -rhel. DO NOT
include any -rc suffix in the branch name.
Push the new branch otherwise unmodified (git push upstream vX.Y).
Check if a release branch is needed on the podman-machine-os repo.
If so, repeat above steps for podman-machine-os.
Back on the podman repo, automation will begin executing on the branch immediately.
Because the repository allows out-of-sequence PR merging, it is possible that
merge order introduced bugs/defects. To establish a clean
baseline, observe the initial CI run on the branch for any unexpected
failures. This can be done by going directly to
https://cirrus-ci.com/github/containers/podman/vX.Y
If there are CI test or automation boops that need fixing on the branch, attend to them using normal PR process (to main first, then backport changes to the new branch). Ideally, CI should be "green" on the new branch before proceeding.
Create a new branch-verification Cirrus-Cron entry.
name and branch to the name of new release branch.expression using the form X X X ? * 1-6 where 'X' is a number
between 0-23 and not already taken by another job in the table. The 1-hour
interval is used because it takes about that long for the job to run.+ button on the right-side of the
new-entry line.Create a new local working-branch to develop the release PR
git remote update).upstream/main or the correct upstream branch.
Example: git checkout -b bump_vX.Y.Z --no-track upstream/vX.YCompile release notes.
Ensure any/all intended PR's are completed and merged prior to any processing of release notes.
Find all commits since the last release. There is a script, /hack/branch_commits.rb
that is helpful for finding all commits in one branch, but not in another,
accounting for cherry-picks. Commits in base branch that are not in
the old branch will be reported. ruby branch_commits.rb upstream/main upstream/vX.Y
Keep this list open/available for reference as you edit.
Edit RELEASE_NOTES.md
Add/update the version-section of with sub-sections for Features
(new functionality), Changes (Altered podman behaviors),
Bugfixes (self-explanatory), API (All related features,
changes, and bugfixes), and Misc (include any major
library bumps, e.g. c/buildah, c/storage, c/common, etc).
Use your merge-bot reference PR-listing to examine each PR in turn, adding an entry for it into the appropriate section.
Use the list of commits to find the PR that the commit came from. Write a release note if needed.
Commit the RELEASE_NOTES.md changes, using the description
Create release notes for vX.Y.Z (where X, Y, and Z are the
actual version numbers).
Open a Release Notes PR, or include this commit with the version bump PR.
Update version numbers and push tag
version/rawversion/version.go and bump the Version value to the new
release version. If there were API changes, also bump APIVersion value.
Make sure to also bump the version in the swagger.yaml pkg/api/server/docs.go
For major and minor versions also add the new version to
docs/source/_static/versions.json to show the new swagger version on docs.podman.io.git commit -a -s -S). The commit message
should be Bump to vX.Y.Z (using the actual version numbers).Optional Release Test. In the right-hand window pane, click
the trigger button and wait for the test to go green. This is a
critical step which confirms the commit is worthy of becoming a release.podman-machine-os pr in a comment on the podman PR
This action also automatically applies the do-not-merge/wait-machine-image-build to the Podman PR, which blocks merging until VM images are built and published.podman-machine-os bump pr, by clicking the link in the comment, or by finding it in the podman-machine-os repo.
podman-machine-os bump PRpodman-machine-os bump commit with the same version as the podman release. (git tag -s -m 'vX.Y.Z' vX.Y.Z)podman-machine-os repo. Wait for this task to complete. You can monitor the task on the Cirrus CI dashboarddo-not-merge/wait-podman-machine-os label should be automatically
un-set once the podman-machine-os release is finished.Bump to vX.Y.Z commit as a release by running
git tag -s -m 'vX.Y.Z' vX.Y.Z $HASH where $HASH is specified explicitly and carefully, to avoid (basically) unfixable accidents
(if they are pushed).git push upstream vX.Y.ZMonitor release automation
Locate, Verify release testing is proceeding
https://github.com/containers/podman/tags and finding the recent entry
for the pushed tag. Under the tag name will be a timestamp and abbrieviated
commit hash, for example <> 5b2585f. Click the commit-hash link.Update Cirrus-CI cron job list
-rhel) releases, it's critical to
maintain the Cirrus-CI cron job list. This applies to all containers-org repos,
not just podman.https://cirrus-ci.com/github/containers/<repo name>
and clicking the gear-icon in the upper-right.-rhel) releases, (e.x. vX.Y), the previous release
should be removed from rotation (e.x. vX.<Y-1>) assuming it's no longer supported.
Simply click the trash-can icon to the right of the job definition.-rhel releases, these are tied to products with specific EOL dates. They should
never be disabled unless you (and a buddy) are absolutely certain the product is EOL
and will never ever see another backport (CVE or otherwise).12 12 12 ? * 1-6, choose another. Any
spec. H/M/S value between 12 and 22 is acceptable (e.x. 22 22 22 ? * 1-6).
The point is to not overload the clouds with CI jobs.Announce the release