When do we run createrepo

There are several situations when we need to update repository metadata in copr repository.

We need to run createrepo when some build finishes so the built RPMs are distributed to the repository end-users. Similarly we need to update repodata when some build is removed.

Also, there’s no sophisticated “gating” mechanism in copr similar to Fedora’s Bodhi (aka updates vs updates-testing repositories). The alternative approach in Copr is to temporarily disable the “Auto Create Repo” feature (or ACR). With such configuration, copr instead creates the repodata in a separate directory named devel – so the subsequent builds still can be built against previously finished builds. With such configuration though, copr doesn’t re-generate the “production” repodata after each build automatically (even though there freshly built RPMs, they are not visible in repos) so project maintainers are fully responsible for recreating the “production” metadata manually when it is appropriate (in the web-UI - in project overview, hit the Regenerate Repositories button).

The following table describes situations when we execute /bin/createrepo_c.

situation

what copr dirs

what chroots

devel/normal repo

new Project created

main

all

normal + devel if not ACR

new chroot(s) added

all

only new chroots

Normal + devel if not ACR

new CoprDir added (pull-request)

the one just created

all

Normal + devel if not ACR

ACR toggle

all

all

normal if ACR else devel

post-build

affected

affected

normal if ACR else devel

manual createrepo event

all

all

normal

delete build event

affected

affected

both

prunerepo script

affected

affected

normal

The copr dirs can be either the default project directory (e.g. jsmith/coolproject), or pull-request directories (e.g. jsmith/coolproject:pr:100).