 Welcome. This is Pipeline Hill, the Sheikot Africa Contributon Project. It is May the 16th, 2022. Thanks very much for joining. Topics on the agenda today, questions and answers. Seems like the most important topic and Sophia and Afi, let's put your questions and try to find answers on that. And then if there's time within the hour, we can do other topics as well. What other topics would you like besides question and answers? There'll be a lot of questions. Okay, good. Then, then let's get started. Go ahead, please. So, Afi and I worked over the weekend together and we were able to highlight contribution we will be making for this project for all the plugins that we listed. We started with some of them, and we actually like some of your assistance. So, what would you, how can we help? Okay, so if we should start with the build plugin, we went to the plugin page and discovered that there were no, there's no enough information about the plugin just an introduction, which you can also see in the Git repo here. Oh, hang on just a minute. I'll get there. Sorry. It's build pipeline, isn't it? Yes. Okay, and that, no, so that's not it. So I must have the wrong one. Build step. Build step. Thank you. Build step. So pipeline build step this one. And now if we open that in GitHub. This is the one you were working on. Is that correct? Yeah, this is one of the ones, yes, this is one of the ones we're working on. And we discovered there is no information about the plugin and just the introductory part and would actually want to have more information there, but would want to have more experience on exactly what to do because for now we just probably have some examples probably would like to include some examples. Unlike the Git plugin, it's having a lot of information and I think if you can maybe guide us on what exactly to focus on, we can make useful contribution. Very good. So, so would it help if we look together at the kinds of places where people would use this plugin and how they might use it to do to do interesting things for them. Would that help you? Yes, please. Okay, so, so what I'm going to do is I'm going to bring up. Oh, whoops, I'm going to bring up my Jenkins instance and we're going to look briefly at and what we're going to do is we're going to create a build job. So let's, let's give ourselves a new folder just to put things in. And inside this folder, I'm going to create a new and I want to create a new freestyle a new pipeline job first. So, let's call it call or use build, build step to call other to to launch other builds. So here I'm going to create a pipeline step that's going to use the build step and I, whenever I create a pipeline I like to first be sure that hello world works. So I'm doing the hello world I'm building it now and there it is it worked and it said hello world. There's the hello world okay so the, the, this is a fake for now but we're going to use the build step to launch other builds. Now the idea then let's make this text more readable there. So then, then now I need something that can be launched. So I think I need a new, a new, a new item here which is. Let's call it a pipeline that will be launched. So this is the thing that's downstream. And again, I'm going to just create a hello world entry here. And then I'm going to run it once just, just to see that it works the way I expect and there it is and it says hello world. Okay, so now I've got two jobs here one is use a build step to launch other builds and the pipeline that will be launched. And now what what a user would do is they would configure this pipeline, the, the one that's going to do this launching the top level thing. And in pipeline syntax. They click build. And the job to configure, they want to use that other job that they're going to build so they want pipeline that will be launched and I need to get the text of that that way. So pipeline that will be launched and now it hints to me, hey, this is a job that it recognizes so it knows about that job and I could have made this much less text. And if I just said pipeline, it will suggest that and I could click it. Okay, so now, should we wait for the job to finish for this time. Yeah, let's say yes, do we need a quiet period, I'm going to say just for fun. So three seconds, and now I'll generate the pipeline script, and that's what I want to do. So what I just did is I've generated a script that says the upstream will ask to launch the job named pipeline that will be launched, wait three seconds before doing it. And it will wait for it to finish before the job will continue. So, so here we go. So this is use build step. I'm going to put that in and then I'm going to say echo goodbye world. Any questions so far Sophia. Or is this, or is this not helping and did you have a different question that I should be should be doing something else instead. Okay, all right, good. So, so here what we're going to do is we're going to, we're going to watch. So remembering that the pipeline that will be launched. It's only been run once we see down here that there's it's only been executed once. And the use build step to launch it's been launched once. So now I'm going to build now. And when we look at what it says, it says scheduling project, something and starting building something and then it says goodbye world. So here's the hello that I started with the goodbye that I put in and here is a separate project that got run. Now when I look at this page and refresh it you'll see job to ran, even though I never clicked build now on this page so. So what the build step did is launched another job. And, and now if we if we do things like, for instance, let's configure this one, make it a little more dramatic we're going to instead of just echoing hello world. We're going to sleep for 15 seconds. We're going to wait inside this job so I'm going to save that. So when I click use build step to launch other builds. I'm going to build now. And watch what happens here notice that it started one second ago, and six seconds in it hasn't finished yet. Now if we look at the trend initially it only took three seconds the first time I ran it. This time it's over 11 seconds and still hasn't finished. And that's because that 15 second delay that I put into this job sleeping for 15 seconds. That 15 second delay was waited for by this upper level job. So, so one of the use cases that's good to describe is in this pipeline syntax generator, wait for completion, what does it mean, and how do we explain to people why it means that. And so what wait to come for completion means it's got. You may ask that this pipeline wait for completion on the downstream build. And here's what. That says, okay, now what is all of this other help and this kind of thing gives us lots of insights on. Oh wow, there is a return value that that I could use that can give me other examples so not just not just that hey let's look at what wait for completion means, but now this is giving me a hint, and I could remember other things about this. So question so far. Yes, so I was going to ask about those parameters. What happens with that wait for completion. I don't like. That's really advanced, or I don't, I don't know. Are they supposed to be in the pipeline step and it wasn't needed. Because I can really tell the usefulness of it. Okay, could you could you ask your question again so your question was, is this. Oh, go ahead. Yeah, this other parameters down here after may experiment. Yeah, yes, those ones. Like what, what am I supposed to am I supposed like, what are we going to use them for as a user. Oh, good, good. So, how would, how would these things, how would these things help a real user. Good question exactly very good okay and and what what I think you just asked is, why would a real user care about build number return from a from a wait and what's the what's the case what's the use case the story that someone would care about that one. I think is what you're asking right so so let's let's talk about that because I think that's a good, that's a good place to look at these kind of things so, so what I'm going to do is I'm going to try to take what the snippet, the syntax generator suggests here, and it says hey, the return value of the step can be used to get information so let's let's do let's get the return value. Now, now you're going to get the process of switching from declarative descriptive pipeline. And so build. So, and I apologize that this is for me a rather more advanced topic than just, but I think it's a way to answer your question. So what this is going to do is this is going to say, and then we're going to say echo. So build result is is. So what we're doing now is we are remember remember the return value from the build step, and then display the result of that to the user. So let's let's try running it now. And just to make things go a little faster we're going to change this sleep. We wait 15 seconds maybe we wait three, because three I can wait patiently for. Okay, so now remembering how I'm configured I'm going to call that builds that that build step and remember its return value in the build result variable, and then I'm going to display it to the user let's see if this gives us what we hope. So here it is it schedules the downstream job started building it now we enter the three second wait period. And here it says, Oh, this is what we got back. Now that for me is not terribly helpful. What is that well what this help says is it includes, let's see where is it inspect its dot result and so on so what this thing has is a bunch of fields. A bunch of attributes that I can look at like dot number. So, so let's look at that one now by saying configure it. And now instead of build result we're going to say build result dot number. Okay, so it's now referencing that build result thing that was returned from build and looking at the number field. And so now I need to make this. Oh, no, no, I should do it this way. It's much easier, we can all see it better if I do a second echo statement build number is build result dot number. And while we're here, let's see if we can get one more which is the, let's see a good one is the result. It can be can be interesting so build result is this. Here we go save it build now three seconds wait. build number is five build result is success. So now if we look here, the last build number here was five. Now I'm going to change this. And I'm going to say let's fail. Let's make this one instead of success let's make it fail. And intentional failure. I think that's the syntax we may have to look it up. Build now, waiting the three seconds starting it. And it says. Oh, look at this it says. It failed and stopped the execution of the upstream project. So the downstream failure that we'll see here, cause the upstream to fail again a use case that we'd like to describe what if I want to ignore the downstream failure. It says propagate errors thing. So, again now when I generate this it says propagate colon faults if I wanted to ignore the downstream failure and just report it. So I've got to configure this job. And say, I'm going to add a new parameter here propagate faults. I'm going to start building it again. And this time what it should do is this job will schedule the downstream. Start building it. Wait the three seconds, see that it failed and still report. It says build result is failure build numbers seven. Now that's my downstream here so let's, I'm going to build this one now just to give us a new number. Let's build several copies of this just to be sure that it's distinct. So ready here we go again build one more time. And what we want to explain to the user is, Oh, this is what propagate faults means and this is what, what the, let's see the other the wait for completion means. Did that help a little bit Sophia or do you ask more questions help me understand what, what else we should, we should highlight. Yeah, yeah actually things that else on meaning that with the results we get from the downstream pipeline build don't we could actually like me can make it conditional statements that if this build fails. We could run an alternative or backup view of something. Yes, exactly. Very good yeah you understood it precisely it's if because of because of what I've done in this example here where I said, remember, remember the result of the build that I just called. And then I could do a conditional based on build result dot, dot number or build result dot result. And now if I, if I, if I don't want to worry about that and I say, if I call a downstream job and I just want it to fail everything, then I would remove this propagate faults or set it to propagate true. Now let's take out this quiet period, because again that that's something that can be explained but in this our particular example. I don't need it now when I build. It's going to immediately start it and it won't wait for three seconds, looking for other changes, it just starts immediately. So, so does, does that address your question with regard to to what might we say in this help about wait for completion and what might we say in the help for propagate errors. This is an example in propagate errors and, and here's a, I think they're both valid, valid places propagate errors for me is a little easier to see how we might add an example here to this text, where what we would say is the pipeline is a real tax generator generates the following when we, when we disable propagate errors, and then you might say and we would do this because we want the return value. We want to use the build result, but we don't want to block or disrupt execution of the current job we just want to get the return value, and the job value is the job result. So, use that for further logic. Does, does, does that sound okay Sophia or have I have I have I missed something. Okay, so are there, are there other questions that you'd like to ask. Should we hear from our first person. I, I fear that off he seems to have dropped off from the call I don't. I, she may have had internet issues or some other surprise. So, absolutely, we can certainly check with her as well if she if she rejoins us. Okay. So, sorry, why actually like license some examples for the agency here. Um, I really couldn't generate a stay the syntax with credentials issued to request with credentials. I was able to do for the custom errors, the motor part fire and the others, but I couldn't do for the credentials I don't know if you could then wait. So, was that was that the credentials you were using with the gets get with the checkout step, or was it with something else. It's HTTP request plugin. Oh with HTTP request okay so let's, let's do that one very good let's let's try that I've, I've not used that plugin before so if you don't mind me doing experiments here live. Let's let's do that experiment live so let's create ourselves a new job that is and make an HTTP request. Okay, so again the usual thing I need a hello world I want to be sure that it builds. Hello world looks good. Okay, there it is so now we want to generate an HTTP request that we're somehow going to use. And so that HTTP request. We still need the pipeline snippet generator to help us generate the HTTP request. Right. Oh dear do I not even have it installed on my on my. I must not have it installed just a minute let's get that plug in installed. Okay, install. HTTP. I do not shame on me. Okay, so we've got a first install the plugin. HTTP request, and here it is. Okay, so download now and install after restart. Okay so in about 30 seconds we'll have a, a running Jenkins with because of how busy this particular one that I'm running is it would take a while so will. So what we want to do though is we need to, we need to create an HTTP request that is a good example using a credential ID, right. So just a minute let's see what I can do with that as a as a possible target for an HTTP request maybe what we ought to do is try. What's a place where we would go with an authenticated HTTP request maybe to CI Jenkins.io. What if we tried there to launch a build of because I happen to have permission to do this you you may not but I have permission to launch a build so maybe what we do is we find a plug in that it's okay for us to launch a build on it and that will do that with an HTTP request oops wrong one this one CI elastic access. Okay, so we look at the rest API here and we're going to use HTTP to make a rest API. And we get a call to schedule this build so here's what it says it says to perform a build post to this URL and you could do this with your own server I just happened to be using CI Jenkins.io. So, this is the URL that I need to open with a post request. I don't need to use credentials, because if I don't use credentials CI Jenkins.io will will just discard my request. So did we ever come back here, come on, come on, it takes a long time to restart my big Jenkins instance just moments. So, while that's restarting I'm going to bring up a text editor and make use it as a place to put some notes. So what I want to open is that, and that will ask to schedule a build now what what I think we should do to experiment with this is we should first try to open it without credentials and confirm that it fails. So if you get that in the Jenkins job, then use a credential to open that URL and confirm that it works. Does that work okay for you Sophia if we take that approach. Come on Jenkins get back. Okay we're getting better. Sorry for the slowness let me go look at it and see what's keep making it slow. Interesting. It's just starting. Oh, here we go it's back. Very good. Okay so into our folder. And make an HTTP request. So here I'm going to do the configure and for the moment. I'm going to close the tabs on my right hand side and I want to use the pipeline syntax to find out how to make this HTTP request so I click the pipeline syntax generator. So the request, the URL that I need is this one, and it said that I need to use post. So I changed the HTTP mode to be post. And now if, and I will I definitely do not want to ignore SSL errors so I'm going to generate the pipeline script so here it is. Let's see what their suggestion is for my my command that I should run. So let's try that here. And with my apologies, I have to have shorter lines. So this says it's going to say hello world. It's going to submit a post request to see I dot Jenkins that I owe asking to build the elastic access plugin. Let's go check to see what things are looking like right now before we start it. So the elastic access plugin right now is its most recent build is number 170. So remember that number 170. We're going to save this now and build it. So it will say hello world, it will make the HTTP request, and then it should tell us something about it so it's opening it's doing a post to that location, sending the request. And it says forbidden. Good. Okay, so that's the failure we hope to see. Right it says, I tried to access this URL, and wasn't allowed to do so. Now to your question how do we add a credential to this. And I think we do that by clicking advanced. And now, where is a credential choice. I don't see. Oh, here we go authenticate. There we go. So let's try this one. So how do I have a credential that I can, there's the Jenkins API token which I may not already have a credential here that I can use. So I may need to actually add a credential for right now let's, let's just borrow one of these and try it so that we have the syntax but I expect it will fail because none of these are for CI dot Jenkins.io. So, I'm going to generate the pipeline script to use a credential. I'm using this credential but I think this API token is actually for my own Jenkins controller, not for CI dot Jenkins.io. So let's try it just to see. And here if I grab that I only actually need this additional parameter authentication everything else is the same. So now when I build it remembering that last time when I built it the output said sending the request and it got a response code forbidden. So now let's build it again I expect the same thing but I think this time it will mention that it's trying to use a credential. So here it says using authentication, I still expect it to fail because I don't think that's a valid token for CI dot Jenkins.io. It's opening up the request, and it says, oh, notice this is different instead of forbidden, it says unauthorized. So it got the request, it saw that I was trying to offer a username or a credential and it says that credential is not authorized to do this. So the next step I'd need to do is I need to create a credential on CI dot Jenkins.io that is valid that I can use. And for this, I'll probably have to turn off my screen sharing because I don't want to record permanently this new credential I'm going to start the process and then we will get to a point where I'll stop the screen sharing so that you can't see the token. So on my Jenkins what I do is I hear go to credentials. No, no, no, I'm wrong. I'm my mistake. Kevin, you may have to help me here. I think I need to do configure. Yes. This is what I want to do. I want to create a new API token on CI dot Jenkins.io that I can use to do this work. So what I'm going to do is I'm going to click the add new token button. And it will then generate a token for me show it to me on screen and then I can paste it into a new credential over here on on this dashboard. So here I'm going to create a credential, let's see where credentials here, and I'm going to get ready to create that credential then there will come a time when I just have to have to put the folder. I want to add a credential here so here the username will be mark you wait. The password is something that I will enter in when I've stopped sharing the screen. I'm going to assign the ID which is CI Jenkins dot IO credential or mark you wait API token. So API token for CI Jenkins dot IO as mark you wait. Okay, so I will put the password here but I'll do it after I've stopped sharing my screen. Any questions so far. Okay, so we're just go ahead. Yes, Sophia. Okay, because I know I tried creating a credential in my local app but I couldn't. I went through the money is drinking money is plugging then global configuration configuration, but I couldn't create a credential. So if you did, you did actually remember. I think it's for the example. Yeah, that's a useful example. But it wasn't to this was right at them and manage plugins down was on the left side menu. Then you added it. But I don't know how Mark did this. Yes, it's different. So let's, let's go through the likely path you took to create the credential because I could do it the same way that you did I think. So I think what you probably did is you went to manage Jenkins. And then you went to credit manage credentials. Yeah. So here, unfortunately the user interface is confusing and I apologize for how confusing it is it is just confusing. What I have to do is find a place where I can click a down arrow that lets me add credentials. Yes. And so for instance, I like to do it from this store scope to Jenkins pick and I say, I want to do here. No, not add domain. I want to do on global add credentials. And I could do the same thing up here. Global click the down arrow add credentials. I find that as a really strange place to have to go to, because my mental model says oh am I adding a credential to the invalid user and password. But the answer is no what what I'm doing by clicking this domain drop down arrow is I'm adding a credential to that domain. So I think what you probably did was, and I sincerely apologize the UI for this particular page is really weak. I click add credentials and it says, I'm adding a credential at the system level, and it's a global credential. And here it here is where I'm adding it so this is I suspect probably where you were adding it. And we could add ours here as well. Let's just do it this way so that it's, it's recorded there so this one. I'm going to make make some additional comments here folder scope. This one I did in a folder, but we're going to take that. And we're going to do it the way you, you did it, but we're going to put it all the way up at the top level. Okay, so, so what we have now is, we're going to get a new credential, it's token will be this CI dot Jenkins that I would dash mark II weight dash API dash token, its description will be API token. And let's let's make it even more clear top level API token for CI dot Jenkins.io. So, comfortable so far Sophia, Afi. Yeah, so far so good. Okay, now we're at the point where user mark weight was about to click this add new token button. And this is where I apologize I have to stop screen sharing because otherwise I will show everyone and record for everyone exactly the value of the token and that that would not be good. So I'm going to stop screen sharing I'm going to press the add new token button. I'm going to take the text from that add new token button, and I'm going to paste it in here. As as this global credential let's put these two tabs right next to each other so it's clear to me where I paste it. So, I'm going to paste it here's the password I'm going to press okay. Once I've pressed okay I can start sharing screen again because I can open it and show it to you and it will keep the password hidden. So, add new token is what I'm going to do next after I stop screen sharing paste it here and then press okay. Okay. So sharing is going to stop. And now I do the add new token and it shows, I need to give it a name like she code Africa token demo. I'm going to press the generate button. Now it gave me the text. And it says on the screen it says copy this token now because it cannot be recovered in the future. I'm going to paste that text into the password field, and already I can start sharing again. Because even before I press okay, you'll see what this how the screen looks and it's already not showing the password. So what you see now is, here's this, here's this password that I pasted already hidden. I'm going to say okay. I'm going to drag this screen off. And press the save button there. Okay. Now back to my configure bringing this back on screen. There is that she code Africa token demo. And now what we really want to see is where did it go and here it is CI Jenkins dot API top level global API token. And there it is and the password is concealed. So now what I want to do is any questions so far on the steps that we've taken generating the token on CI Jenkins that I went and using it in my Jenkins controller. Okay, so now let's try using the snippet generator to reference that. Okay, so we want to do this again with HTTP request. And I need to remember the URL again so the URL was this. And we need to make it post not get we want to heed SSL errors and continuing downwards authenticate and here. I'm so glad look at that marquee weights top level global API token for case so now let's generate this pipeline script. And what we see here I can copy that thing. Go back over here to my. Where was my make an HTTP request configure this. And here it is. And if I put in that again. Okay, so this is saying it's going to authenticate with that API token I just created. And it's going to use the elastic access you access URL through check where we are on CI Jenkins that I'll hear it still build number 170 so we haven't built and run a new build yet. I'm going to save this. Build it. And now this time if we're lucky it will tell us, hey, I used. There's the URL here it's using my new credential. Good. It's sending the request. And it says. Oh, 201 is in the accepted range so now if we go look on CI Jenkins.io. We can see that job number 171 has started. So, so does that give you a sense of how we could do a credential based. Now, now, writing that in an example is is probably easier than actually getting it to work the way we just did because the example you just give some arbitrary text for the credential ID, and assume the user will replace it with their own. Sophia and Afi. Okay, so far, or is there more that we should discuss about how the authentication, how to how to get to this point, because it may be that what we would want to do in a long term thing not for this project but someday in the future we might want to video of this kind of thing where we say look, here's how this is done, because there are a lot of steps to get a credential out of some other system and into your Jenkins controller. Yeah, it's okay actually things so. Thank you, Mark. Thank you. And my apologies for showing you some of the uglier parts of Jenkins in your exploration you're very patient with us. Thank you thank you for being so so considerate and open to try these things. Thank you. So, so far, we've actually got clarity on two major plug in that we had issues with. And I don't know if there is time for us to actually explore the imputes, no game, the input step plugins. Let's do that we've got we've got about 12 minutes left. So if you'd like to try the input step let's let's definitely do that so. Let's first find it on the plug in site. It was input step is that right. Yeah. Sophie I go and according to the list that we came up with. Yeah, okay. If you have any other questions. Yeah, it was just and also we wanted to notify him that and the changes that he tried to make the last time that was not reflecting. It was because it was because he was not referencing it's in that other file to remember. Yeah, I miss those things. Okay. Okay, great. I'm actually referring to the last meeting we had here you're trying to help to capture, capture should be in the input string plugin. And it wasn't showing so we're able to figure it out that first. Yes. Okay, so, so you were able to figure out that that's great. So you were able to decode how to where to put things tell me more about which we're able to where you were able to figure out. Okay, let me get the name of the plugin. Okay, so the name of the program is the input step. Okay, I will have to show that. Okay, I think we're going to go ahead. Okay, so would you like me to, would you like me to, to, to start a new job that uses the input step and maybe we can use that for some experiments. Yeah, we'll take an example. Okay, so let's create a pipeline that uses the input step. So hello world. Build it, confirm that it works, but you did configure. Okay, now we want to use pipeline syntax to do something with input. Wait for interactive input. Please provide your input. So here's the simple one right so please provide your input and we're going to do this. Save it and run it. So it started. And now it went red. And now we have to look to see what's going on why did it go red. And if we look at the console output we'll see it says please provide your input proceed or abort. Now if we want a prettier view of that we go to Blue Ocean, where it says, please provide your input and proceed or abort and there are other ways to look at this but this is, this is one alternative so when I press, press proceed. The job will run to completion. I did the same thing so pressing the, the run it again this rerun loop. What if I press abort. Now it said, Oh, I stopped the job, it did not complete. So now when we go back to Jenkins what we'll see is notice this icon says oh the job was aborted, whereas the first job was success or the job number two was successful. So the major purpose for this audience to get input from users. Correct. The input is, is a simple yes or no, shall I go forward or not. But but the goal of this thing really is to ask them for for things now. Now this allows us to do parameters. And then the parameters, the values are returned so we could in fact, ask for more things so let's let's try that. And again we're going to use the syntax editor to the syntax generator to help us. So input. And now we go to advanced. And just for okay, let's see, waiting for. Let's how about we ask a different what do you want. And we're going to give it a custom ID my custom ID. Okay button caption. Yes, I mean it will be the okay button. And now we're going to do add a parameter, we're going to add a Boolean parameter which is, we're going to make it very obviously named Boolean param. It will be true by default Boolean parameter true by default. So my defining I'm defining an input step with a different message what do you want using a custom ID, and the okay button will have a different text on it. Yes, I mean it will be on the button, and it should ask me for a value of Boolean param. So let's take that step and put it back into our sample job. And we can actually do multiple inputs so let's let's do this. Okay so this says I'm going to take it, maybe we'll comment out the first. So I'm going to take input from the user that asks them a question. Let's them to okay so input requested. There we go. So now it's put me into a screen asking me for for my input. I could do it here, or if I want I could look in let's see what blue ocean does with this. What blue ocean says is what do you want. And there's a Boolean parameter and if I uncheck it or check it and then yes I mean it is the button to say yes. Now if I run it again. I could, and I could leave the Boolean parameter check but if I click abort it will cancel the job. Okay. And the, the gap there I think is that, hey users may not understand the first pointer is, we always want to point them to pipeline syntax generator right it really is the best way to do this without without guessing what the syntax is just let the generator help you. But still it would be good if we had some words on the, on this on the pipeline documentation page that said something more than the very simple thing that you see here. Yes, that's actually what we intend to do. Great. Okay, so that means that we could give more information about the pipeline syntax generator and certain options that it could go with when they are. Okay. And Sophie, the next one, we have a few minutes. We can actually go through the list. Sorry. Yeah, I don't think so. Yeah. I'm going to share it today. So my, regarding what I was going to show you is actually the HTTP request plugin and the custom edge. We are trying to have help to it. And when we tried to the last time it wasn't showing so like, we were able to be going during the weekend awesome so I'd like to share that with you. Yes, please share. Are you willing to share your screen or, or do you want to just describe it that would be great. I would love to know how you how you discovered it. Okay, thank you. Well, remember we just actually added, we just only had an HTML page here, the custom editor, but we did not actually, we did not refer it in the Jellify. So we're supposed to come here and then add the the URL to the help. Oh, you're brilliant. Oh, thank you very much. Okay, so, so the thing was, this jelly file needed a change to refer to where the help, where the help is. Yes. But it's not so for all. There's some guidance as well to fair it, but for this particular case you have to. Thank you, that Sophia thank you very much I appreciate. I love it when I learned something new. Thank you, thank you. That's, that's a group. Truly, thank you very very much that's wonderful that you discovered that. And certainly, it's in the, it's in the documentation did you find it in the documentation for that or did you just you just looked at the source code and made a good guess and said oh this is obviously missing Mark didn't realize it. I went through documentation but I couldn't find it in, but I had to go through the source code. Yeah. Excellent. Sophia, thank you very very much. I have learned something. Thank you, thank you. Any other topics we should discuss today. Yes, so we actually like trying to work together. And for our lease we're able to discuss three plugins. And now the other one was supposed to be the load processor where it's supposed to have more documentation to the plugin page. And also the clean workspace plugin and basic step plugin and some other plugins but I don't know if we will discuss this today. I would, I would leave those I think you've already got more more in the input step than we have time to do so I think just input and HTTP requests those two if you make progress on those or, or the the one let's see the which one was an HTTP request that you just showed us how to do. Yes, it's a very quick. Yeah, so if, if you were to do those two that already is for me quite an accomplishment. Thank you. Thank you very much to both of you. I believe we are scheduled for another session later this week with our usual time are the two of you okay with that as an next session. Yes, won't care with that. And now I need to look to see when okay so we're scheduled for Thursday is Thursday okay. Yes. Great. All right. Thank you to both of you. Thanks very much. I'll get the recording posted of this. And if, if I've missed past ones hopefully within the next 24 hours. Okay, thank you very much. Okay, thanks to both of you talk to you Thursday. Yeah, thank you for nobody.