 So welcome to the third branch session. My name is James Peterson. So it's kind of funny doing this with no visual feedback. And it's particularly when presenting, you can't see any in the chat or anything. So it's a little bit daunting. But hopefully, everything will work out well. Let me get rid of this. So yeah, these are actually the slides. So this talk is about a new tool called F-branch or Fedbranch or whatever you want to call it. So first, I want to say good morning, good afternoon, good evening, good night, wherever you are. Thanks for joining the session. So what is F-branch? So F-branch is a new tool which kind of makes life easier for Fedora packages. So you can think of it a bit like a layer of a Fed package. I mean, FED, FKG, I haven't had to bring it down in the slides. And the idea is to kind of make life easier and do more things slightly more automatically. So originally, FED-branch came out of the idea of being able to build a package update across, say, all the current releases or current branches. So that's why the word branch is in the name because it's yeah. And then later, I added also interactions with package reviews and bugzilla related to that. So it's quite easy to, I mean, it doesn't do that much more than on the Fedora create review, but there's a few more checks. And also it can update package reviews, so it's just something that the current tool and can't do, I think. And things like it can do mock builds and stuff like that. Also building packages. So yeah, well, it also can merge, offers to merge branches and stuff like that. And also it works both for diskit and non-diskit. So I mean, certain commands, not all commands, but things like local builds. You can build non-diskit packages locally and create SRPMs and whatnot. And well, for some people, maybe the killer features it can do parallel builds. So it sort of goes rather beyond the chain build that's supported by Fed package, where you can do chain builds there, but you have to set them up manually. And so yeah, we're going to a bit more detail about that. And there are various other things it can also do. So just recently, it can also do a couple of builds now, incremental couple of builds. Yeah, OK. So there's a very short history here, but I think I covered some of this already. But yeah, it started off as a simple idea of just building across packages and then gradually gain more features. Some of the build related stuff comes from some tool I had for Haskell called Fedora Haskell Tools. It's not in Fedora, but it's a product on GitHub. But a lot of those, not many of those could be generalized beyond just the particular packages. So yeah. So let's look at more closely at some of the features and use cases. So first package reviews, maybe I can do a quick demo, maybe. I'll try and sort of leave it demo. Oops. So let's look at the other title. OK, let's look at a random package. It's not here. No directory. OK. Let's see if we can even create a package review for this thing. Create review. It also has completions now. It's in batch completion. And I think that might be enough. So now it's noticed that I haven't got a valid bugzilla in, so I don't know if I need to remember my password. OK, that might work. And OK. And that didn't work. OK. So I forgot to pray to the demo gods. Let's try that again. I'm going to type my password wrong. I was afraid I would get my password wrong. OK. This looks better now. I hope it's not going to do a mock build, because it won't take a long time. OK. So it's also run on RPM lint now. And there's just a few warnings, but they don't look too bad. So most of the usual kind of spot checking stuff. There's no version in the last change. OK. I don't need to fix that later. Let's try submitting that. OK. So now it does a corgis crossbow. All right. We'll come back to that later. I don't know what's going really well. Something failed. I can't be extracted. That's bad news, isn't it? Can I one more time? I'm not sure what's going on there. I think it's pretty good. Oh, maybe not today. So, oh, one more. And, well, it does, it has worked. And, OK, that's not so interesting, because, I mean, as I said, Fedora create review can already do that. But it can also update a package review in the same way you can. If I had already submitted the review, I can now write, say I have some changes I need to make the package. I can now write fit branch update review. And it will, it will create a new SAPM and upload it to Fedora people and post a comment on the review bug. OK. And let's see if this works. There's a branch reviews command which lists my open, open reviews. OK, something worked. So these are some of the reviews. Actually, they're all been finished, I think. I think they've all been built in raw hide and I left them open to maybe back build them to. And, yeah, it has various, you can do some filtering, like any list approved reviews or unapproved or unbranched and stuff like that. Or ones that have had wrappers requested and whatnot. And, yeah, maybe just to give an idea, this is a list of all the commands, the short list here. All right, I need to be worried of time, I think. So 10 minutes past. OK, let's move on. So the next interesting use case is building packages. So Fed branch build has various options. So the minus B option means build all active branches, like so it'll build raw hide, Fedora 32, Fedora 31. It'll be Apple if you have Apple branches. You can also specify specific branches to build. It'll offer to merge newer changes you have in the newer branch to the older branch. And there's also command line option to kind of do that without asking. It also does things like it checks for an existing Koji build. It also checks for a Kerberos ticket. And it'll push your builds to body at the end of the builds. OK. And if you have multiple packages, I think currently it builds by branch. So it'll build packages one for raw hide, package two for raw hide, package three for raw hide. And it'll go to Fedora 32 and build across the way. Maybe we could do it the other way too. Yeah. OK. I'll keep going because I'm not sure I think time is maybe short. Then there's various local commands. For example, you can do a local build, like Fed package also can, but you can also do that for a non-discuit package, like for something like your review. Like if something hasn't been packaged in Fedora or a copper package or something like that. You can also install, so unlike Fed package install, this actually installs the packages in your system. So this is quite useful for like testing or if you're doing some local packaging and you want to test this stuff out first before pushing it out and then you can do that. Yeah. And you can use the sort command to actually order the packages in dependency order. No way to have a command. I mean, it's obvious once I'm cloned. I mean, it's obviously you can just do Fed package clone and so on, but the difference is with branch, you can clone multiple packages at once. And in fact, there's a user option. So you can, if you do user, it'll clone, it'll look in Fedora for all your packages and it will actually clone all of them. So yeah, which can take quite a long time if you have a lot of packages, but anyway. And then yeah, there's some things like prep and mock and you can also install, basically the same as build up, but there's install depth and diff, which is useful for if you're looking at many packages. There's also a switch command to switch branch, and most of these also have, obviously branch options and whatnot. Okay. And that was most of the demos really. I don't know if I have. Okay. I'm sure there's any other interesting commands to show. Yeah. So, yeah, wasn't as a clone switch for switching branch status. I think I'm going to come to that one, actually. I'll just show you the status, build status of the package across branches. We'll talk about parallel later. Yeah. And we're going to bugs, we'll list the bugs, open bugs for a package. And you can, yeah, request repos, but request repos actually looks at your approved package reviews and then it will automatically create tickets in Pagora for those. And similarly, import will also, you can't give it a list of packages, but it'll also just find the approved packages which have now had repos created and import those downloading the packages from Bugzilla. Thanks. There's also request branches, which by default, I think will create for the latest two releases. And, yeah, we'll come to the copper, maybe later this time. All right. I wanted to pause for a moment, but I think I'll better continue to play through and see if there's any time at the end for any questions or discussion, I don't know how this works. So, yeah, full disclosure. So I found this written in Haskell, which sometimes raises some eyebrows in Fedora, but that's not how it is. I quite like Haskell. I like the type of safety and it's very easy to refactor and can really refactor code with a lot of confidence in Haskell, so it makes developing quite a pleasure. It's quite good for this kind of script like programming too. And so currently, so-called reads or queries Fedora service is natively, so there are libraries with sort of, yeah, web API bindings for Pekora, and Koji, and Bode, and Cobra, and also Bugzilla. Well, Bugzilla is not created by someone else, but this is Bugzilla Red Hat because the Red Hat Bugzilla is slightly, very slightly different from the standard upstream Bugzilla. Some of the fields have become lists, basically, just a few. But, well, I say but, but, yeah, it's still using Python Client for writing, so to speak. I mean, it's for pushing the builds, and that's mostly because of authentication. I haven't quite gone round to implement getting all thought about working. Okay, so let's talk about parallel building. This is sort of interesting at least for some people. So what this does is it, well, firstly it uses this library or tool called RPM Build Order, which is already a package in Fedora, but it's also in our library, and basically that can create dependency graphs and sorting and dependency layers of packages. And then an F branch parallel also uses this Haskell Async library. So it kicks off builds in the sort of the main thread, but then it uses threads to monitor the build progress and the weight repos and so on in the background. So it can actually build quite a lot of packages in parallel, and it uses background mode in Prodigy, so it's got low priority builds, so hopefully it shouldn't overwhelm the build system too much. Yeah, I think it's nice to use side repos for this. I may even make that more or less mandatory later, I don't know, I'm not sure, but yeah. And recently I refreshed all the Haskell packages for Fedora 33, so I built about 500 packages, and this same heap of time actually, usually it takes more than a week, I guess to get all the packages through, even though there was some scripting, but I could do it in a few days, so I thought I was going to be late for the freeze, but I had extra time to spare. Then I had another tool called Cobraunch, so you may also like Cobraunch, you can basically do staggered Cobra builds, I don't know, I don't really like pushing my builds out to Cobra, just building everything, and the output doesn't fail you or something, so what this does is that it will, well, there are various options it supports, but we can sort of do various variations, but by default it will build, say first for Rohide x86, 64, and then 32, and 31, and then, well, say Apple 8 or whatever, and then it will go on to other arches doing, yeah, but you can also do other variations, you can build by release or build by arch, or stuff like that, or you can do the default single build, which is what the copper client does, pushing everything out at once, if you're confident. And just recently I also added a exclude branch thing now, so this is maybe more useful even for copper, sometimes say, like earlier I did a build where I wanted to exclude Apple 7, because it doesn't build in Apple 7, so, yeah, all right, let's keep going. So I just wanted to give a thanks to some of the earlier testers and adopters, and yeah, I've been testing Fbrunch, mostly from my copper build, which was done by Elliot, they're full of some of the people who, I haven't really noticed it very widely yet, it's been sort of coming up a bit in RSE mostly, few places, so, yeah. So what's next? Well, one thing is to package it, it's actually getting into Fedora at the moment, it's only in copper, and actually that also requires building a few, releasing some of those libraries I mentioned, that shouldn't be too bad. I could even bundle some of them maybe, as little modules or something like that, but anyway. And the other thing I'd like to do is take the parallel build into the next stage, so actually do full graphic builds, rather than the moment it's doing these dependency layers, it means it finds that there's, I don't know, ten packages in the first layer, and eight packages in the second layer, and three or five more packages in the next layer, but if you have one very big package in one of the layers, it will slow down everything, well, slow down things a bit, so if we're not building by layers, but actually just following the graph, it could actually speed up things even more than it would be more parallel, so. Yeah. Well, there's quite a few, well, sort of small fix-mes and things in the source code and stuff by then. And yeah, I think I cover most of it, so yeah, the source code is on GitHub. There's a, as I said, there's a copper repo, you can install it today, and various people have been using it, and generally, yeah, I've been having positive feedback, and I appreciate some of the feature requests and bug reports I've been getting. For example, one, Truladi asked me to improve the rendering of Cycles, so if you have Cyclic dependencies in your package set, then, I think I have some example. Just trying to sort these. Okay, I'm just going to specify branch. Yeah, so actually this page has got a few dependencies, so it's not a good example in that sense, but anyway. Yeah, so I think, Elliot's trying to improve this, and so yeah, there's a Bootstrap build con. Oh, I think I got that wrong. That's all that was. I'm kind of confused myself. Yeah, that was worth it, right? So maybe I tapped it in the wrong place. I think I'm too tired. Okay. Anyway, so these are all sub-Cycles listed here, but if you turn on the bootstrap build config, then it will make things a bit better, I think. Okay, yeah. Now you can see there's several Cycles, but there's only a few. Anyway, I mean, this is a bit of a corner case. I don't know. I mean, more extreme case. Well, obviously if you try to sort the whole bootstrap, there's lots of Cycles around, like dependencies, but it's more not back in sense. It's not that common, but so let me see. Are there any questions? How much time? Okay, it's 25 past. I don't know if I'm out of time already, but let's see. How do I get it? Okay, so it's in copper, yeah. That's the best way to get it. Okay, I got a few minutes. Thank you. Any other questions? I don't think there's audio questions, but I think you can put questions in the chat. Oh, yes, thanks. All right. Did you get it already? Okay. Well, I think my password was wrong, right? So you didn't see it. Oh, yeah. Skipping for the package. Well, yeah, maybe. I don't know. I'm not really... But yeah, possibly. I mean, at the moment, the package is still a lot dependent of F branch, but yeah, maybe in the long term it might be possible. I can't even figure out the password. Oh, the log. Yeah, yeah, there was a log, but the log contained my wrong password, right? Well, I mean, mistyped password, but yeah. I need to repeat the questions, of course. Okay. Yeah, I don't know if there's any other questions. Yeah, I'll update my password. Any other questions? Right. Anything else I can show you? I think I didn't show the status. Okay. So let's look at... Well, this isn't a very interesting example, but the first is doing a git fetch and then it tells you, because I didn't specify the branches that tell you the branches, and then it shows the tags and builds of the current branches. So if there are local changes in here, then it will mention those elements or summarize the git commits and things. Right, bugs. Let's see. Ah, okay. Let me see. Okay. How can people help with packaging this? Well, the big help would be helping with package reviews. Michelle said I should put in a plug for the Haskell SIG. We're actually quite low on resources. We have a few superheroes like Robert Andrews and so on who help a lot with package reviews, but that would be welcome. We need more help maintaining and helping with the updating since it's some work. Okay, so let's try and look at bugs. I'm trying to think of an example. Okay, let's look at this one. I think I haven't done this one, probably has some bugs. So there you are. It's listed, the open git text bugs. Okay. In this case, there's pings. So I didn't understand about the ping question. What do you mean by that? I think there's two minutes until it's half past, so I may be out of time. Ah, okay. Do I get pings? I don't know. I'm not sure. I actually turned off notifications to not distract myself. That was a good question. Maybe. I don't know if I can get pings. Yeah, that's a good question. All right. Any last final questions? Um, So, yeah. Um, so just to summarize again, so, yeah, we can install from the copra and, um, yeah, just to prove that originally it was gold fed brunch. Here you go. It's the SCI in Travis. Um, and also up in builder that is also in Fedora. So, I think I'm out of time. So thank you very much. Thanks for joining the session. It was useful. And, if you have any feedback, yeah, we welcome feedback, bug reports, future questions.