README.md

MBI

An alternative approach to module packaging. In Fedora, modulemd is an input document - packagers create and maintain modulemd, which is used by MBS to build modules. MBI uses a reverse approach - modulemd is generated out of individual packages built and maintained by contributors.

In MBI modulemds exist merely as machine-generated objects that are required for DNF and MBS to work. MBI contributors don't need to work with modulemd at all.

MBI workflow

Summary:

  • MBI contributors develop modules using familiar tools (fedpkg, koji, mock, koschei) known from maintenance of non-modular packages

  • major changes can be implemented quickly and freely, without possibly affecting users

  • package downgrades and regressions are allowed and harmless

  • rpm changelog entries don't have to be added with each tiny change

  • spec release bumps are not required - every build has unique, increasing %{dist} tag

  • modules developed in MBI are meant to be eventually released to Fedora (and/or other distros), but not directly to end users

Packaging workflow:

  • MBI contributor pushes rpms chanes to MBI dist-git

  • MBI contributor builds rpms in MBI Koji

  • MBI contributor watches for feedback from MBI Koschei and fixes any possible breakage

  • MBI contributor watches for automated test results and fixes any possible problems

Compose process:

  • modulemds are generated out of packages built in MBI Koji

  • modules are composed out of generated modulemds and packages built in MBI Koji

  • automated module tests are ran against all supported platforms

  • modules that pass automated testing are marked as possible candidates for releasing to Fedora

Release process:

  • Fedora packager makes sure that MBI Koschei reports no problems and that MBI module tests are passing

  • Fedora pacakger takes source code from MBI and follows standard Fedora procedures to have modules built and released in Fedora:

  • completes package reviews as needed (for new or unretired components)

  • requests creation of arbitrary branches

  • merges changes to dist-git (which may require adding changelog and bumping release),

  • submits MBS builds, creates Bodhi updates

  • and so on

MBI infrastructure

  • accounts: Fedora FAS - all MBI contributors must have Fedora accounts and sign FPCA

  • dist-git - forks in Fedora dist-git: https://src.fedoraproject.org/user/mbi/forks

  • MBI lookaside cache - overlay over Fedora lookaside cache (anything pushed to Fedora lookaside cache becomes immediately available in MBI, but it is also possible to push things directly to MBI lookaside cache, eg. before new package passes review in Fedora)

  • MBI Koji - https://koji.kjnet.xyz/

  • MBI Koschei - https://koschei.kjnet.xyz/

  • MBI composer (no web interface)