It’s time to revisit how we deal with cherry picks for Foreman & Katello stable branches. The primary aim is to evaluate the current processes and see if we can align both projects on the same workflow while also fixing other issues we see.
The opening post will contain the factual statements about the current flow. All proposals should be added in comments.
What is cherry picking?
A quick overview. Normally development happens in a single branch while there’s also a stable for each X.Y version. Cherry picking is the process of taking fixes from that development branch to the appropriate X.Y branches.
The process then roughly comes down to deciding if the fix is appropriate for the X.Y version. Some factors that can influence this:
- Is the bug present in X.Y?
- Is the bug critical enough to warrant a cherry pick?
- Does the fix in develop work on X.Y?
- Won’t the fix introduce other problems like regressions, behavior changes, require newer dependencies?
There can be more. Sadly this is a bit of a fuzzy area where you sometimes need experience to judge this. Because of that many maintainers err on the side of caution and avoid picking changes. Mostly because the last item (xkcd: Workflow).
Current status
Foreman and Katello have their own workflows, so they’re described separate. This is not desirable, but it is the status quo.
We are also dependent on Redmine for the processes, but Discussion on Future of Issue tracking in Foreman was opened about this.
To update Redmine we have automation to add the unreleased version for the target git branch to the Fixed in releases
field when a PR is merged. How it exactly works can be seen in the source. A practical example for the Foreman repository: when merging to develop
it adds 3.8.0
to the Fixed in releases
field. If you cherry pick to 3.7.0-stable, it adds 3.7.1
because those are the next versions to be released.
Foreman
Applies to:
- GitHub - theforeman/foreman: an application that automates the lifecycle of servers / Overview - Foreman
- GitHub - theforeman/foreman-installer: Automated Foreman installation and configuration / Overview - Installer - Foreman
- GitHub - theforeman/foreman-packaging: Packaging files (RPMs, debs) for Foreman and its dependencies / Overview - Packaging - Foreman
- GitHub - theforeman/foreman-selinux: SELinux policy for Foreman / Overview - SELinux - Foreman
- GitHub - theforeman/smart-proxy: RESTful proxies for DNS, DHCP, TFTP, BMC and Puppet / Overview - Smart Proxy - Foreman
Conventions:
- Development branch:
develop
- Stable branch:
X.Y-stable
Process:
Last time we talked we reached a conclusion.
The short summary is that in a weekly meeting the core team goes over merged PRs to decide what should be cherry picked. Explicit suggestions can be done using the Needs cherrypick
label.
It should be noted that attendance on the core maintainers call is low to the point that @MariaAga suggested to stop hosting it.
In addition to picking what’s already merged there is also the case that there may be a blocking bug for a release when a fix may not yet have been written (or merged). Today we can use the Target version
field in Redmine. This is a single value item, so that’s not great but we can write a query to find issues where target version is x.y.z and fixed in releases field doesn’t contain x.y.z.
Katello
I’m actually not entirely familiar with this, so I’m going to ask Katello maintainers to expand on this.
Applies to:
- GitHub - Katello/katello: Katello integrates open source systems management tools into a single solution for controlling the lifecycle of your machines. / Overview - Katello - Foreman
Conventions:
- Development branch:
master
- Stable branch:
KATELLO-X.Y
Process: