This section will guide you through the whole process of adding a new module to Fedora. There is also an official process for adding new modules which will give you a summary of the major steps you need to undergo, and is the authoritative point of truth.

Step 1: Get your RPM packages in place

Goal: Get your RPM package(s) pushed into the Fedora Distribution Git (dist-git).

Workflow Summary:

  1. Create your new RPM package.

  2. Submit your package for Fedora Review.

  3. Request a new repository and a branch in dist-git.

  4. Push your package sources into dist-git.

Details:

When creating your new RPM package, please make sure it complies with the Fedora Packaging Guidelines.

To learn about the Fedora review, requesting repositories and branches, and pushing sources to dist-git, please see the Fedora Package Review Process

Step 2: Get your module definition in place

Goal: Get your module definition pushed into the Fedora Distribution Git (dist-git).

Steps:

  1. Write a modulemd.

  2. Request a new repository and a branch in dist-git.

  3. Push your modulemd into dist-git.

Details:

Writing a modulemd is covered in detail in the Defining Modules in modulemd section.

Running the following fedpkg commands requires a ticket to be created at https://pagure.io/settings/token/new and saved in \~/.config/rpkg/fedpkg.conf
Please remember that the name of your module will be the name of your repository. The same way, the stream name of your module will be the name of the branch. Both of these will be visible to users.

To request a new repository in dist-git, for example for a nodejs module, run:

$ fedpkg --module-name modules/nodejs request-repo --exception

And to request a new branch, for example for a nodejs:10 module, run:

$ fedpkg --module-name modules/nodejs request-branch 10

To push your modulemd into dist-git, clone the dist-git repository, change to the correct branch, add your modulemd, and push it as you would in git.

Please make sure that the name of your modulemd file matches the name of the dist-git repository.

For example, to push the nodejs:10 module definition, run:

$ fedpkg clone modules/nodejs
$ cd nodejs
$ git checkout 10
$ vim nodejs.yaml
$ git add nodejs.yaml
$ git commit -m "add the initial modulemd"
$ git push

Step 3: Build your module

Goal: Get your packages built as a module.

Steps:

  1. Submit a module build using fedpkg.

  2. Make sure your build succeeded.

Details:

Module builds are triggered using fedpkg from whithin your dist-git repository.

For example, to submit a build of the nodejs:10 module, run:

$ fedpkg clone modules/nodejs
$ cd nodejs
$ git checkout 10
$ fedpkg module-build
Please note the module build ID. You will need it to verify the build state. It also helps you in the next step.

To watch the satate of your module build, run:

$ fedpkg module-build-watch BUILD_ID

When the module is in a "ready" state, you can continue to the next step.

Step 4: Make your module available to users

Goal: Make your module go through Bodhi — the Fedora updates system.

Steps:

  1. Submit your module as an update in Bodhi.

  2. Make sure your update has passed potential user testing.

Details:

To submit your module as an update, go to Fedora Bodhi. Make sure you are logged in, and then click on Create / New Update at the top-right corner. Fill out the following fields:

  • Candidate Builds: MODULE_BUILD_ID

  • Update notes: notes for the users

  • Final details: check what applies

One way of geting the MODULE_BUILD_ID is running the same command as in the previous step:

$ fedpkg module-build-watch BUILD_ID

and changing the "koji tag" value in the following way:

module-nodejs-10-20180607142235-6c81f848   <- koji tag
       nodejs-10-20180607142235.6c81f848   <- MODULE_BUILD_ID

that is removing the "module-" part at the beginning, and replacing the last "-" with a ".".