 Great. Welcome you all to Jenkins do sock meeting today. We have Kristen wetstone with us today, which is great because she's going to do Walkthrough of the Jenkins Step Docs generator. I hope I've said that correctly, but I'll let I'll let mark say a bit more than Kristen present as well Yeah, so so there is a there is a tool called the pipeline steps doc generator that Kristen I believe was actually the original author of What this tool does is it extract it is the generator that presents pages to www.jankins.io that describe all the pipeline steps from Right now hundreds of Jenkins plugins So so it somehow does work some very cool magic and read source code from all sorts of different plugins And presents them as web pages now Kristen You'll give a much better description than I do of that. But but for me, it's just an impressive piece of work. Tell us more about it. Well, thanks mark. Um, yes, so basically if it does exactly what you were saying And I like to think of this generator in two distinct parts The first part is kind of this entire Local hype like called the hyper local plugin manager, which basically acts as a plugin manager that exists outside of Jenkins That allows you to be able to do like it loads plugins just as you would inside of Jenkins But it doesn't require Jenkins to run and the second half of this is the actual Part that goes through and like generates the ASCII doc that's required by the website to Actually be displayed so you can see it Beautifully and like with many different layers and stuff can drill down and links inside of the documentation So I guess I will kind of I can kind of go over it in two in those two parts Um, would it be helpful if I shared my screen? I I assume so I think it will help people a bunch So so you use the term hyper local plugin manager There are a lot of words hiding in there So I'm looking forward to more description of what what what that means compared to How Jenkins plugins normally operate? Sure. All right. So I I'll cut there's this is kind of the entire um project here and it's Only a few classes to make this entire thing go Um, so I'll close this folder here. So the entrance into the pipeline Steps extractor or the into like this entire bank here is this class called pipeline steps extractor And it imports a lot and it looks scary But it's because it has to be able to pretty we're pretty much like faking out a lot of what Jenkins does when it does all of the plugin loading when it starts up So we'll skip down here. Um, there's a bunch of parameters. So you can say basically What so part of this is because we're If you're basically thinking out the beginning we're Speaking out the beginning part of Jenkins. We have to tell it to point to a plugins directory Um, so and the plugins directory should be pre-populated with all the plugins that you would like to import So as part of the build step for this job We actually go and we go to like the Jenkins plugins site and we download all of the plugins ever Into a folder and and these are the hpi or the jpi files Pretty much exactly like if you took up and you took your Jenkins instance and wanted to install every single plugin that we make and the reason we do this is because In this generator, we have no idea what the pipeline steps are and every day since new plugins are added or plugins are enhanced They might now have a pipeline step and we want to make sure that we capture that in the documentation So it's safer for us to be able to just go straight out to Jenkins a plugin site and just Copy down everything and this can be a lot This is a lot of things we're trying to load into our fake basically our lake our plugin manager Um, so there are a few things that we do to kind of like Prevent too many open file handlers. Um, because that's you two things loaded at once But generally at this point, um, it works. So I haven't seen any issues with it Dealing with the massive hundreds of plugins that we have inside of Jenkins so far um So so do you want questions during or do you want questions to be a little later? What's your preference? Um, you can do it during um Okay, so so okay, so so the Early step is Download all the plug-in binary files all the plug-in binaries to a local file system so that you can then process them so you download Or the tool downloads 1,500 or 1,700 plugins from the Jenkins update site And now has them locally You'll have to download or point it to whatever plugins you want the tool doesn't I think the Jenkins The Jenkins job for the tool does the tool just will use whatever directory it's pointing at Think of it like Jenkins, right? Like you want to be able to have your plug-in proper plugins directory prepopulated same thing with the tool So, okay, so it it takes whatever is there so I can define a subset for testing purposes I'm not always processing all the plugins Exactly, right because that takes forever and then sometimes it's actually yeah So if you have a fewer subset that you know that exactly what it should be It's good to be able to visually test what you want So you can make when it produces the documentation you can see like, okay. Yes. This is correct Also, so it's it just runs a lot faster when it's not working on every single plug-in ever Well Oh, go for it That explains the the comment in the read me that there's in the read me instructions which guide us Use this workflow command. There are this build command to bring in the plugins that are workflow plugins Thank you So I started actually updated the read me because after I saw that comment in the channel that it was outdated I was like, oh, okay. So I started trying to go through this and I was hoping to do a pull request at some point kind of explaining a lot of this in like the architecture section and then Maybe helping with a little bit more of a read me. So I'll make a pull request with this updated information But it's still good that we're doing this today Thank you. Yeah. Yes. So that's where that part comes in and so now we go into this method. We have a bunch of different Like a place where you want to print print the ASCII doc and that there's like declarative pipeline syntax that's just generated by this too and Right, like this is just kind of like where the file at the end of all this gets written And then if you're missing that it will fill in spot automatic stuff All right, so the next piece you want to do is it comes to your hand says find steps And this is the part where we we start by basically creating what we what I've heard to hear as the hyper vocal plug-in manager and this here is the Plug-in manager without Jenkins. So we'll go into that class now all right, so during Jenkins startup It does a lot of things And one of them is it starts its plug-in manager Defines what's called a plug-in strategy and then points it to the plug-ins holder and then loads it And then in the middle of all that loading Jenkins is doing other things at the same time and then it comes back basically to the plug-in manager the plug-in manager reports like i'm done You can actually have access to all of these classes like the plug-in manager will load all the classes into um an extension list and like into itself into a class loader and then be able to Have that available to Jenkins Outside of everything else. So if you ever look inside Jenkins and like how it uses Plugins it basically can go to this class loader and pull information about um What is installed and like what you can do so what we're trying to do here is like all right We don't have and the plug-in manager like requires are running Jenkins because it's very hard at this point to have things that are separated So what we're doing here is to say all right. I just want to mock Jenkins and basically use Say like yes, it's running But I just want like the plug-in manager instance So there's a lot in here that is like very very complicated because it's How Jenkins itself runs and a lot of times like we don't necessarily care about what Jenkins is doing We just want basically to fill up this class loader So we can get access to it and then with the class loader we can now access the annotations and we know from how to write Pipeline steps that pretty much annotations are the way that you say that this is a pipeline step Um, so after we have this class loader filled out We could go and basically query it for the ineffective pipeline step annotations and then pull out everything that we know as a pipeline step so That's maybe a little complicated, but what this will This method here called diagram plugins Is the one that actually goes into the plugins holder and imports everything into the plug-in manager So a lot of this is lifted directly from the plug-in manager class Inside of Jenkins itself So the details of this is not too important But the important thing is that it matches exactly how the plug-in manager is doing it The way that we can get away with having a Jenkins Basically not having Jenkins is we're using marketo To basically fake out Jenkins. It's just like if you're writing a unit test But we're using it here inside of the code. So there's Whenever there are certain methods that it calls to say Like is Jenkins there we pretty much return an answer that's like, yes Jenkins is here or um Like the init level is something that it will um Check as well. So the Jenkins init level will tell you where it is in the startup process And it's required to be completed before the plug-in manager complete. So we just say, yeah Yeah, it was complete same thing here like um This install state is another piece that's needed by Jenkins. So we just return that it's in test um This is oh, yes, and if you're ever trying to get the plug-in manager So whenever we instantiate that when you say get mock Jenkins I think this is using a couple different places We basically pass in like our plug-in manager and then we tell it to return our plug-in manager rather than Yeah, we want to return our instance of a plug-in manager not like anything else And then there's a couple other pieces here But and these are just kind of filled in like as I was building the plug-in manager I was like as soon as I tried to like query Jenkins. I would just basically return a mock for different pieces like get computers I think returns the plugins directory and this is based on like what system that you're end up using uh Yeah, so so a lot of these are just explicit methods that are used while the plug-in manager is loading itself up The other class that is mocked out here is this mock extensions list And this is It's a fuller explanation of what's going on, but this is another thing that's internal to Jenkins that is used to figure out the types of pieces inside of How best to describe this it's like it's a it's um This is helping you get the annotations and different parts of the extensions from Jenkins So we wanted a record. Oh, sorry good work So so we the I think of extensions as things that I add on to The settings forget for instance to tell it to do something different or do this other thing or do that thing Is this one of those kind of extensions? Is that the concept here is anything I add into Jenkins I'm commonly using a thing. I think of as an extension So this will help you get what you get the extensions Got it Great. So you can see here that and this is again like very internal So this is another in Jenkins internal piece. So the stuff that you were talking about mark where you like annotate With the extension and then you list it out Like what is you do like at extension and then it's the quotes and then what the extension is inside, right? So now you can use this Basically, when you query the plugin manager, it will go down a couple lists into this extension list and you can see here this load We want to be able to tell it to use The hyper local plugin manager's plugin strategy and the plugin strategy is used on Is basically used by the by a plugin manager to say how you want to be able to load plugins And we actually have a copy of that defined here inside of our plugin manager. Again, it's also we can be able to access The plugins locally and some of the things inside of Jenkins to like the plugin strategies It's only defined at the Jenkins level as an abstract class and like the actual Plugging manager this like local plugin manager, which again I think is also an abstract class like the one that's actually used by Jenkins defines the plugin strategy like As a private class inside of itself So I couldn't just copy like I couldn't just get to that plugin manager that was provided by Jenkins because It was private. So I had to define a plugin manager in here or plugin strategy in here Part of the plugin manager. You can also see there's this class loader And this is the actual instance itself that there the actual object that has the references to all the different classes inside of Jenkins So all those different things like after it's been imported will go into here And then you can query this to be able to get instances of different classes If this is getting too into too deep into other cases, you can let me know. I don't know how much How helpful some of this is to actually Being able to see like extract the steps Because after like all this is done the basis of the really important thing that we want to do here is We can use after we have a references plugin manager that's been loaded up we can tell it to We can basically say get stuff descriptors And we can use it to be like call run tasks and it will be able to And this is another way to be able to actually like use the task manager. This is kind of So I was getting a little complicated but um Yeah, like I can understand how this is kind of going in there But obviously we can end up using like the stuff descriptors And the extents like the extensions and query the hyperlocal plugin manager to be able to get that piece of this piece of information so So are you okay if if I ask a sort of a directing question towards Sagar has is the one who'd originally started us on this on this line of questioning. Sure the He's looking at how could he apply this to the rest api And I'm assuming what we were what what the technique then would be is Whereas the pipeline steps doc generator looks for pipeline steps The thing that the rest api Would be looking for is it would be looking for things that are providing rest api endpoints and so instead of a step descriptor class. He might be using something different Yes, so yeah, so like this is kind of the important line here Because this this is kind of like this here is this init strategy And this diagram plugins because as we saw before like this plug diagram plugins method here Exhority Jenkins internal stuff. This this is the this is the important method. So yeah, this this Right, so This these three lines pretty much Tell it to get started the init strategy I think it's defined It's something that you can import from Jenkins. We basically pass it in and say diagram of plugins is basically Tell it to go and because it's execute reactor comes again from like how Jenkins tells the plug in manager to run. I'm not 100 percent Sure right now like why it does it this way But this is I just know that this is how it has like a reactor is how Jenkins interacts with the plug in manager So basically I just copied the execute reactor method and told it to face Basically told it to run. I think there might be some reason. That's why it's like has some mock Jenkins stuff But you have to tell it that it's here as a reactor and then Yes, but here instead of looking for you the for REST API annotations I don't know what they are, but I just know that the step descriptor one looks for the plugin steps. So then after that you have A lit it will return and this fine components You can search for anything based on class And it will return a list of that class And then from there Everything below that like this is the part that I think you're very cared about and then everything below this is basically getting it to the point where Excuse me, like it basically getting it to the point where it can Generate the ASCII doc, which was its own fun because there is no Java At the time when I was writing this there was like no good Java library to be able to generate ASCII doc. So that's why Like this document exists or this class exists. It goes and actually Takes a whole bunch of pieces that are very specific to like what Step is and then appends a full it's it's a little painful. It takes string appending and just builds This doc like builds this massive string Of layers for that is ASCII doc Um, I kind of wish I was like a better way than other than string string appending I think if you're doing breast documentation, it's a lot easier to be able to um I think there's libraries out there that would help you with this but for ASCII doc there wasn't so it looks this That's why this class in this quasi descriptor are a little messy. I'd hope there would be a better way than being able to build it like that So right so Sagar Are you okay with what you've heard so far or any questions that you have? I'm I'm fascinated kristin. Thank you very much I will I will keep asking you questions for another hour if we're not careful. Okay. Did you have specific questions? Yeah, thank you kristin for this beautiful presentation and uh, so currently I don't have a question to be honest but so far what I understand what she said is um cloning all the plugins and then um, you said there are three lines Which is um, quite important What they're doing is actually extracting the classes that We um cares about and then from that actually from that classes, which you named. I believe stem descriptor. You are just extracting your Yeah, I guess Right. Okay continue kristin. Sure. I don't know what else we really want to uh Go into here. There's a couple. Let's say some of these are kind of maybe a little bit Some of these are going to go a little bit more into Pulling out information about the steps like this process steps piece. This is going to be very this is actually When the stuff of the rest api generator, you'll probably write something similar But very focused on how the rest calls look inside it like how the rest pieces look I don't know really I don't know too like when I looked at this it was very much of like, okay What this is the step descriptor class like what are the different pieces? You'd have to look at the rest api ones is like kind of maybe build something similar Excuse me. And then um, I yeah, this is just kind of figuring out what's the plug-in name. Um, this might be helpful for Figuring out that piece because you can get a descriptor and then there's a method inside of plug-in manager Where it like acts like the plug-in manager could actually tell you this stuff And that those pieces are found inside of here as well It's just kind of like a that this is kind of like the benefit of having a whole plug-in manager rather than trying to figure out How to parse these files yourself because it has the plug-in manager itself has a whole bunch of methods That are just useful for being able to parse the information that it holds inside of itself Especially like this Get plug-in name for descriptor like these are things that the plug-in manager can do and since we created our own local version We can take advantage of it, which is awesome Versus trying to have to parse everything ourselves like that's kind of the whole reason again Like we use the plug-in manager. It's there's it's powerful It can do things for us and it means that we don't have to go through and try to like Search on I mean there's hundreds and hundreds of plugins And all of them could have pieces. This allows the plug-in manager to just do it for us So that's kind of why we I went down this path with the Generator like I wanted to be able to take advantage of the plug-in manager's abilities to have these Things built in Thank you very much. Kristen. Excellent. Thank you. Thank you Sagar, it sounds like you've got what you need. Did you have any other questions before going to other comments? No, um, yeah, no, um, I'm just going to now break down this video into what she said and taking a But actually that Like to code block is doing and trying to relate it with our REST API Right. Yeah, so I what would be really helpful here and I think at one point Actually, now I'm thinking about this I think Andrew bear tried at one point to take out the hyper local plug-in manager In all the mocking pieces into another repository. So maybe that as part of the project that would be useful because We don't really want to repeat code, right? So like if it's possible to like take those pieces out So they can be used by more than one thing. I don't know what other documentation would need to be generated um But it could be helpful in the future basically like these Like basically being able to take out the plug-in manager these Jenkins it has another thing I should point out Because of the way the marketo works It has to be in main Java Hudson folder Because that's how it's stored like thankfully not too many levels deep But like the Java Hudson is where the package is located inside Jenkins. So it just has to follow that same folder structure If you take those pieces out it can be used by anyone anywhere. Um, but Yeah, like basically again like in two halves I always take like this Mocking half and then as soon as you get to this part where after you execute the reactor and basically load up all the plugins Feel free Go for it. You can figure out you can do anything that the plug-in manager allows you to do because now you have a reference to it And you don't have to worry about spinning up Jenkins I have a question here. Sure. Yeah Yeah, uh the class the plug-in manager that you're using is this the same as plug-in installation manager? The tool from Jenkins. Oh, so the plug-in installation manager is another really cool thing But the plug-in installation manager it helps you basically get to the point before you want to start your Jenkins so that will go and um It plug installation manager will take a list or you think you take like a string separate comma separate value list Or I think you can use A yaml file mark. You can back me up on this that one. Okay. Good. Say yaml file And you could actually and use that to go and download the plugins in the first half So almost you could use these projects together, right? You can go and say hey here are the list of plugins that I want to install Or I would like to basically run with my to get the plug-in steps or pipeline steps for Download them to a folder and then when you run the docks generator You point it at that folder and then it will just look at that subsection of plugins the um I really think the project that that was a google summer code project like two years ago. It was it was really it's really cool Yeah, like yeah, it was uh two years ago. So in this year, uh, Oleg has like mentioned this project like some improvements for the tool So I think this year also this is in the ideas list Yeah, I actually helped with that project two years ago too. So if you have any questions about it, I can answer those as well So maybe it's a good thing I go today, but um, do you have any specific questions about that project? Yeah, actually I have I have been like thinking uh, I read the details about the project idea and there was like improvements, uh, which were based on the tickets Which are posted on zira or the issues that were posted in github like github So, uh, like there was one feature like requested by some user regarding the locking of the like locking the dependencies uh For the instance So I was like thinking I didn't do much of a research But I thought maybe while like if you're given a file to print out the Like if you're given the file to download the plugins Like will it be feasible to just copy those things? I mean I'm sounding too simple in saying this but like if you want to if you want to lock the like dependencies If a user is providing us a file and we are already like spawning or we are already finding the dependencies which Like the sub dependencies of the of that plugin. So like is this way like the way of Printing all those dependencies in a file Be a better like an idea or a solution to the locking mechanism locking request Did you get my point? So what you you're proposing I think is that you would like to if you have a version if you're providing a version of a plugin You would say I find all of this dependencies and put them to a kind of like a pre because there is a preview function Inside of this to be able to tell you what would be downloaded install So as part of that you would like to say all right Here's what I want to install and then here's kind of what you need to What what it requires do that kind of what you're The reason that this is a little bit harder Then originally thought is that um When you have a whole bunch of different plugins inside of Like basically you define each of them could require and sometimes they do require different base versions of the plugin And one of the other plugins that you might have tried to install Will require a higher version than the locked or like a yeah a different version of the one that's locked so um You can end up with down the line dependency Conflicts so you know you have like your locked version Might be able like it it requires certain versions of the plugins to be installed and like If you want it truly at that version, you can't really have features that are being issued by plugin or by uh Plugins that are at a higher version level. So I think that's kind of like where the problem Comes in but doing a preview stuff where you can say these are exactly the versions of these plugins required by the one that you have Locked is helpful So I think the big yeah the big problem with that is it's just like so hard to be able to do the dependency map um calculations I think like halfway through that project There we ended up finding some other class like other projects that made it easier to do version dependency calculations And I think that might be useful to look into for this for the Download project is to see like what else? There's some code out there to like how to write a package manager and like that might be able to be helpful For doing these calculations steps. So if you can Look to see Yeah Yeah, can you if we can mention the names of some something Sure. Yeah, I'll I'll find them and put them in the channel But like those might be something good to look at as kind of like a an overview of how to Do the dependency calculation stuff because yeah, it it got really hard at a certain point I mean, it's really fun. It's a really fun problem, right? And it's something that you've got to do you have these huge maps and you have to figure out What's the most optimal thing to download? You can't have duplicates. You only have one Because Jenkins will not be happy if you try to install multiple of the same plugin so like which one do we end up installing and so I'll see if I can find those again and post them in the But like that or sorry in the getter channel But that would help with how to help do the dependency calculations I have a contextual question this discussion has has turned to being About the proposal for the plugin installation. Yeah, okay Which is to update? Yes Update the plugin No, no, no, please this should be a free-ranging discussion I love it when people just take ideas and run with them and connect them to new things So that's perfect. It was really for me um, and then that question of dependency management and managing different versions of dependencies that may be needed um doesn't are we So the idea is that we would essentially roll our own for that It does not seem that there should be some Some open source tool that should be able to help us with dependency Like it does seem like a very package manager type problem Which seems like there's been so much work done in that space already I just don't know what tools could be used with Jenkins, but That's what was hard like right because we were just basically like all we want from the package management tool It's just that calculation step Because we've already got all the files. I like we already do our management, but um inside Jenkins It's just kind of like take the latest And so um, it was just like, okay How could we basically get that the the Calculation and it's like if we can just take the calculation That's what we would want to take from the tool because right you're right Cara Like there's a ton of tools out there to be able to do this already for almost every flavor But it's like we just I think that that of installation manager tool just is supposed to act like Our dependency management or it's just supposed to be like our package management tool. Yeah, we just need a better We just wanted to kind of look at How best to calculate the version required So yeah, that's a really interesting problem. Um, yeah, it's it's really cool. I love Yes, it's like that's what like both of these projects are really interesting But yeah, it's like the the Kind of how to come up with the data structure to be able to store everything and the sorting was really fascinating so I am surrounded by graph theory near nerds I Am not a big I'm not a big lover of graph theory. So I'm glad to have other people who love graph theory. That's really great I think that's everything for me. Does anyone else have anything about this? Would they like to have questions or just just to um Uh, ask more from you Kristen actually Sure. No more than you are more than welcome You we would be very grateful and excited for you if you had any time to um Volunteered a mentor for GSOC and if if you had that space in your schedule If you wanted to put yourself down as a mentor for either of those projects, that would be great I I should just say and I don't know if this is being if we're messaging this clearly enough, but um And I I should be working harder on this the GSOC projects this year are half the size essentially in terms of hours being demanded of the students Okay, so the overall projects will themselves be smaller as well to help a smaller scope um And this also means obviously It's not going to be half the work for mentors But it is a little bit of a reduction on what's going to be demanded of mentors because the projects will be smaller But the more mentors the better then we will share that on those too. So it's good Sure. Actually, I got a question about that. So when does it start this year? You know, it's like this multi-phase process the coding case is not until the summer it's it's basically the same 10 weeks. Um, and actually I can Precisely Yes, it's still over the same number of weeks. It's just reduced hours within the weeks Right. Okay. Okay June 7th, august 16th, and then the reduced hours are really just taking into account The fact that this is this is quite a year and I think they're trying to have a new GSOC So basically students and mentors can work out how they want to arrange Their hours of work depending like if students have exams or they have something going on in their personal lives And that's fine. We should be flexible with them and similarly for mentors as well Which is why it's nice to have multiple multiple mentors, but yes for Submitting our application as a GSOC project that application is due very soon. That's due on february 19th So it's nice to have additional mentor names down You know have that as part of our application And then in March the organizations that are chosen are announced and then there's the student application period and then the student bonding period But coding proper doesn't start until June. All right, awesome Cool. Thanks. Thanks for thanks for that Cara. Yeah Thank you for being here today. Yeah, I'm glad to help talking with us All right, I will stop sharing There we go And again, if there's any other questions, just let me know I'll try to I'll be better about being in the channel Deeply appreciated Kristen. Thank you. Thank you. So Vibhav is also with us Himanshu or Saigar did either of you have questions relative to any of the cloud native topics the cloud events plugin or anything like that If not, that's okay But Vibhav is with us and is probably willing to answer questions if you have them on those project ideas If you don't no problem. No no guilt there. It's just We've got one more potential mentor here as well. If if there you have questions on cloud events or on Oh dear, it was the kubernetes project. Help me out Cara, what was the other one? Detect on plugin plugin and actually I have questions. I have questions for Vibhav As as well and but I'll let the prospective students go first Or or I will and Vibhav I had a question on your design doc for GSOC cloud events plugin proposal Um, I gave a little bit of feedback, but in general, I think I think it looks great. Um, Have have you been able to? connect that design doc to the the proposal that's on On the Jenkins GSOC page um, I I haven't updated it there, but Let let me put a request for stuff like that I still need to go over all this stuff Yeah, that would be awesome because I think it's helpful for students considering the project and then I wanted to ask I didn't See but you know, it might be me. I didn't see the um tecton client plugin are you Still happy to propose that as a GSOC project idea Yes, uh, so for the tecton client plugin I what I'm going to do is I'm going to create a uh design doc which Which kind of explains all the client plugin does so anyone who wants to get started can easily get started about what already exists and then Uh, I uh, I'll create the proposal and create a PR for the proposal within tomorrow's problem Awesome That's great. Did you have any um questions for us as organizers any anything that would be helpful on our end just so I know I just want to make sure you feel supported as someone who's proposing ideas I I need to gather questions I so this is the first meeting I'm attending and I was actually in a sprint review just some five minutes ago So I need to so I will I will ask maybe the next meeting I might ask you But for now I'm I'm here just to attend Okay, great And do we have any student questions for the bud? Uh, not from my side How much you're good for the moment maybe next week Okay, sounds good. And then I have questions. Um, essentially for mark As as uh my mentor in this process. Um, we have had potential gsoc Proposal ideas that have been submitted on the jing and ci dev channel mailing list. So they they are public and You know, it's it's hard for me to understand how how Where to go with them? So they they've been proposed as as rough sketches They have some merit as projects. There's been a little bit of feedback But it hasn't really gone beyond that stage. So What do you suggest I do mark and specifically I'm I'm talking about if you've seen the jingens operator And virtuous labs may be able to commit some mentors as well. So that's kind of cool And it's a fun project and the other one is the maintainers heartbeat Like abin's proposal. Um, I don't Know I mean I can share my screen. We can look at the email, but that's maybe a bit excessive. Um, so So I let you decide mark. What what do you think should I follow up with you later? Do you want to discuss it now? I think I think a good a good Cat one of the one of the common patterns I've seen anyway is people submit a proposal and receive no feedback And one way to bring it to life then is to ask a question relative to it Or two of us ask questions. So we get some clarification that helps the the person making the proposal relays Ah, there is interest And it helps them also get their ideas more precisely formed So that they could take the form of a project idea submission to the to the jankins.io website So because I think ultimately when you submit the or when cdf submits the package to google summer of codon What before the 19th We submit that has to include a list of project ideas that are Are in fact project ideas with mentors behind them And and so so we need we need more detail from them and we need them eventually on the website So they've only got right now eight days basically to to get from Google doc to pull requests to the jankins of iosite merged ready to go into the into the submission to google Okay Yeah So I think just ask them a question. I can certainly act as voice to ask questions as well if they'll help Yes, yes Yeah, I'll follow up. I'll follow up on both those especially the vertus lab ones They they were at the cloud native sig last week and I'm discussing the jankins operator and And and then followed up saying they could make it into a gsoc Potential well, and you've got cloud native sig meets again tomorrow if I recall correctly doesn't it or is it Tomorrow Friday so all right it meets Friday So if that's another good place to to have discussions and help them Get closer and closer to an actual project idea that is that meets all the criteria We have for a project idea that has a quick start that it has mentors That it has enough skeleton on the You know enough enough general outline that a student could actually Take it and and have have it as a good idea for the beginning Okay Yeah, okay good good good good. Hopefully Yeah, I want to put that forward rapidly in the next couple days great And then to circle back To the hyper local plugin manager that christen Discuss is it worth me contacting andrew bayer and asking him if he gets it sort of Factor that out into its own little Project to be used So so I think it got factored out and it's like not updated that might have been This has this has existed for this project has been around for like four or five years And I think he did it like maybe like four years ago So I think it might be worth Making sure that they're they and I know that updates have been made to this class Especially I think mark you were even involved with updating the Jenkins version of this depended on So like making sure that those changes are into that particular class Or into that project would be helpful. It just kind of went off on it I think he realized he wanted to use it for something and then just kind of You know, it's one of those things where you start it and then you just kind of they kind of Withered or it didn't it's not like kept up with maintenance. So it's just hard to make sure that it also is being At the most recent like the most recent version of Jenkins And there's a couple other pieces that I think zebnik who's been really awesome has also been looking especially with making sure The display looks really good Because there were some display issues. I think early on with generating that big string I think he might have made some improvements too. So in certain On certain minds, especially with the upgrade. So it's that project. I think is kind of just sitting I don't think it's been updated at all But I think for this particular project it might be useful to maybe revive that And then update that piece just because it's something that could also be used for The breast api basically update that and then Maybe be able to use it in both projects. I don't know if that now makes this way too long for Google support for the project proposal But I would think that that to be like that would be really beneficial to being able to get both of these pieces using the same underlying Plug-in manager code and also to make sure that it or just anyone else can use it if they find it find it useful for them Sorry, go for it mark Oh, so Kristen is is such a software engineer I love software engineers when they tell us about avoiding duplication, etc I'm much more lazy. I had to just copy the codes. I got so I don't feel the least bit shame and cost So so Kristen is being very software engineer and that's really great. That is so impressive I'm I'm much more. I've got a problem. I need to solve I want to I'll just dirty copy the code and if someday in the future I want to refactor it to read to be dry, you know to not repeat myself. Oh, that would be great So By the way mark I had a question for you if this is not Going in another direction So I want to ask how are the how would the goal setting be done for this year's GSOC? exactly like I haven't Been in a GSOC or been a mentor before so I remember you saying on on the Gitter that You before you guys did two meetings a week to see where the student has reached in terms of coding For checks and stuff and that is how you actually get stuff done So I just wanted to ask how this will change for One and a half month long period of coding Which is actually quite less And I I think that I assume that the project team that the mentors and the student will decide How they want to do that? I can tell you what worked for us And I know if if I'm chosen to mentor if if somebody will finally pick up one of the get projects and choose that So that I can mentor if if one of the get projects gets selected and we get a student who does it We will negotiate with the student that I would personally bias towards Twice a week still even with the student only working roughly half time Because the frequent check-in was so valuable for the student It left much less time for them to be wandering in the wrong direction before the mentors could point them in the correct direction So we might we might go 30 minutes twice a week But the twice a week was so valuable We we initially started only once a week and once a week Just left too long a time for the student to sort of wander or not feel connected to the project and twice a week was much more useful But but you'll you'll set that as a as a team and thankfully you'll learn by sort of hard experience What works for you as and for the student? Okay, that that's one that makes sense to me. Yeah because the student needs to be Connected and once a week is actually very less of a time for any team to Like get together and work together once a week is very short amount of time also Another question I had was I could so if If the time period was three months The cloud so we could have started with the cloud events plug-in from scratch almost so The thing is with the tecton land plugin It's already in poc and we can kind of build tasks around what needs to get done And then those tasks will be what what would happen on over the period of the coding phase but With something like a cloud plugin a cloud events plugin. I'm just I'm just not sure How to do the goal setting exactly uh It probably might be easier even for cloud events plugin because there's one Goal it should be kind of like a web book trigger plugin where upon listening to the cloud event you put a trigger job or something like that, but For for this for so how do you do goal setting in? In something that is a lit involves a bit of like innovation line, I guess All right So Yeah, that's where you keep my question. Yeah Yeah, so so the We were doing something like that with the get plugin uh last year's project had a A proposal to do something a certain way and as we went through the project we discovered Oh There were things we didn't know when we did to find the project that would now we know during its implementation We we adjusted the the goals at that time we described. Hey, we think we need to change a direction and do this other thing so I think the first objective is that the student in their project plan proposes a goal And that goal that they propose should be something they feel strongly about This should be my goal as a student in this project and your your phrase Sounds like a good one for the cloud events plugin. It should process cloud events when they arrive It should be able to publish cloud events And those those feel like really good goals and that's sort of a vision statement that the student can include in their project plan Was was that what you were asking me bob or did I misunderstand? Yeah, that makes Oh, that makes sense That does make sense Yeah, because in this way the student can themselves Figure out how to go about their career on this. Sorry their path on this GSOC project so how so That actually brings up Something interesting is How much of the project is actually student led? Obviously, like there are mentors, but how much of the project like The plan for the project is decided by the student itself It should be it should be the student's project plan So what the what the what the jenkins project will accept is a student ultimately is a student project plan A project plan submitted by the student. So right now we're in this project ideas phase where ideas are proposed by anyone but when when it comes time to select The few people who will actually be authorized to go forward will have mentors assigned and will be staffed projects Then we're actually we are choosing these students proposed project plan and Actually the same project idea could result in multiple plans from different students And we're choosing one of those plans and the student that submitted that plan This does that does that answer your question? Yeah, yeah, actually. Yeah, that that actually tells me that I need to do more reading Uh on GSOC guidelines and stuff uh, yeah So yeah, but thank you mark. Thanks. Thanks for the detailed explanation Super Yeah, and looking forward to this we're going to have fun. Kara back to you We're definitely going to have fun. Um, the only thing I would add to that is that um We very much want the students to going to reach open talks We want them to to produce something that they can show and that is that is the goal but um And even broader or more fundamental goal is is actually the students learning An experience with open source. So It's actually okay for the student to have parts of their GSOC experience be Like oh, I tried this and it didn't work and I can explain, you know Why didn't work and what what I learned from it and then we went and tried this and that's okay, you know, like it doesn't need to be um Not every step of this as a work project needs to go perfectly for the student They're allowed to actually explore and try different things So having that space within their project idea of like where they're going to figure out their way forward is actually It's it's fine. It's okay. Um, it gives them more space for them to bring their own creativity and their own trial and error and the experience of that So it's not just about, you know, writing production code Although we do want their code to go into production. So Does that does that does that seem right mark? Yeah, yeah Okay But yes having fun is is the most important part and really enjoying open source Thank you for reading to Jenkins Great. Okay. So it's basically top of the hour. Do we have any extra questions for today for our mentors who are with us? Or do the mentors have any questions? Okay, great. Thank you all for being here today with us and we'll see you next week Bye. Thank you