Video summary
The video introduces new enhancements to Packit's downstream release automation tools, designed to streamline the often tedious process of updating software packages for distributions like Fedora. The speaker outlines the core workflow where code originates from upstream repositories and is subsequently moved to downstream environments. Currently, the system handles version bumps and archive uploads, but the presentation focuses on how recent features reduce manual intervention. Two primary operational modes are discussed: a push workflow for maintainers who control both upstream and downstream sources, and a pull workflow that allows maintainers without upstream access rights to automate updates by reacting to release monitoring events.
Significant new capabilities include support for non-git upstreams, allowing automation even when source code is not hosted in a git repository, and improved handling of side tags for building multiple related packages simultaneously. The presentation also details the implementation of fast-forwarding, which enables creating pull requests for updates in Rawhide while automatically reusing those commits to open requests in other branches like Fedora releases. Additionally, the tool now supports Go projects by creating vendor archives and performing license checks, as well as running builds on ARM machines and within containerized environments to better replicate local testing conditions.
To address configuration complexity, the team has introduced features that simplify YAML setups by reducing duplication through top-level keys and distro aliases maintained by the COPR and openSUSE teams. The dashboard has been updated to better propagate errors from Koji builds and provide clearer logs, while a new action allows users to explicitly skip sync releases for pre-release versions like alpha or beta candidates. The speaker emphasizes that these improvements aim to make the automation process more user-friendly, secure by minimizing required permissions, and adaptable to various project structures without needing intricate custom configurations.
The session concludes with an invitation for community feedback through a user experience survey and upcoming workshops, highlighting that hundreds of packages already utilize these automated release mechanisms. The speaker answers questions regarding the flexibility of side tags, confirming that maintainers can manually tag specific packages into side decks if they choose not to release them in a particular cycle. Overall, the talk underscores Packit's commitment to evolving its automation tools to handle diverse packaging needs, from simple archive uploads to complex multi-package builds, ensuring that maintaining software distributions remains efficient and accessible for the broader packager community.
Read the full video transcript
start.
So, hello. My name is Matej. I'm from
the Packit team and uh today we will be
talking about uh new features that we
have in uh our downstream release
automation.
And uh
just out of interest, uh how many
packagers do we have here? If you are a
packager, please raise your hand.
Okay, that will be most of us. Cool. So,
and how many are using Packit on the
downstream?
Okay, that's a bit less. Okay, cool. So,
I will start by summing up also
what do we actually provide right now
and uh
what is basically what are the new
features related to and uh
how can we basically help you with uh
doing the boring work that uh nobody
likes to do, but well, somebody has to.
So, I will start with uh
the basic workflow that is. So, we have
some source code somewhere on the
upstream, GitHub, GitLab, Codeberg,
whatever.
And uh that's where the code lives.
That's where people work on it. And uh
then
we basically need to get it to
downstream to Fedora or Apple or
whatever.
So,
what do we do right now is uh look aside
cache and this git. So, we have uh one
place uh where we have the spec files
and uh sources that are used for the
builds. And also, we have the look aside
cache where we store the sources
themselves, the archives.
And uh yeah, so
upstream releases a new software a new
new version of the software. What we do,
we bump the version, hopefully upload
archive, and that's it. Most of the
time.
When no, then that's where the boring
becomes interesting and you don't want
that to happen.
So, for that we basically have two jobs
that can help you with that. That's
proposed downstream where you
where you basically control the
upstream. So, it's the basically the
push workflow. So, I maintain the
sources myself, but at the same time I
maintain the downstream. So, I can
basically just push the new versions
from the upstream to the downstream. And
then we also have the other way which is
pull from upstream. So, I'm just the
maintainer. I do not maintain the
upstream itself.
And uh
this one is basically
a bit more helpful to people that do not
maintain the upstream. So, I can do I
can automate some stuff even though I do
not have the right access to the
upstream parts.
Okay, so that's basically most of the
work that we do. So,
uploading the archives and
some magic spec files to get the new
version there.
And
yeah, that's the
big part. And then well, after the
release happens and after the maintainer
checks everything and accepts the
changes, the new version,
then it gets merged and we go to the
Koji builds
and Bodhi updates. So, what does a Koji
build do? We build it, we get
uh as we get RPM package.
And then we should test it and provide
some feedback, Karma,
also link the Bugzillas. That's what
Bodhi is for. So, we can get some
feedback on what are we releasing and
how it looks like and whether it should
be accepted into the Fedora itself.
And after all after this whole cycle
finishes, then we are at the user. So,
that's when I can just run DNF and
install Sifir, the new version.
Okay.
So, that's the summary of what's the
whole workflow, and right now I will go
into the new features that have been
brewing since last year, and uh
what we can do now more that we couldn't
do before.
So,
one of the things that's uh it's not so
recent. It's like autumn of last year,
so right now it doesn't feel that new,
but yeah, it's still new.
Um we support non-git upstreams. So, if
you have packages that do not have git
upstreams, you can basically configure
pull from upstream in such a way that
you can uh
just
react to the release monitoring, and uh
that's all you basically need.
And
maybe one question here, we will make a
poll. So, there I've decided to put a
snippet on this side, so you can also
see the configs, and my question is uh
who thinks that this is whole config,
everything that you need, and this is
all, nothing more?
Who thinks that's whole thing?
We have two people, three people. You'll
get free stickers at the end. Yeah,
that's all.
Nothing else is needed. So, we just have
the jobs, and of course, we can add the
Koji build and Bodhi update, but
uh we just have the pull from upstream,
we trigger it on release, and we do it
to Rawhide, and that's all. Nothing
more. So, whenever we get an event from
the release monitoring,
um we will open the pull request to the
Rawhide, and uh yeah.
If you If you've seen some other
configs, you
probably notice that uh
they can get a bit more complex.
We also have a lot of customization
available, so this can get out of hand
pretty quickly.
Um one thing here is that
it's a simpler, it's more user-friendly
in my opinion because you don't need to
define a lot of things that you would
have to.
And also most of the time when you when
you want to bump the release, you don't
even need the upstream repository
because you just need the archives. So,
this one is uh simpler also in the sense
that we don't even clone the upstream
because you don't have to. So, we just
take the archive, we upload it from the
based on what we have the source in the
spec file, and yeah, that's it.
So, it's simpler, it's a bit easier, and
uh yeah.
You It's
usually what you need.
Okay, so that's the only Git upstream
support.
And
one of the long-requested features was
support for the side tags.
That's uh relatively new, and yeah, you
can see already the config is getting a
bit more complex.
So,
uh yeah, that's not that really easy to
read, but I will go through it.
So,
what what is happening here? So, we have
a job for the Koji build.
And
we basically define that it's triggered
by either commit or other Koji build,
which means that
when you want to release multiple
packages, and they are built in the same
side tags. So, in our case,
um I've taken this uh from our own own
packages, so you can You can that
uh you cannot see from which package
it's package itself,
but you can also see at the bottom of
the list of dependencies that is the old
grand spec file that are needed for our
package. So we can release all three of
them at once in one update and they are
built in one side deck.
So the other parts are yeah, the package
instances
which basically used to test our own
code. So we we we do the code you build
only with the stage instance.
And then
there is also the requirement for the PR
authors because there were some concerns
about automatic code you build. So
by default we just go with uh
with our own pull requests. So if
maintainer wishes to open pull request
or push to branch he would need to
specify themselves in the
in the list.
And yeah, and then the side deck group.
So there needs to be a name of where it
does where it needs to build.
So in this case there are some nuances
and
well
I would summarize this as side decks are
very simple concept but once you start
using it it's not simple at all.
So what does happen here is that
I will get back to the trigger. So one
thing is that committing in this git
triggers the code you build, but at the
same time you might want to tag the
build into
You can also want to trigger it when
something happens in the side deck. So
that's why there is the code you build
trigger, the other one.
And
yeah, I will walk you walk you through
the release workflow
and I will start by going through the
instructions that we have for our own
release card. So, this is part that
happens on the downstream. So, once the
release happens,
you we need to check the pull requests
that we propose.
So, after the pull requests are merged,
um you just wait for the koji build,
right?
Except not really because in case you
don't release everything, you need to
make sure that the respective builds are
tagged into the side tag. So, there's
also the other part that you need to do
and that's manually tagging what you
the packages that you are not releasing.
So, yeah.
Uh it looks simple, but uh
it it gets more complicated with the
side tags.
So, what can you do with that?
Uh in this case, I know that I haven't
released this one package, so I will
just post a comment. I want to tag it
and I want to tag all Fedora releases.
So, I post the comment, it gets tagged,
and then the koji builds happen.
So, yeah, that's the koji build part.
And what else? Well, after the koji,
what happens is the body update. So,
exactly same thing.
There are some differences.
In this case, you can also see that
there is allowed the builders. So,
body update is triggered by finished
koji build
and uh
who can build package and package stage,
so we have the two instances. Uh
If you want to build your yourself, you
could probably just uh drop your name in
there, your FAS user account.
And, uh, yeah, there's side tag group.
It's basically the same thing, uh, just
the builders and authors or committers
switches because this reacts to the
Koji, not to the commit or merged pull
request.
And, uh, yeah.
Koji builds, build, and then you just
wait and see for the body update. So,
you just get everything in once. You see
all the change logs, and
yeah, that's it.
Um, uh, I've also linked, uh, some more
complex, uh,
configs. For example, I found the
Podman, uh, which, uh, also uses the
Koji side tags. So, if you are
interested in that, you can also have a
look. It's, uh,
it's not as easy as our own configs.
There is a bit more stuff there.
Okay,
I guess that's all for the side tags.
And, uh, there is also one thing that
has been asked for quite a long time,
and, uh, that's the support for fast
forwarding. So, just out of interest,
who of our packages here enjoys fast
forwarding from Rawhide?
Okay, we have four, five people. Nice.
So, this is, uh, gets a little bit more
hairy here, um,
with the syntax. So, what happens here
is that, uh, you specify where do you
want to propose the update. So, in this
case, uh, we propose update to Rawhide.
And then we also have the fast forward
merge into.
And we want to do that to branch Fedora
releases.
So, what happens here is that, uh, we
basically just run the pull from
upstream, uh, which means that we create
the pull request with the update.
And then we reuse the same commit and
open pull requests into the other
branches.
So, you still can review and check what
you are releasing.
Also, it kind of relieves a bit of a
pressure on us because we do not need
push permissions on the this Git repos.
So,
yeah.
As least permissions as possible, right?
Security.
And also, one of the nuances that I
wanted to mention here is that
you can notice that this the syntax is a
bit different. If I go back,
you could see maybe here.
Yeah, you can see that the
this Git branches at the bottom is a
federal all with uh
list. But, when I get back to the
fast-forward, since you need to specify
where do you want to fast-forward, it
becomes a dictionary. So, yeah, it's not
very nice, but uh
there are no better ways how to handle
this. So, the row height is basically a
dictionary where you specify that one
parameter for fast-forward, and then,
well, the Apple needs to be empty
dictionary.
So, yeah, it opens the pull requests and
uh with the same commit. Maybe one quirk
of Pagure is that
uh you get a lot of statuses on the
commits because the statuses are shared
for the same commit. So, when you open
the pull request, you just see multiple
Fedora CI builds or end tests.
But, yeah, you you just need to go
through it and check that everything's
okay.
Um
yeah, and since I mentioned complex
configs, uh I can get back to way how to
handle duplication
and that's actually
uh
contribution from community from
Christians. So, thanks a lot.
Um we haven't supported this and
I recall some users uh using the YAML
tags in the previous configs before we
started supporting this.
It was not very nice because uh you just
randomly
place a tag in the
in the in one of the definitions and
then you reuse it. So, this is uh
something that is a bit more easy on the
eyes. So, you just define the one
top-level key and you can hide whatever
you want there.
And uh well, what would you like to hide
there? Definitely targets and truths cuz
uh I've noticed that some configs have a
pretty long list. So, this is something
that uh definitely helps cuz you can
have them at one place and make sure
that
even when uh you have uh hardcoded
values that when you change it, it
propagates. So, I do not forget one
job and then it fails.
And uh one other benefit would be also
the testing farm cuz
uh there are some pretty wild configs
with extra options and whatever else.
So, yeah, there is a lot of duplication.
So, this uh simplifies it a bit.
And uh yeah, I would also like to shout
out the distro aliases. We have
converted to them recently. That's
maintained by the COPR team.
And uh yeah, there are also the openSUSE
aliases that's maintained by Dan Čermák
from openSUSE.
And uh yeah, so this uh this is a pretty
nice feature that uh a lot of projects
would like to use and uh I also thought
that it would be nice to mention it here
because some people like scripting. So,
if you need something like this, it's
available. You don't have to make your
own.
And it also supports caching which
we definitely use.
So, yes.
You can go through the multiple options.
I've just taken this example from the
readme itself. So, yeah.
It's a very helpful thing.
Okay, and
I will slowly get into the more
technical stuff. So, there were a few
requests about
releasing for Go. So, that's
I've also linked the issue for the
context. So, you can have a look and see
what it's about. I'll just abridge it as
they basically create vendor archives
during the release automation and
there's also some kind of license
checks.
And
we have just added a hook that basically
allows you to run something after we do
our stuff with the bumping the spec
file, change log, and
creating the archives. So, you can also
create more archives.
And
yeah, that's one of the most recent most
recent being
maybe 1 week 2 weeks old.
And this comes from the Koji side that I
support that I've mentioned at the
beginning. So, someone ran into the
issue where they do not wish to run the
sync releases for
pre-releases.
So, yeah, that's not an easy way to
automate. So, what can you do here is
well, we've implemented an action which
that you can use for
uh
basically indicating to us
whether it should be run or not. So, as
you can see there is the package project
version and grabbing for some alpha,
beta, or release candidate. And if it
succeed and if this doesn't succeed, so
it's exit code zero.
Um it doesn't run.
And yeah, docs are still work in
progress. That's not merged, so you will
have to wait a bit.
>> Why the command is a list?
>> Sorry?
>> Why the command is a list?
>> Uh all actions are lists. So, we specify
all the commands in list.
Okay, and one of the probably not that
uh surprising things, we also built
package as a container.
And uh we've got some requests for
making the arm builds. So, right now you
can also run it on the arm machines.
And
uh it should help you with the
reproducing of
uh what we do locally, but uh yeah, all
the tokens still not an easy thing to
do.
And yeah, there's also one more thing
for reproducing the
uh Apple 10 support is a work in
progress. So, this will be coming, but
uh
there is a lot of dependencies missing,
so that will probably take some time.
And uh last but not least, we also have
some dashboard improvements. So, one of
the things that uh were problematic were
the errors during the koji build
submissions, which are now propagated
nicely to the dashboards. So, when it
fails, you can see it.
And we also rebranded the views a bit,
so it's uh it looks a bit nicer. We also
provide the logs, so you can check what
happened.
And uh maybe one of the things I would
like to mention is the ongoing user
experience survey, which is a QR code.
If you download the slides, it's also
clickable, so you can open it.
We would very appreciate
uh
any feedback. If I recall correctly,
it's also related to the package uh
maintenance workflow in itself, not just
the dashboard, so
it would uh it would probably steer the
way we
go with the future of the project.
And uh yeah, that's all from me. So,
these are the related talks from my
colleagues from my team, other team, and
uh you might be interested in those, so
you can check the list, and if you see
something that you like,
please go watch it. And yeah, we also
have a workshop on Saturday, so we would
like to we would like you to join.
Okay, that's all from me, so we can go
with the into the Q&A.
>> My question is, how many packages use
sync to release automatic updates in a
branch of or in Rawhide or branch of
Fedora? And of course,
up to making the pull request, you know,
maintainer may want to click the button
themselves.
>> Um we have a statistics, but I don't
remember the actual number, sorry.
>> What's your guess?
>> In hundreds.
>> That's pretty awesome.
>> Yeah, that is a good guess.
>> this been
uh have you pushing for this?
>> Um we also had a push for the uh the
adop- for the onboarding uh in like last
year or so, and it was a pretty steep
curve, so there is a lot of packages
that onboarded in the recent years.
2 years, I think.
>> So, they're progressively like
Okay, cool.
Any other questions?
>> Uh one thing what is not clear to me
with the side deck. So, if if I have a
build which usually goes out as a single
package, but then on the other release I
need to do it as a side deck with
another package. Can I do it
without issues? You know, that you have
a combination like you know not always
release a side deck.
Just maybe
like every second release or whatever.
>> Yeah, that's the thing I mentioned with
the tagging. So,
this basically always releases in a side
deck, but for the packages that you are
not releasing you just make them with
the command manually you tag them into
the side deck.
But this you basically have to post the
comment yourself, but the tagging
happens on our side.
>> Okay, so we have a metric for projects
with at least one merged downstream PR
with
automated releasing or koji build or
body update at that 720.
>> Thanks a lot.
Any other questions?
Then if not, then thanks a lot. Also,
thanks for the questions. And if you
would like to reach out to us, we have
this list of very
communication channels where you can
reach out. And also, you can bump at us
outside after the talk. So, thanks a
lot.