 Welcome, it's GitLab plug-in modernization. This is the 14th of July, 2023. Thanks for joining. All right, so Harsh, what topics do you want to be sure on the agenda? Yeah, so I listen to them. First of all, like I decided that I want to, like in the first milestone, second milestone full request, I want to add the test. I don't want to make a third milestone just for the test because like I'll be discussing the reasons now, but like that's what I want to do now because like, I don't want things to be undeliable. Like in the first milestone also, I don't want things to be untested and undeliable. So because I have some like a huge chunk of break up around one, two weeks because of my semester examination got over. So I have some holidays so I can work more. So it's good, like I can manage the tests also. Okay, all right. So your proposal then, just to be sure, your proposal is because I thought milestone one was already largely done and we could complete it by merging the change into that GSOC code base or into that GSOC branch. Is there any reason we shouldn't do that merge? For the test, like I was working on the test, I'll let you know more about it, but yeah, other than this, I don't think so there is some problem. It should be fine, actually. So we've got changes requested still open in, okay, changes requested from Basel still in the, in this branch, did you ignoring the test? So... Yeah. I've enabled the tests currently. Right, and no complaint about enabling the tests, but all right, so here's his comment that says two weeks ago, two weeks ago, hey, we got an angry Jenkins that indicates a bug, that I think should be resolved before we merge this into the, not the mainline, but into the GSOC 2023 project branch. That bug, I cast it using a general exception. I was just asking if I could use a better exception like processing exception or a second exception, but I would actually prefer a general exception mode than that because I cannot really specify a manual exception like processing exception and like the web implementation exceptions and all that, because it may happen that it goes out of them. So like I want to cover a general thing. That's what I did. Like I committed the changes and it's working fine after it. I don't see any angry Jenkins after that. Ah, okay, so I think what you just said is this then is resolved and all you have to do is make a comment here that says this is resolved. Yeah, like, yeah. Okay, good. I was just waiting for the best. Great, okay. So just to be sure, did I understand correctly? I think what you said is that you've made code changes since these comments were put in and those code changes have resolved this so you no longer show an angry Jenkins. Yeah, no angry Jenkins now. Okay, good. All right. Okay, so let me make a note there. So you had said, including tests in the milestone and no objection, and that's, I think you said that the tests are already enabled in the first pull requests in PR 1501. Okay, and they are passing. No, they are not passing. They are not passing. Okay, all right. So you're saying before merging PR 1501 want passing tests? Yeah, okay. Now for me, I thought, I liked, I thought Basel's approach was, hey, it's perfectly fine if we merged PR 1501 as it is and you did a new PR for the, to make the test pass. It doesn't have to be outside the milestone, but I'm fine with whichever. You feel like you have a preference, you would like to do them in that pull request? Yeah, I like, I have that preference because like in the milestone, say like what Basel wanted was to complete the first milestone and second milestone because like completing the first milestone create a base for the second milestone. That's what he wanted. And after that, I could like provide the code for the second milestone and then a milestone three with all the tests that are possible. But the problem is like it, it can make the code unreliable because if my base, like the first milestone is unreliable, it is not unit tested properly. Then it can create a mess. Like even if I did the interactive testing, I just want to make sure that it's working. Like it should not break or something because I am basing my milestone too over that. So and the other reason was I was already working on the milestone one test. The only problem that I was facing was during the connection that I was not able to pass the connection. I'll discuss more what the problem that I'm facing right now. If I am able to pass that, the whole test will be almost covered. There will not be much work to do. I'm still open to making a third milestone like for all those tests. If I'm not able to do it, but I am quite positive that I will be able to pull it off as well as the milestone to code that I'm writing. The code is also working quite well. Like it's not working interactively, but when I debugged it, it was working quite well. So I am also quite positive on that. So maybe I could just pull it off. If it does not work, then of course a milestone three will be fine for me. Okay, all right. So I don't object. Chris, I assume you're okay, Chris. If we extend milestone one, are you confident that you're going to be able to achieve milestone two before the end of the project with this? Yeah. Okay, good. The milestone two's only problem is the execute is not working, but I'll have to figure out why is it not working? After I figure out why it's not working, I don't think so, I'll face much issues with my... I'll show you, I'll debug it right now, just like what's happening. That's why you'll understand the code is not incorrect. I don't know. I didn't even touch the execute, but it's still not working. So I need to find out what happened. I just ran through some Jenkins code base and stapler request code base and it's quite huge. So it takes a bit of time to understand what the hell is actually happening. Okay. Okay, so I think you're saying that you'd like to make the test work on milestone one and then get merge the milestone one branch, PR 1501, then use that for the milestone two completion. Is that... Did I say that correctly, Harsh? Yeah. And meanwhile, the milestone two draft PR will be also be there just so that we could see that it's working perfectly. And after that, I'll combine them both and they'll almost get merged at the same time. Okay. Yeah, there's part of me worries about the danger of that, but your project, your choice, the parallel work is more difficult and I'm more likely to make mistakes when I do things in parallel, but getting the tests working is certainly a good goal. I thought Basel had a good idea of saying, hey, we don't care about tests in milestone one, but if you feel strongly, hey, you'd like the test working, let's do that. I like that. We know we can't merge to the master branch until tests are working, right? Absolutely. Yeah, but I'm open to change, of course. Like if I'm not able to get this, get that milestone one test working this week, then I'll go ahead with what Basel said. But I just want to take that extra pressure so that I could work a bit harder. I just like pressure. Okay, all right. If milestone tests, one tests are not working this week, then reconsider and may merge without requiring working tests. Is that a good way to say it? So merge to the GSOC branch. Good. Okay, that's great. Okay, so the next thing that I wanted to talk about was the 404 that was occurring before I made the changes like in the plugin. The 404 was like the mark tested how it was happening. It was happening in the abstract web of trigger handler. And I didn't do anything. It was there in the plugin prompt before. So we'll have to look into that matter also why it's happening. I didn't see any logical flaws, but I haven't really debugged it yet. So I'll debug it and find out why it's happening. That's okay. And I'm not worried about you investigating the 404. I was just curious or I was surprised, Mark was surprised that there was no visible, no visible harm to the user experience from that 404. Yeah, it will not sound. And that the 404 caused no, and even that, okay, no problem. It may just be a logging thing that it's logging more than it should. It should never have logged the 404. But then the other surprise was Mark was surprised that the. The connection timeout. Yeah, the connection timeout in new code caused no visible harm. Yeah, it will not, I know. So those two things, again, we don't have to address Mark's surprises. The crucial thing we need to address is, is it functioning correctly? Are we getting what we expect? Yeah, let me explain like insaturated curiosity. What's happening is it's trying to set the pending, like the build which it is getting, it is trying to set it to pending. But the problem is like, if it's not able to set the build to pending, it catches the exception in the GitLab API exception and says the build, like the, it was not able to set it to the pending mode. So it was not one, but what happened was, when I changed the code, it, GitLab 4j does not really get the 404 because it does not know about the Jenkins build right. So it gives me a circuit timeout exception, like it tried to change the commit status, but it was not able to change the commit status. That's why it gave me a socket timeout connection. It was not able to find the build, maybe. That's what 404 is like. So that's why it's happening. I will show you also in the code, but it will not harm the user experience at all. Even if it's not able to change it to pending state, it does not really matter because if the code is actually running perfectly, functionally, then it will automatically do it to success, skipping the pending thing. So yeah, that's why it's happening. Okay, so I skipped it, yeah. Well, so then that seems like that says you've already done enough investigation. You don't need to worry anymore about that, then. But yeah, I'll still take a look because I don't know why it's not setting it to pending. Like there must be some reason, right? Because why it's not getting set to pending? Why am I getting, are there any education where it actually is able to set it to pending or maybe I'm not testing it interactively properly? So yeah, I'll take a look on all those things on. Okay, all right. Again, for me, that is much lower value and lower priority than your work on the test, right? Your interest in the test feels like the most valuable thing. Yeah, these are the mitigations that I'll take a look at. After the milestone two gets complete because if the milestone two gets completed, the project is almost successful. Great, okay, good. Okay, so the next thing that I'll be like, yeah, what can I show is, what can I tell you is, I want to show you that the resolved method of the second milestone that I, like the draft here that I made is working. I'll show you the, I'll debug you that it's working perfectly. And also show you that the execute is not working. And I need to show you because like I need to find the problems why it's not working. The execution cycle is, the execution time was quite big of the debugging that I was doing. So like, I need to figure out why it's not working the stapler requests and all those security handling. It was a complete mess. Like, so I need to show you also that, like, can you debug it also? So, and I'm not sure I can debug it, but I'm happy to have you show it. So do you want me to stop sharing my screen and we'll have you share yours? Yeah, wait a minute. Like, it's going to be a long wait. Like, I'm going to show a lot of things. Okay. More like, I also, I also debug the tests of the milestone want to show you what's the problem that I'm facing regarding the, regarding testing the connection. So yeah, that's also one more debugging section. Okay. Also, like the integration tests that are there in the GitLab plugin currently uses Viarmock and Viarmock is not able to like the test automatically test the proxy, the proxy settings that we'll be doing. So what I want to also propose is that we start using the test containers instead of like the Viarmock and all that because using the test containers, we will be able to test the API, what's that called? The Docker image of the proxy client that we will be using to test the proxy services. We can create an instance of the container and then we can also create an instance of Jenkins container put in HTTP proxy and HTTPS proxy in that. And then we can maybe test it. I have not really tried it. I just, it's just a hypothesis. But yeah, that's one thing that I would like to propose. Like maybe it could work. It could be better. Okay. So this, when you're saying proposing to use test containers rather than the existing Viarmock based tests, that's those are the tests that it's been years since they last ran successfully. Is that correct? Yeah, they're Docker based. Okay. These are the Docker based tests that have not run successfully in many years. And again, for me, that's, I have no objections to that. But I think that's lower, less of a concern because we're doing interactive testing for now. And so I'm, and I assume when you talk about this, this is after milestone two as well. Yeah, like this is after milestone three also. Like when we will try to test the proxy, of course we'll be testing it interactively, but using test containers will make the, like the test switch better. So I'm just proposing it. I'm not telling you that I'll be doing it. Maybe if I get time, I'll do it. But I'm just proposing that this could be also a very good solution. I see. Okay. Thank you. Good. All right. So proxy testing, because proxy testing, we can do interactively and interactive testing is much faster to configure, to create and delete than creating the automation to do the same thing. So proxy testing, certainly we could do interactively. And if time allows, it would be great if you could do test containers, but it's certainly not required. Yeah, but like using the test containers also will make, it will ensure that we use the latest KitLab instance and all these things which are used in the test is the latest. So if any breaking changes happen, it will be able to identify it fast. So it's just better, but not the part of the project, I guess, because like it's just stretch code, right? Right. Okay. Good. Yeah. So I think that's all that I will be discussing today. Okay. So then I'm going to stop sharing and do you want to share your screen? Like wait a minute. I think in which order, in which order I should be showing you. Whatever order works for you. I'll take notes one way or the other of what you're doing. Like I'll first show you the, wait a minute. It's Vassal not here. He is not. Oh, that's bad. No worries. Okay. So first I'll show you the milestone two, then I'll show you the milestone one test cases, what problem I'm having. And yeah, I should be fine. Okay. So milestone two, milestone one, test cases. Great. All right. So let's, let's go with that. Chris, are you ready? Yep. Okay. Okay. Let me get my screen set up so I can see your screen and still take my notes. You're not able to see my screen. I can see your screen just fine now. Okay. No. No. Okay. Okay. You see this four of all that, that, that's been that I'm having my life right now. Let's see. Yeah. So I'm using the, like the latest development version from my draft PR that I made. Okay. This is the second milestone. That's, that's your, that, which is, which are you going to see? So like, okay. Here you see two methods resolve and execute, execute is the results of my problem. Resolve is working perfectly. Like no problems at all. Let me show you the resolve is working perfectly. So let's go to the results and see it works. It resolves the project. It checks in the Jenkins that the project is available or not. Like Jenkins project, not the GitLab project. They are different. Author named it the same slide was confused a bit, but yeah, they are different. Okay. So whoops pause pause for just a minute. We just asked Jenkins. Given a project name that was passed in from. No, no, the project name is not passed in from GitLab. It's somehow. Okay, help me on this. That's what's provided by GitLab project name. Is that provided also in the webhook? Or is that something that's known to Jenkins? They are GitLab projects. And Jenkins project both Jenkins project is an item like a freestyle project Jenkins project is an item. GitLab project is about the like push even that I'm making it's part of a project and the project is part of a group. So it's like divisions that are made in GitLab. So they are quite like similar in naming that the author did when he wrote the plugin, but they are different. So take care of that. Before you continue execution, could you take us one level up in the stack to get dynamic? Line 46. It's in the bottom left-hand corner of your debugger window. There is a. If you just click that row, I think it will take us. Okay, so this is saying. Get dynamic takes as a project name as an argument. Okay, so it's not extracting it from the stapler request. It's somehow called with that project name. Which means it is. It is called by Jenkins code. And this must be then so project name in this case must be. The. Text after the word slash project in the URL. Is that how get dynamic? What's the value of project name at this point in your call? Is it something? Yeah, this project name that you're saying it goes to resolve project today and resolve project is all about Jenkins project. So it's not the GitLab project. The GitLab project that we are getting is in the stapler request and the paper in the stapler request, the request that we are getting from the web hook. It contains the project that is related to the GitLab. This project name is from Jenkins. It is I'm getting it from Jenkins code extension. Yeah, so it's not that it's as you make like it's a freestyle project like it should be named kind of freestyle. It is a freestyle object. It's the name of the freestyle object that we are trying to do something about. Right. But so, so this however was provided. The, the, the, the call to get dynamic happened because you invoked a web hook on GitLab. Right. You invoke the GitLab web hook. GitLab's web hook made an HTTB request to Jenkins. Jenkins received the request and their quest URL was. HTTP colon slash slash my Jenkins colon 8080 slash project slash. And then this name of the project is in that URL right and somehow get dynamic. Was called with project name as that value. So, so if, if we look at the value of, oh, yes, here it is. GitLab dash sample dash job in your debugger. And that is the name of a Jenkins project, but it was provided by the GitLab web hook inside the URL. No, no, no, no, no, no, no. So, so what's happening is once we get the web hook Jenkins core knows that the web hook is for this, this project like my web hook is for the GitLab sample project that, that is the freestyle, that's a freestyle job or the freestyle project. So what it is trying to, it is trying to connect both of them. You understand what I'm trying to say? Like it's trying to connect the GitLab project and the Jenkins project. And because both of them are project you are getting confused. They're different. Okay. So, so could you go back to the GitLab page? I'd like to see the definition so the GitLab, the, the GitLab web page where you invoke the web hook. Show me the web hook's definition. So the, in that, what is the URL used by that web hook? No, the one, the one that you invoked. So you, in order to call get dynamic here, you invoked a web hook on Git, GitLab, didn't you? Yeah, yeah. Can you show me the, the URL that was used in that web hook as defined on GitLab? Where is my, I remember the URL kind of, but the, I just, you should, when I debug it more, you should be able to see the URL. Okay. That's fine. Let's, let's continue then. No problem. So we can go back to where you were back to the top of the stack resolve line 48. We don't need to do any further on that. On this. Okay. So project is not null. And the project name is. Get lab sample job. Yeah. Okay. And rest of path parts. Okay. The project is. The project is a freestyle project and the project name is a sample job. Got it. Got it. Okay. We'll see it. It's your shot. So yeah, it does. So now it's going to work through. So what's it, it's doing. It's just a reject thing. Okay. All right. It was there previously also it won't affect much. I didn't really change much. Most engineers were in the resolve action. So what's happening here is I did a bit of changes here because I needed the project and the request. Why I needed them because I abstracted away the. Detailing of listening. Like what I did was when I was in. Talking about the. Plan of the milestone who I said I will be. Having the good lab hook resolver inside the action resolver itself. But I just abstracted it away. Just to make things a bit more simpler. So what, what this thing is doing it. It is setting up the project and the request that it is getting from the Jenkins code. Get dynamic method and it is sending it to the good lab hook resolver. I'll show you what the good lab hook resolver does in a minute. But. Yeah, it does that. It gets the method. Now. I we don't need to really need to check if the method is post or not because if it is post, it will be checked already by this thing. Okay. It will be checked by this thing. We only need to check if it's a get method or not. So. It's not a good method. Of course. Now it goes to the web manager. Now we'll have to check if it's a web hook or a system hook. So. What I did was. I assume it was it is both because it we are receiving a post request. We don't know if it's a web hook or a system hook. So we'll have to test whether if it's both, which one it is actually. So currently it's a web hook, but I'll also explain what happens if it's a system hook. So. Let's first assume it's a system hook. So if it's a system hook, then the web hook, all these things in the web hook, it just runs. But the problem is when it starts to handle the request, it fails because it fails. It gets to the GitLab API exception itself. And it says the book was not supported for the project. Then it will try to implement the system hook and then it will pass. And as it will pass, it will go forward. Fine. Okay. So because because it is the web hook thing. So let me do it. But yeah. Whenever. Like. In the example of system hook. As, as it progresses, it will return the new faction. Like no faction is like no, no, no operations, like no action which will be taking place. So it will not go there. This, this is the place where it does not post request or get a request or get a request or get a request or get a request or get a request or get a request or get a request or both system hook manager and the web hook manager were not able to get the thing working, which means there is something blunders like from GitLab or they're not from us. So that's when this, this thing will take into action. It will also return the new faction, but it will say unsupported. So yeah. Currently it's the web hook. So it receives the web hook. Of course. You are here. It handles the request and let me show you how it is handling the request. So it goes here and now I am in the GitLab or some debugging inside the library. Okay. So it gets, yeah, I get, it gets the event as it is a push even right there. It sets the URL and then it tries to fire the event which I set by overriding in the GitLab hook resolver. So like what it will try to do is it will get, because it's a push event, it will try to fire the push event. Oh, I think I just missed it. Oh, no one. Yeah. So it will, this will be called right here because because it will try to fire the push. I just missed it. Like I just extract it by cursor. Otherwise it would have been here, but yeah, it will override the on push event that is here and it will try to run the fire web, fire web hook build action. There are two build actions. Either it's a fire web hook build action or fire system hook build action, depending upon whether we are getting the web hook or the system hook, and then it will be called and on the fire web hook build action, push build action will be called, which will contain all those things which are required and on get on getting the push build action push build action, but does not have the distinction between the web hook and the system hook. It receives both of them and then it does what what is what it used to do in the older plugin. After that, there is no code change. I just added them. So did you understand how it was flowing? I think I've seen how it's flowing. Okay, continue. Yeah, so that's that's where the things and like that's what that's where my changes and after this, it is the same that was going to happen previously in the plugin and it should be working exactly the same day. And yet it's not working the same or. What are you seeing then. Yeah, the execute is not open. Okay, so this execute like once we resolve the project name and the request, it needs to execute the response, which is which which I'm getting error like 404 and 500 and all those things. Here is the problem. Like I'll show you again. Once I do a push event again. Yeah, so here it is. Should I show you the resolve again that it is overriding the fire event or it's no need. I think I think you've shown it. Yeah, so let's go here. Let's go to the execute that here is the problem. After execution is done. Yeah, it directly goes to this like there is no step in between it directly goes to the error that I am having some problem in handling the argument, which I don't know which argument is this thing talking about like I am assuming the what what's that called. Yeah, could you expand the arguments array and your debugger so we can look at it so down below in the I see arguments at the very bottom of your screen as a four element. Oh, okay. There we go. All right. So it's got the web. The web hook. The project name. And then a request and a response. And if you expand the request, I assume that the request data would tell us something about it's fine. Like I don't think that there is any problem in the request data. Okay. And could you expand contract that collect. Oh, go ahead. Chris. Yeah. Oh, but can you expand a request or can check to see where it's the. Is there a problem like. Yeah, I see some novice. I'm not sure is that problem. I don't know. I'm sure no concrete problems. That's like past form data is now past from data form. Like what I can, what I can say, like the problem is right. I wanted to check it using the like the previous older version of the GitLab plugin to whether it's working or not. But I cannot really reach this thing like functions.java and exactly this argument. So I don't know how to get this argument in the older versions so that, so that I could cross check whether the things are same or not. But yeah, it can be a issue, but I am not sure like. I'm not sure about no fear. It's like they might be problematic because like it's a request so you don't want, you may not want to like know from data. Yeah, but the problem is I cannot really check it like if it should be null or not. I don't have any way to check it. So that's where the difficulty in this thing comes in. Like I was anticipating all this because like changing the webhook implementation from that old to that new can create some problems. So yeah, this, this is a, this is a issue that I'm not able to resolve from. I tried resolving it during my examinations as well, but I was not able to get it working. But like I did, I was able to get it working a bit like previously. I was getting an issue with Jenkins core itself, but I managed some null pointer exceptions and all those things like I did some tricks here and there and I was able to get the plugin working. But even after that, I'm getting this 404. So I'll have to look a bit more into this. It, but like I think I've put in much effort. I'm not able to still not able to get where the problem is because I'll show you the execution more. It's, it's very big. Like I'll have to run through it fast. Otherwise it will take five, six minutes or something just to take, take it to the end of 404. So yeah, it, it tries to invoke things. I'm just showing it to you because maybe you guys can help because I'm not able to find anything like it just goes to 404 very quickly. And the methods that it is using, I am getting into security and stapler and all, which I don't really know much about. And I'll have to find where to read about them and all. It's an internal problem. So the, the 404 that it's returning is 404 for a specific page being requested or a specific URL being requested from get lab to Jenkins. We can see it's like this. It's one of the response for four. Yeah. Chris was saying something. Yeah. It's like, it's the response we're turning, but so we don't know where it's from. Yeah, actually. Like Mark, Mark asked a really good question, but to even figure it out, you need to understand what's happening in this code. Right. Like just, just look into this. I need to understand what's happening. And then I can like for sure, then I can, then I will be able to say that, yeah, for this is the reason why it's happening. I'm just currently showing you what, what, what troubles I have. Because like, I've like a lot of time has been wasted in me trying to figure out which things are where and which things are there. I just wanted to confront things a bit more faster so that I could take the project a bit faster because I'm quite like behind what I wanted to be. So yeah, the target is. No, some reason. It is. Okay. Do you, do you still have that, like, that thing is where you haven't. So it's gone actually. So the question that we need to answer that we need to help with then is you're trying to understand. Right. Back. And the target was also not. I don't know why it is not, but I don't think so. It's problematic because there is an L implemented. So maybe something. So the, the call, the location that's being called this get dynamic was there before. Right. It was there previously and the previous location for it had, did it have the same behavior or were you're not sure if it had this same behavior. So. Yeah, good. Did, did the, did get dynamic exist previously? I think that's not something you've added, right? It was there before. Yeah. And I don't, I would have to investigate myself to see what was the behavior previously with get dynamic and how has it changed in this new code. Actually, like I did myself up first. I did it. I was trying to get into the same zone. Like I was trying to get into the stapler requests and all, but I cannot really get it because as the get lab, as the get dynamic method finishes, it just gets out of the method and everything executes properly in the older plugin. If you're not getting the, like the error that I'm facing right now, you'll not be able to get into the functions or Java class, which is having that error. So yeah, it is quite difficult to trace trace it down in the normal plugin, like the actual plugin that is release and it's working. It is only available in the development version and that's all right. I don't have a comparison point here. Okay. So that, that I think you just said the important thing is you, there isn't, you don't have a comparison point to see how the old code was behaving because as far as you could see from the debugger, it was, it was getting through that without you being able to, to break point on it. Yeah. And I also did one thing that I enabled the stapler request, stapler dispatcher login. So logging so that I could test if, if it, if it gave me any information, but it's not giving me any much, much useful information about it. So yeah, like I tested everything or if I'm asking for help, I've tested every possible thing. Like not something out of the blue, but yeah, I think I put in the quite a good amount of effort in finding out why this is happening, but I was still not able to get it. So yeah, it's going to be quite of a difficult task to find out what's wrong here. But let me show you more like what's happening here. Just so that you could refer it back to see the debugging process. If any one of you, even if Basil tried to debug it around. Oh, can you show me the request here? Yeah. No form fields. It will remain the same because like it's a request right? Yeah, she was saying, yeah, just one check. And now the target is not now. So that's what I was talking about. It's not for some time, but like I think it was getting the target in the process. So it's not now. Okay. It loops around in the stapler request and the security loops around again and again. So it's a long process like it's a long debugging process that like if Chris are willing to do it, it is quite a big thing to do. Like it is long and you'll have to read a lot of code. Yeah. So it shows you that it's getting the getting it from, from the get, get dynamic method of the thing. Yeah, fine. I just want to know where the issue is like, why am I getting a four or four? The reason is the problem. Okay. So the four or four that you're getting. What's the full URL of the four of the, of the four or four that's being reported. Okay. So it's returning four or four on a post to slash project slash get lab dash sample dash job, which is certainly was is working in the release plugin because that's the one that we have to provide. And so. Yeah. Okay. All right. So then however, that four or four. That's yeah. Okay. That four or four is just nonsense in the sense that. That URL is certainly there because it was answering before. So there's something inside the, the request routing request that is causing it to say four or four not found at some point. Whereas it doesn't say that with the current come. Okay. With the release able to get the URL that that's for sure. Like it's not like it's not able to get the URL. Maybe it's not able to process the URL. And like the processing part is a huge part. So we'll have to find out exactly where it's not able to process the URL. And we'll have to fix it. Yeah. It is. Yeah, I think, I think that's what, what the four or four that's being reported is, is four or four is typically a page not found error. Right. I mean, that's, that's the definition of an HTTP four or four. Or it could be because like authentication issues. Cause like you can access to like not. But like, I have a doubt about it because I didn't really change anything related to the execute. So I don't think so. I messed up with the authentication at all. Like nothing related to that sort of it. When I was writing the code. So I'm not sure about it. It may happen that I did something messy. But. Maybe not because of you. It could be because the version change. Okay. Then that would be out of my control. Like it actually would be then more difficult to find it out if it happened due to a version change suddenly. That's dangerous. Yeah. But, but okay. So, so what we've got is we've got a. A request coming from Git lab to slash project slash. Git lab dash sample dash job. And Jenkins eventually returns. 404 as its response code. Yeah. And that's able to get the request and it's not able to process it properly. Right. And so that's the problem. Now the thing that you've not been able to deduce is. Why did the old code not return a 404 and the new code does. Yeah, exactly. Okay. So I'm not able to draw a conclusion. Right. So I think that at least gives us some place that. I may be able to help. I've got a, got to help a, I've got a family project this weekend that's going to take many hours, but I may be able to help by spending some time staring at this. Trying to see if I can duplicate. The 404 with the new code. I think that's a lot of work that you're seeing. Trying to help. I will, I won't be available after Monday of next week, because I'm taking four days off to go play with my grandchildren. So, so there's a danger that. We won't have much help for it. Before your schedule to meet with Chris and others next week. I apologize for that, but I'm not going to cancel my vacation to help. I think Chris would be much better of an help because he already has all these things set up and he's more, he's a maintainer, right? So he's technically more sound to all these things. And other than this. Actually, if you try to read through all this food, like it, it sounds easy, but it's, but it's actually not, there is not much stapler request documentation available in the Jenkins GitHub. So yeah, there's not much documentation. And I also asked in the, I think in some, in some of the other channels about whether I could get some help on it or not. And they, and the kind people actually helped me and they said to read the court. And that's what I was doing, but the code base was so huge. It took a lot of time to read. So I don't really recommend you do this because like, it's difficult. Like it's not easy. But, but again, somebody's somebody's got to do it. And, and so. Yeah. I mean, the puzzle reminds me regularly that it's not like we can rely on somebody else to read the code. We have to read the code and figure out what's going on. So no shame in that it just, it takes time and energy. So. Yeah. There's a danger. I won't be able to help with it. This week we may end up delaying. Is this going to. Is there any way is this, I assume blocks you from other things. Are there other things you can do. Like working on tests, for instance, or others while, while, while we're looking for more help for you. Like why I was not able to push things more fast because I was getting blocked by the tests and the milestone to this error and the test error that I'll be showing you after this. I am blocked by these two from at least two weeks and I was trying to find my way out of them. But like, I was busy with my examinations. I was still trying to squeeze out some time to just for the project and I was trying to find things out, but I was not able to get it. So, like, yeah. Okay, so, so. Given that you were during examination period, you wouldn't, you certainly couldn't have invested the same amount of time. Are there things you can continue doing or have, is this blocking you completely harsh? I mean, my worry is, has all progress stopped because this, this problem? Yeah, like the two problems that I'm facing. I will try to make the test work more like I'll make it my first priority that I make the milestone one test work, but milestone two is blocked due to this because I'm not able to do the interactive testing and until and unless I'm, I am able to do the interactive testing, I won't be able to do the unit testing as well. So it blocks the milestone two. I can work on the milestone one for the, for meanwhile, but yeah, I think like we should be worried about it. Like, okay, good. So this, this will block this is blocking milestone two, but you've got work that you can do on milestone one while, while, okay, that's good. So that means you're not, you're not stopped from all progress while, while waiting for others on this or for waiting for help. Let's have you continue on milestone one and we'll see what we can do to find a way to help further with, with this problem. You spend more time on this too. You need to spend a lot of time. A lot of time. But yeah. But I also did some changes like what's that called test changes in the milestone two unit test. I did, I did some things because I was not able to get this thing working. I was quite depressed. And then I did some more changes like I also added some documentation changes that I'll be making after the project gets over. And I also did some unit test unit test adaptation for milestone two also. But yeah, I think this is a quite a big blocker and I, and I need to solve it quite fast. I'll also be doing it like, but I don't have any clear idea how to solve it right now. So that's, that's more of a problem. If I have the idea, how can I solve it? I will find some way out. But if I don't have the clear cut idea of why it is happening, then it's a huge problem. Then I cannot really propose a solution to it. Okay. I think we need to work towards like something tangible together over the next few weeks. Yeah, like I'll not try to extend it for next two weeks, like a week should be fine to find out what's actually happening. It cannot be really that bad because if it's that bad, I'll try implementing the milestone two again. It will take me hardly a day to reimplement it. And maybe it will be gone, but I just want to know what's happening inside and like debugging the stapler requests and the security and everything that is related to the engine score is a tedious task to say the least. So yeah, hard working week, but I have some holidays, right? So I can work hard. No problems at all. Okay. Or maybe I can help too. Yeah. Okay, so this was the first problem you wanted to show us. Do you want to switch and show us the second? Like, let me just go past me, past towards the photo board that we'll be having just so that we could have the recording for the debugging that I did. So any would like if Basil, Basil wanted to see if what's what's going wrong or what's going right then he could see it and maybe he figured something out. He has some experience with the stapler requests and all. So yeah. Okay. It's quite a long debugging process. I have to make it a bit fast. I think it will take five, five minutes. Okay, because I have a hard stop in nine that I have to go to another meeting. Oh, dad. So I could, I could certainly pass the control of, or actually it doesn't matter because Chris is already the, the host. And so if you need to continue without me, you can continue and I could watch the recording later. Okay. We can try to continue like afterwards. After this meeting is over. We can set up a seven on meeting. Let's go over this debugging issue. Yeah, like I'll show you the another debugging issue also like about the testing that what's causing the test to block in the first one. Okay. Did I like the. Yeah, maybe we could stop sharing it will. I, it's already 1022 years. It has already passed the time that I should be having. I said it was, it was going to be a long waiting. So yeah, sorry, sorry about that. No problem. A long meeting if the meeting helps, that's great. That is not a problem. So like anything else. Okay, the test containers thing I said you right. So yeah, yeah, you can leave. I can, I can discuss more technical things with Chris. I can get some help. But yeah, that's, that's where the project is right now that, that you should be knowing that I am kind of blocked here. I need to, if I get out of this blocker, the road ahead is quite simple. Like it just testing and all. This is the main blocker of the process like the main meet. Okay. All right, so finding a way to duplicate the 404 that you're seeing, and then finds understanding. That's the biggest problem for you. Yeah. Okay. So I'll have to see what I can squeeze in in terms of weekend debugging. I've, I've got these other things that. That need my time, but let me see what I can do. Okay. So harsh. Did you want to show us? We've, we've got up to seven more minutes. Before I have to drop off. Are there other things you would like to show us at this point, or this is, are we at the point where we should stop for now and, and consider meeting again another time. Yeah, you can meet me another time like in the next week's project because I'll be showing a lot of debugging after this also to Chris. So yeah. Like, it's just technical debugging, nothing more. Yeah, maybe we should have a time tomorrow to go over the debugging part. Yeah, like today also I slept around five hours. I need to sleep also. But yeah. Okay. So nothing. So, so you're okay then if I disconnect at this point. Yeah. Yeah. Okay. All right. So Chris, I'll let you continue and then I'm happy to upload the recording afterwards. We can, we can, we can, we can, and the meeting. Yeah, we can end the meeting. And like, we can have the meeting tomorrow. I can have a meeting tomorrow. Regarding the debugging thing that I'm facing right now. Yeah, we can do tomorrow. Because I need some time to like go over what's when. Yeah. Yeah. Okay. So we can actually end the meeting. Yeah. Okay. Then let's call it an end for today. And I'll, I'll try to do some debugging later today, my time. And then the two of you will attempt to meet tomorrow. If you, if you copy me on it, if I'm available at the time you choose to meet, I'll join. I, it will depend on when you choose to meet as to whether or not I'm available. Yeah, sure. Yeah. All right. Thank you. Then I'm going to draw. Yeah. Yeah. Okay. Okay. Yeah. All right. Thank you. Then I'm going to drop off. Thanks very much. Thank you, everyone. Thank you. Bye.