 Please wait for a while, Augustin. Okay, now we are live. So yeah, this is a regular Q&A session for students. It is April 2nd, so we have just one week before the application deadline. And yep, we can just pass it with Q&A. So please continue. Okay, so I wanted to ask something about the fingerprinting in Artific Promotion. It has said that we can use fingerprinting to just track the promoted artifacts across Jenkins, right? So I learned that in fingerprinting, the producer and consumer, that thing occurs, right? Like producer, it just produces some sort of unique ID and consumer consumes that unique ID. So I suppose that for this week, we have to use the core Jenkins class, that is the fingerprint.java. Am I correct, sir? We will be using fingerprint.java from the Jenkins core for this? Yes, exactly. Okay. So do you see my screen now? Not really. Yeah, maybe. I can see it. Okay, so my network connection isn't perfect today. So yeah, in Jenkins code, there is a code called fingerprint.java. It's here. So this class effectively represents the entire fingerprint engine. There are a few other classes, but it implements the data structure. So what it includes, let me just second that a little bit. Yeah, this class structure changed since the last time. Effectively, just a second, yeah. So here are different things. So here you may see that there are only a few fields there. So there is a pointer to the original view. So this is the producer of the fingerprint. Effectively, it points to whatever which created the first entry. And there is a timestamp when it was created. In addition to that, so yeah, there is md5, which is used as unique ID. And there is file name, which is used as a presentation. So there are some history in this naming because originally fingerprint was created only for fingerprinting artifacts. So yeah, for example, file name, yeah, it has a field called file name, but actually it's just a name for the presentation and other plugins like docker3stability, dockercontainer names there, for example. Got some documentation, maybe. Yeah, so you may see that docker3stability actually used container names as file names. Yeah. Okay, so what I did not understood about that code was fingerprint.java. It is taken like left and right two different ranges, right, from start to end plus one and from start minus one to end. What is the use of those two ranges? I cannot, I do not understand that part. If you scroll down a little bit. This one? No, sir, a bit down. Like there are two ranges that's been described. Maybe you want to share your screen because. Okay, I'll share my screen. I'm not sure you're trying to see me. Okay, okay, I'll share mine. Okay, is it visible, sir? Yes, it is. Okay, so this one, sir, this one. Public range expand right and expand left. This particular, I did not get this, like what is the use of these two ranges and later it just merges these two, finds the intersection between these two ranges and finds the union between these two. What is the actual purpose of this? I could not figure out this. Yeah, so how to figure it out? It's, well, I believe it's just a utility method for some use keys. So it's not a direct part of fingerprint data model. So you may see that it actually just retrieves additional ranges. And if you want I can show how to track down the usage of that. Yes, sir, yes, sir. Please go. I don't think that it's something you should be aware of, but okay. Okay, so yeah, there is expand right, expand left. So here you may see that it's just from start to end, et cetera. So it adds increment, but you may see that this method actually doesn't really modify the class. So it just returns new range. Why it exists for starters? It's a good question, but yeah, there is a button called blame. And then blame, we can just see who introduced it. So yeah, you may see that there is a number of methods. It was created something like 13 years ago. And yeah, so since that this methods have not been really modified, so we can check whether these methods are used at all. So here you may see that the only usage is inside of the class. I mean, no other usage is in Jenkins Core. And what it does, it just expands the range to include additional value due to whatever reason. So it's just the utility method which is for example, another usage to the trace. That's it. Okay, so and next question is, I can figure out how producer produces the new ID. I can clearly see that down like MD5 sound. I can clearly see that, but how would the consumer relate to that ID? That I cannot figure out. Like producer. Okay, so we want to understand how producer produces a new ID, right? Yes, I understood that part, but how would a consumer avail that ID? Okay, so there is another class called fingerprint month. Okay, fingerprint month. So this class apart from all other things includes a number of methods you may see here. So when the consumer wants to trace usages or whatever, it may use this method, for example, to retrieve fingerprint. And you may see that the ID is just passed from elsewhere. So it means that any questioner should be able to somehow know the ID of fingerprint in order to retrieve that. And for example, here you may see, get an idea. So for files, it uses MD5. So if consumer uses a file, it can calculate its MD5, and hence it can retrieve ID of the fingerprints from Jenkins. Just needs to know the file. And pretty much the same with others. For example, in Docker's Recibility plugin, we just use container IDs because container IDs are also unique. So that we use them as this key in order to retrieve fingerprints. And for other usages, well, you would need to somehow create this unique ID. But yeah, once it's created, you will be just using it. Okay, okay, again, talking about fingerprints, I guess in the upstream pass condition, no, downstream pass condition, what I saw was something class called pseudo downstream builds. Sudo downstream builds. And it says that it is like in compensation to the fingerprinting. How is it different than fingerprinting pseudo downstream builds? So pseudo downstream is used for pseudo trigger if I recall correctly. It's a legacy implementation of trigger and jobs inside Jenkins core. And yeah, I believe this is the only purpose for that. And yeah, I do not think that you should be really aware about it right now. So it's nicer that, so pseudo upstream, what? Sudo downstream build. Okay. So it's for legacy. Sudo, capital P, pseudo downstream builds. There is no such cause. I think capital P, sir. It doesn't matter in the course. Well, I think you can change the spelling of Sudo. Yeah. Yeah, it's all right. Yes, the spelling of Sudo, it's correct, P-S-E-U-D-O. Maybe I'm from... Only for triggering, okay, I can do it. Yeah, but, okay. So yeah, we can find this class later if you want. Yeah, probably just kind of write it properly. But yeah, they pseudo triggers, they exist only for all the triggers in... Yeah, I'm not sure why it doesn't really show it. Yeah, so... May I share my screen? Yeah, feel free to do that. But yeah, again, yeah, I'm just... This one, this particular pseudo downstream builds. Okay. Inside downstream pass condition. This. Okay, and you're not sure why... Is that the same as a transient downstream link? Yeah, it's pretty much the same. So I understand why I wasn't able to find it because I was looking for the Jenkins core part, not for the plugin code base. But yeah, it's implementation in promoted builds which doesn't use fingerprints. Instead of that... So yeah, as we were discussing maybe one month ago or so, there are two ways to link builds. Firstly, it's fingerprints. Another one is actions. Because action is a persistent storage, you can add to the build data. So this pseudo trigger you're representing which uses actions, not that will store references between usages. That's it. Okay. Okay, so last question I'll ask and pass the question. It's like... We got eight so that Parish, I have a chance to ask. Okay, okay. We'll see you all in the next one. Okay, okay. Then we'll turn back to the question. Okay, okay. Thanks, Oleg. Actually I wanted to ask if like while registering for GSOC in the Google website, is it sufficient to just upload my like, college ID card, like just a scanned copy of it? I'm not sure these questions you should ask GSOC support. Okay, okay. I just wanted to cut out like, because like in their support, they have said it clearly like you can, but like I thought like they were expecting something more authenticate. Yeah, so we are not another organization making decisions about student eligibility. GSOC support team is doing better. All right. And they should be your contact. Yeah, so if it's not clear to you, please raise the question to them and they will provide the response. Okay. And everyone was like, I was trying this CloudBee's folder plugin. It was said like you can perform a job of folder organization, but I couldn't exactly follow what like, I could understand like it organizes the repository in form of a hierarchical structure of directories, but I wasn't able to like do anything with that. I didn't able to figure out what to do. Now what exactly do you want to do? I just wanted to try what it does, like for the case of multi-branch plugin and sorry, multi-branch pipeline and single-branch pipeline, I was able to do something. I couldn't do anything. Yeah, I can just show you an example. So yeah, folders plugin, it has two purposes. One is folders. For example, this report is a folder. And you may see that it's just a manually created folder managed by folders plugin and includes a number of jobs inside. This is one of the usage of folders. Another usage is computed folder. So computed folder is just next to us, which allows to somehow recreate contents on a runtime basis. For example, if you open Jenkins Core, you may see that there is, it's a GitHub organization actually, GitHub organization is a computed folder. So it uses folders plugin as an API, but there is not a plugin which implements it. And these computed folders, it just scans the GitHub organization. So there is kind of organization work if you're interested. And it's like it's a repositories according to the configured rules. So yeah, you may see that there is a bunch of scans there, but yeah, then we get this project set up. And each of this project, for example, Jenkins, it's a Jenkins Core, it's also a computed folder. This computed folder is multi-branch pipeline actually. And here you may see that there are pull requests, there are branches. So it talks, builds are not configured by this repository, but yeah, you may see that there is quite a number of items. So all of these items have been also created by multi-branch pipeline. And yeah, it uses folder API in order to locate the stuff. I'm not sure what the answer is, your question, but yeah, I just tried to- Yeah, that is what I wanted to know, like how does it function? Yeah, so yeah. So like in order to make this project, what parameters do we have to supply in that section of creating the job? Union multi-branch pipeline? No, like when we create a new item, there is an option of creating a folder organization. Like I couldn't able to follow what exactly did it expect from me to supply. Like in case of multi-branch pipeline, it was expecting me to supply a repository. In this case, what do we supply to the folder organization? Yeah, I hope I have it from, yeah, I should have it from this instance. Okay, so here let's take, for example, the record, it's a computer folder. We see both right now, but yeah, let's see what we have inside. So here you have a number of options to supply, but what is really needed, you need to specify. So here you may see, you're asking about GitHub organization, or are you asking about multi-branch pipeline? I'm asking about, like, there is an option for a folder. Like can I share my screen? Okay, yeah, it may help because I started showing a wrong project type, I believe, has he dropped? Yeah. Maybe. Okay, let's give him, okay. Okay, so what I wanted to ask is, like in this, where I'm running a Jenkins instance, where when I go for a new job, I can select this folder and some name, testing one. So like, what do we supply here? I don't understand, like, there's no space for... What are you trying to achieve? Because you can just... Folder organization. Well, if you want to have folders, you just... Suppose I want to, like, have a folder of multiple jobs. Okay, do you want to create... Manly or do you want to create them automatically? Your screen change? Yeah. Do you want to create these jobs manually or do you want to create them automatically? Automatically. In such case, you're creating a wrong job type. Instead of folder, you need to create, for example, multi-branch pipeline with hub organization, bucket organization. These types have automatic creation. Okay. All of it is just an open case for manual use. Okay. That's all from my side. Thanks, Oleg. Okay. Okay, so... Oleg, I'll take leave now. Okay. Thank you. Yeah, this meeting is optional. So if you have nothing to ask, feel free to drop. Okay, so let's proceed with the next questions. Let's see how much time we have left. Should I start or keep on? Okay. So last question I'd like to ask is, in the proposal page, it has said that update Jenkins release plugin to use the new plugin as an internal engine for doing promotion so that this plugin can use the new plugin internally. Sir, I actually cannot get the gist of this line. So could you please explain? Okay. So it's about promoted builds. So project ideas, perfect promotion. So here... Okay, you're asking about this line, right? Yes, update Jenkins. Yes, sir. Second last. Yeah, so there is... Jenkins release. We'll just put a link here. Okay, so yeah, there is a release plugin. So release plugin is one of the engines for... There is no documentation. Okay. I see. There is some mess with... Nick is here, I believe. Yeah, so this plugin actually allows to trigger the release as a step. We can just take a look. There is... I'm just looking for the documentation. So to simplify the presentation, but it seems that the key is really slow today. So what it does, effectively, this plugin allows to trigger another job as a release step. So release job, you may see that there are a few additional steps being added, like steps before the release, after the release. But yeah, what actually gets for any complete job, you get a button release. And this release button allows to trigger another job with adding some parameters. So it's pretty much what promoted builds does, but with external job. And once we have new promoted builds plugin, we actually can replace the functionality in the release plugin to follow the same API and the same structure. So yeah, you just use the same plugin under the hood so that we don't have duplication of the functionality. Okay, so I have to update the plugin to use it as an internal engine. Like, what does that mean? As an internal engine. So what it means that you create a new plugin here, and then in the release plugin, you add a dependency on your new plugin so that it uses its APIs inside the release plugin. So here, what you have, you have a definition of triggering the build, so like here. So there is a button, but internally it triggers another job. You're like the new artifact promotion plugin would be doing once it's completed. So effectively release plugin could use new promoted builds plugin to do the same thing. Okay. This will be used as triggering a promotion. The new updated plugin will... Yeah, I would expect so. Okay, so thank you sir, thank you. This was all I wanted to ask. Okay. So yeah, if you haven't tried this plugin yet, please do because it should give you more ideas about how promotion logic should work because originally we just wanted to merge these two plugins. We're taking one, but the release plugin could be used as a source of information and ideas for the new plugin. One thing to have in mind is also the build pipeline plugin where you have this promotion step. So the downstream is actually can either be triggered as a parameterized in normal conditions, but you actually also have a manual downstream which create a button on the overall pipeline and you can only trigger it the next job in case it's successful. This is my, you could say, mental baseline about the promotion in that sense. It will work the same as freestyle projects like upstream and downstream conditions? Yes, it works on upstream downstream, but you could say the mechanism or the mental mechanism of what it's trying to achieve is that you can run automatically to a certain point which the titular pipeline is doing today, but what is missing is that you don't have this push the next level of build which could be a release, it could be a deployment, it could be whatever, but it's based on a manual decision. That was what I discussed in the Gitter channel as well that the triggering can be either a push or a pull mechanism. Either you are subscribing for new artifacts which is there a new fingerprint of that artifact that I need? Is that a JAR file or whatever which has been certain quality labels or whatever, or you can actually have a push mechanism meaning that you have a button and then you trigger a downstream pipeline thing. Now kick off giving this fingerprint so they're tied together. Does it make sense Oleg? Yeah, it makes sense. So that's my, you could say my mental baseline about what we're trying to achieve. Okay, thank you sir. Do you know this plug-in? Which one? The build pipeline. Yes sir, yes sir. I've gone through it. So if there are any further queries I'll ask in tomorrow's section. Now may I leave sir because I have my class after like 10 minutes so I have to go. Okay, that's fine. Okay, thank you very much sir. Thank you. Thank you Tom. Okay, so the punch is still online? Yes sir, I am. Okay, so do you have any questions? Yes sir, I wanted to take the feedback on my proposal that I posted. Currently it covers the whole project. Do you want me to add any parts, specific parts into that? Okay, so do you see my screen? Yes sir. Yes, so just to provide some context to close. You have two active students interested in the role-based strategy plug-in performance. So there are ongoing proposals and there is a proposal from B-Punch. So yeah, it includes several topics. For example, my network is really slow today. So yeah, it includes performance testing, benchmarking, and some performance improvements. Pretty much like another proposal. So yeah, one of the topics we had is that since we have two students, most of them have been active during the, even before GSOC was officially announced. And yeah, the proposals overlap. So one of the proposals, one of the recommendations we had to students is to work a bit in order to see whether they can submit non-conflicting proposals. Because their performance is... Of course, the pins are great, yeah. Yeah, try not to. Yeah, so we had one iteration on that and I believe that we are waiting for another iteration. So yeah, if you ask me B-Punch what is needed to be done in this proposal, formally nothing is needed to be done. So you addressed all the main sections. Well, except this problem, but here... Is that... Yeah. So I have not yet got the calendar for the next semester. So I was waiting for that. Yeah. Yeah, that's right. But yeah, we still... Yeah, we already have information about your availability. So it's fine. Yeah, what would be my recommendation regarding this proposal? Yeah, it's still work together with other students to see whether you want... Whether you both want and whether you can have non-conflicting proposals. Because you may... Both wanted to proceed with the same proposals, it's perfectly fine. But since we are talking about open source and collaboration, maybe you will want to collaborate and somehow ensure that both projects could be accepted. But yeah, it's generally your choice. As I said in the Gitter Chat, we can only advise. And yeah, we discussed a few options before, like having, for example, performance testing framework, et cetera, as one project. Another project is actually performance improvements. Because well, in such case, projects can be pretty much independent. Yeah, this is one of the options you guys may want to discuss. And if you want to discuss other options, I'm happy to do that. So I have pinged Abhi for the same, but I have not yet got his response. But when I get the response, I will talk to him about that. And you said about arranging a call, that would be great. About what sort of? About a call. You said now we can arrange a call. Yeah, we can arrange a call. Yeah, so for me, it's a bit difficult for these weeks, but yeah, I will try to attend. I will try to attend really not like the last time when I was in the middle of traveling in the bus, I believe. So yeah, I'll do my best to attend. I have one doubt specific to this project. So in the code in the role map Java file, there's a there's a function and delete SIDs. I needed to know what it does exactly. What exactly? Sorry. So in the if you could open the GitHub code. Okay. I just didn't. The role map. Java file. There's a function named delete SIDs. You can search for this one. What does it do initially? In my view, it just iterates over the rules and forms a set and this removes the SIDs only from that set from that set. Yeah. So it goes through all the roles. And so I think that it just removes all assignments. So it means you have a seat like out integrated or username. And it goes through all the roles inside this role map. And then if there is a seat, it just removes it. That's it. It's not removing from the role map now. It's moving from the set just formed above SIDs. It's pretty much the same. So here you may see that there is no caching right now for this level. So it goes through all the roles and then removes assignments. So let's take a look here. Yeah, you may see that this is... Okay, this is a cache, but yeah. Here's a ground-out-the-rolls structure. So all ground-out-the-rolls are kept in this structure. And here you may see that we just go through all items in this roles and remove SIDs from the set. So effectively it means that you remove SIDs from the role map because there is no other place where they are stored. Okay, I recently added an idea to the proposal for caching of role map objects through. Yeah, same as that. Yeah, if you start caching roles, if you start caching technicians on a higher level, then yes, there may be additional optimization of this data. And then you might need to update all API schools to handle this data properly. Yes, I did. Yeah, right now there is an alteration, so yeah, it's pretty simple to remove something. Okay. Okay, do you have any other questions about the code structure? No, it's not as such. I've gone through it now. I'm familiar with it, I think so. Okay, so yeah, then thanks for the question. So yeah, we have some time left, so maybe we could sync up this class about the project if there is no questions left in the punch. Yes, and that's just from my side. Okay, yeah, I can hang in. Yeah, right, so if you want, you can just stop the broadcast if it's not really really funny. Okay, then thanks everyone who was watching. I'll just stop it.