Multi-Build Updates
We are working on this workflow and will update this page and send an announcement when it is ready or available for testing. This is a work in progress and we would love to have your input on how this should work from a user experience perspective. Please reach out to us on `#fedora-ci` or get in touch with any member of the team.
You can find some hints about the direction we are taking in:
Our change proposal (the one approved by FESCo): link:https://fedoraproject.org/wiki/Changes/GatingRawhidePackages[]
Our project’s requirement document: link:https://fedoraproject.org/wiki/Infrastructure_2020/Rawhide_Gating[]
What Are Multi-build Updates?
Multi-build updates contain multiple builds that are tightly coupled together.
For compiled packages that rely on a certain ABI or soname, it is easy to understand how they are tightly coupled. However, non-binary programs can also have such strong dependencies.
For example, the packages link:https://src.fedoraproject.org/rpms/python-urllib3[rpms/python-urllib3] and link:https://src.fedoraproject.org/rpms/python-requests/[rpms/python-requests] are heavily linked. Updates to python-urllib3 need to take python-requests into consideration. Sometime the update is fine, sometime it needs to wait for a new version of python-requests, in which case both builds need to be tested together as one unit.
Packages of this style are candidates for the multi-build update workflow. They need to be built and tested together.
How Does Gating Multi-Builds Updates Work?
To gate updates involving multiple builds, we need to build and test in isolation from the other builds. That is, the CI system can take the builds, test them, gate them or let them pass through, without having to consider any other changes (i.e. packages/builds).
The workflow is as follows:
You first need to create a side-tag via ``fedpkg request-side-tag``. This will create a side-tag with a name such as ``<base-tag>-side-<id>``.
You can then build all the packages you want in this side-tag using: ``fedpkg build --target=<side-tag-name>``.
If you need to chain-build some packages and you want to be sure the previous one is available in the side-tag buildroot, use: ``koji wait-repo <side-tag-name> --build=<build-nvr>``.
Once you have built all the packages in your side-tag, you can create the bodhi update for this side-tag using either:
the bodhi web UI, in the new update form use the ``Use Side Tag`` button
the bodhi CLI ``bodhi updates new --from-tag``
Bodhi will then create two side-tags: