What happened?

For reliability reasons, Fedora infrastructure is moving from ZeroMQ based fedmsg to AMQP based fedora-messaging. In Copr project we went through the transition as well and copr backend now communicates with the new bus directly (for the transition period, there’s fedmsg <==> fedora-messaging proxy).

The new bus policies required us to provide schemas for copr messages, so those are now provided in python3-copr-messaging package.

How to consume now?

The easiest way is to install python3-copr-messaging package, and use fedora-messaging tool from command-line:

$ fedora-messaging --conf /etc/fedora-messaging/fedora.toml \
    consume --routing-key '#.copr.#'
Copr Message in project "@copr/copr-dev": build 1031266: chroot "fedora-29-ppc64le" ended as "succeeded".
Copr Message in project "decathorpe/elementary-nightly": build 1031275: chroot "fedora-30-x86_64" started.

But usually one needs a better filtering capabilities, or somehow react on the messages. That is fairly easy now:

#! /usr/bin/python3

from copr_messaging import fedora

class Consumer(fedora.Consumer):
    def build_chroot_ended(self, message):
        if message.project_full_name != 'praiskup/ping':
        if message.chroot != "fedora-rawhide-x86_64":
        # do something useful here...

    def build_chroot_started(self, message):

Note that the message object automatically carries the full type information, so you can enjoy the schema capabilities in your code (e.g. the property project_full_name). And what is more important – the schema provides the message API – so once you use that, your code will continue to work even if we eventually changed the plain text json message format in future.

For more info about Copr messagies API see documentation.

Notice! At the time of writing this blog post, users still can listen on fedmsg (as Mirek blogged about it) because there’s the fedmsg-to-fedora-messaging proxy, but everyone should make sure to move soon.