 Welcome, everyone. This is Doc's Office Hours. It's the 5th of April, 2024, and we're doing our Office Hours Asia. Thanks, Chris, for joining us as well. That's great. Oh, got it. All right. Topics for, let's just start into the agenda if that's okay. So LTS 2.440.3 will be released on April 17. Yeah, that's right. About two weeks from now. The release candidate build is available for testing. There were a few bumps and bruises. Chris, anything you want to report on that one? Not really, except for like, there was some screw up for an announcement. Yeah. The announcement had some surprises right where it, it wasn't that it published earlier than you expected or because I look at the tag and the tag is placed correctly as far as I can tell. The content was not right. Oh, okay. Interesting. But the tag was placed correctly, but the linked build is incorrect, but we'll update that when a new build is available. No, no, it's the boost correct, except an announcement content is not correct. Oh, well, here, let me show you the one that, so I think- It was incorrect. Well, so, and I don't think that, so the announcement email, yes, let's look at one other. So I'll show you this one. So maybe there's one more thing to correct. So if we look at Jenkins on GitHub, there is a release record that is created here. Yep. And this one, the hyperlink here is outdated. You sure? Yeah. If you look at this, if we, here, I'll just copy this. Let's look at it together because if we look at this, open it like this, what you see is, okay, remember three, four, five, six, seven. What a great number, by the way. Three, four, five, six, seven. It will be many years before we get that sequence number again. So three, four, five, six, seven. And this is a subset of the Shaw-Wan of the build. But now if we go back here, all right, and if we look for everything, 2.440.3, we see there's a three, six. Here, let's make this big enough to read. I was wondering if it wasn't there when I was trying to find you. Right, well, and that's the challenge of incremental builds, right? Is we have to wait for them to finish. So there's three, four, six, eight. Oh, and now there are, right. Okay, the complication here is here's a three, four, six, eight with this three, eight, seven. And then here's a three, four, five, six, eight. But it's from two days ago. So this one is to be ignored. But this one, and there will actually be one more that comes out of it because it's currently building a three, four, five, six, nine. Okay. So now I did, and Chris, while you're here, I did adjust the bomb pull request that's done and I've restarted its build. So you'll see here, what I did, is this it? Maybe this isn't it. No, that's not it. Let's look at, it was this one. I took the liberty of making a change. Oops, I should have done that. This will restart the build. Good, that's nice. So what I did was I changed this to a three, four, five, six, eight instead of the three, four, five, six, seven. So, and I also added the label full test, which means it will run all 650 or 700 combinations of tests to tell us this is in good condition. So thanks for submitting it. This is exactly the right thing to submit. I see, okay. Great, all right. So, but we will update with a more recent link in the release record, get hub release record, release note, when available. And we're still trying to build it. I've, we've had some unexpected difficulties with ci.jenkins.io in the last 24 hours or so, where it's having difficulty getting the jobs to run all the way through. So if I look at this one, ci on core, and we look at pull requests, oh no, not pull requests, we look at stable 242,440, we'll see that there've been several failures and then 123 where this one had a timeout in it that didn't recover and so it's running again and it's now been running for two hours or so. And we're, we've completed the one that's been most typically problematic, Java 11 or Java 21, the others are in progress. And when this finishes, we'll get a new, a new number and it will be a, what will it be? It'll be a three, four, five, six, nine because this one includes the merge commit. Okay, cool. And I didn't include a link to the release note. Let's put it there. All right. Anything else on the upcoming LTS? No. Okay, so next is weekly 2.452 and this one's important because it's proposed as the next LTS baseline. So we're in choosing season right now and the proposal went out on the developer mailing list. We've got several plus one votes for that. And so I think we can be confident that this will be chosen. The feedback on it has been very, has not been negative at all. We've not seen anything that says, ooh, there's a serious issue. So if we look at the ratings on the changelog page, hopefully it'll still be good. Yeah, so it's had 15 positive ratings. No, no, I had a problem and no, I had to roll back and we've helped that pattern for 10 or more weeks where this bug for instance was a plugin bug not related to Jenkins Core. And this is spam and this is spam and this is not related to Jenkins Core. So good story for our recent weeklies. I've been checking those carefully. All right, and there's a new blog post from Chris. Chris, you ought to tell us about this blog post. It's just like after some discussion with Jean-Marc, I guess, just to me, come up with a blog post to conclude the GSOC application period for 2004. That's why we did it. Good, all right. And here we can even look at it. We can view it in the deployment and see how it looks here. So, blog from Chris and thanks very much. I was actually kind of embarrassed looking at this. We had no blog post in March. So thanks, Chris, for being our first author in April. You're welcome. And this will post, I think, today, European time. So about 12 hours from now. Well, I think I saw a typo on the effects in the year. Jean-Marc's like, oh, I forgot. It's 22024, it should be 2024. Oh, right, yes. Yep, there's a good one. You still got time to fix it. It hasn't been merged, so. I think it has been merged. Oh, has it? Oh, wait a sec. Oh, I'll fix it. Oh, it has, yeah, by all means. That's a good one to fix because we are not in the year 2222 or 22024. Okay. All right, merged. Merged needs a change of title. Great. So, Chris, if you do that, if you want to even do that during the meeting, Meg or I can approve it and get it merged. Okay. Next topic was contributor spotlight. So, is the current contributor on the spotlight? So, oh, this is just a link to the poll. Request, not to the contributor site. Let's look at the contributor site. So, on the contributor spotlight. Our most recent was Bruno. And before that, we've had a bunch. This is this is turning into a really, really very nice page. Chris, you've done a brilliant job of the layout of this page. Thanks very much for it. Really, it's nice. Yeah. And of in and I'll be the next one up apparently after air. So, four weeks from now or so, you'll see me there. Google summer of code. So, the blog post is out. For the closing of applications, right. And now it's, we're now in the grading period. Preparing our submission to. Our submission to Google, right. So now, and if I remember correctly, while, while Alyssa's out, Alyssa Tong is taking some much deserved vacation, but she'll be back in time to help with that submission. Great. All right. The version docs project. So this is one where we had had really great progress from Vandit Singh and from Chris. On how the version docs project is proceeding. Chris, is there anything that you wanted to highlight there? We're still working on the Gatsby site, but I think we are also waiting for news about the version docs site. Okay. And that's meaning waiting for news from the infrastructure team. Yep. Okay. Good. Yeah. And they've, they've on the final site, they've been so busy with info team is still heavily loaded with keeping the. With keeping costs under control. We've had a $60,000. Donation from, from AWS. But now we need to need to change our infrared to use it. And, and, oh, on that same theme. Mark needs to submit. The donation application. For next year for the 2025 AWS donation. They're doing, they're taking the donation applications early this year. Donations will be decided. In donation recipients. Will be decided in June. Of 2024. Any questions on version docs. Okay. Next topic. And this one, make this one's a cool one in terms of comprehension. I'm really quite pleased with it, but it's had it's had some surprises hiding in it. In two weeks, there's been a lot of啦 Rahston as part of Google summer code. Of code 2023 with. Ashutosh, Saxena created. A better way of doing Docker. Based work in Jenkins, a much better way. Thanks to. Damien DuPortle for his guidance on it. If we look at the documentation in the tutorials, we can see. it's brilliant. So, so one of the, this, this is the magic, right, inserting Docker compose made the whole process just as simple as can be with this command right here. Where is it right here? Docker compose up, but, and this is when you use cutting edge technology, sometimes you get cut. In this case, Docker changed something in the most recent release of Docker compose that breaks this in the way we've defined it. Oh no. That's okay, because Bruno with help from Damian was able to find a solution that's actually a quite elegant solution. So what he's, what he's got is instead of, instead of Docker compose up minus D Maven for the Maven tutorial, it will be Docker compose minus minus profile Maven up. Oh no, let's see, maybe it's like this made up like that. So you add this word profile to an argument and it then does the magic for you and satisfies Docker's requirements for certain certain things not being duplicated. So, so now Bruno shared in Docs Office Hours Europe that he discussed it with Damian and Damian said, yeah, this is the right solution. This is the right pattern, but you've made it overly complicated in this area. You need to take that part out. And so he's simplifying it even further. It'll still use this technique and ready to go. Right. So we hope and and what that means the real the real benefit for me that I like having the tutorials reworked, but the really beneficial one is this no more of this horrible awful terrible set of minute Docker instructions and thankfully no more Docker and Docker. Ah, oh good. And so we've removed this, what is fundamentally a security risk from from the Jenkins default instructions. That's wonderful. It is really, really pleased with the work there. And thanks, Chris, for your help with the the Google Summer of Code 2023 work that made that all possible. One question is Daesh profile supported on older versions of Docker? It is as far as I understand it now. Somebody's not running the most current Docker. This will still work. It's a good question. As far as I know, it's a, well, let's check it and see Docker profiles, Docker compose profile. Let's see if they in their documentation tell us when they using profiles with compose. And this is no, it doesn't tell us when they introduced it. So I don't see service profiles. Yeah. Unfortunately, I don't see an indication of what version of compose they added it to. They don't seem to have a version of documentation. Yeah. Or it could mean they were careless or it could mean that it's just been there for forever. So it doesn't matter. Right. I don't, and I don't know which of those it's, I don't see any hints in their documentation that they're versioned other than this, yeah, migration guide. So I don't have an answer. It's a good question though. Easily though, somebody's got an old version of Docker running could just try to run it. Right. Well, and I don't know how old the version of Docker we actually care about because Docker for me is one of those things that we keep using the current version and when Docker releases a new version, we switch to it. The Jenkins infra team is very consistent about keeping Docker updated. But you know, there are people out there who do not. I do know that, but I'm less worried about them than you might think. Okay. Well, my, aren't you a hard? I know. I know it's hard to imagine that this is the same person who worked very hard to kill Red Hat Enterprise Linux 7 support in Jenkins. So yes, you're right. There are things that are not my friends and sometimes old versions of software are not on my friendly list. All right. Anything else on Docker compose? Okay. Next was technical review and validation for pull requests. So what heaven is finding is that he's had some pull requests arrive recently where he really needed someone with deep deeper developer experience than he has to act as a reviewer. And so he's considering looking for volunteers to help with technical validation of pull requests. Now, my initial suggestion was let's just, let's add those people to the copy editors group. Oh, I see why. Okay. Right. So that they can, so they can review and he can send the messages, et cetera. And he can at mention them. Yeah. He's agreed that he's, he's not looking for them to review every change. He'll do the vast majority of the work, but he would like, for instance, we had a pull request that just came in not long ago from a new contributor, trying to document the how to use the Linux IP tables command as a reverse proxy with Unix domain sockets. We document how to use it as a reverse proxy, but Unix domain sockets is a new thing for Jenkins. And so the person wrote this document that describes how to do it. And Kevin, of course, has never done anything with Unix domain sockets and works on a Macintosh, not on a Linux machine and doesn't know the IP tables command from a hole in the ground, right? It's IP tables is completely, completely unfamiliar to him. And this thing assumes quite a lot of IP IP tables knowledge. So, so he said, Hey, can somebody else help in this case? I helped out. I tried to run it and I couldn't make it work at all. And the more I read on online, the more I saw IP tables is not designed to work with Unix domain sockets, it works with ports. Oh, and so the author of the pull request has said, Hey, give me, give me at least three or four days to see if I can find a solution. And I like that. That's good. Because if there is a solution, we want it. I just don't know how to make IP tables talk to Unix domain sockets. I don't think it's supposed to be done this way. Say that again, Chris. I don't think it's supposed to be done this way. So there might not be a solution with IP tables. Yeah, that's my thinking is, is I don't think IP IP tables is really about routing network traffic, right? And Unix domain sockets are actually not network traffic. They are file system based namespace, not network namespace. Yeah. And so I was, but now I believe what this same author has done is submitted for some of the other, the other reverse proxies like Apache, where we not only have documentation on the reverse proxy, Darren Pope has even done a video describing how to do reverse proxy with Apache and Unix domain sockets. So now I want, now that we're talking about it, I want to double check just to see if, if here we go reverse, if, if Darren's video has been embedded in the Apache page yet. There it is. Yes. Okay. So it has been embedded. Oh, no, no, no. This is the, this is the original. This is Darren showing the original, but there's nothing here about, let's see if there is Unix domain sockets. There is not. Okay. So this page still needs to get a copy of Darren's new video that talks about how to do Apache HTTP server as a reverse proxy for Jenkins using a Unix domain socket instead of using a network board. Okay. And we've, I think we've got a, an issue on Jenkins.io that proposes to add those. Let's see if I can find, yes, here it is. Update the IP tables. There's the one right here, this one. And here we should be putting in, should include, should embed the video from Darren Pope that shows how to do this. He uses with, I think he uses Almo Linux to do it, Almo Linux 8 and Apache 2.4.x something. Good. All right. Excuse my blathering on. That's, that's a, that's a good reason for us to have this copy editor's team. And as of right now, Chris Stern, Mark Waite, Meg McRoberts, Bruno Lerachden, and Kevin Martins are all members. So thank you to the two of you. And you may get pinged by at mention on occasion asking, hey, could you help me review something? Okay. Any other questions on technical validation? No, good, interesting issue. Yeah. Yeah. Now, one more documentation related topic that is software and documentation. So Marcus Winter of SAP has proposed that we should support Markdown as a documentation format for pipeline libraries. So when I look at a pipeline library, actually I'm just going to show it, hopefully everybody's okay with me just showing it. Documentation for a pipeline library is available from inside the Jenkins UI. Oh, you silly thing. There we go. We'll take that one instead. We'll take that one instead. All right. So if I look for instance, let's look at a recent execution of embeddable build status here. And when I click pipeline syntax here, there's a global variables reference. And this, this chunk of documentation is documentation provided by the author of that pipeline pipeline library. And if we look here, let's keep looking build Docker and publish image is a is a pipeline library that I'm including. Another one is build plugin. You'll notice here that build plugin is using HTML markup and not rendering it correctly because I use the Markdown formatter. I prefer Markdown formatting instead of, instead of HTML. It's easier for me to write Markdown. Yeah. Well, I ran, I modified that and I ran it recently in which plugin, oh, in this one, I think implied labels. Let's see if I can show that this one will render, will show it correctly now. Pipeline syntax, global variables. Oh, nope. I'm still wrong. Okay. I've, so I've got, I'll have to have to pull it up differently to show it to you. But what, what I've done now is I've actually reworked this documentation into Markdown and it renders very nicely. It looks good. And I can read it more easily than reading straight HTML. Right. Now, there's a complication here in that we have to, if we were to do that with the library in production, that's a library we use on ci.jankins.io, then I have to persuade the infra team that they're okay adding one more plugin to ci.jankins.io. And it's, that's a, it's very fair that they want to be sure that the ci.jankins.io system stays very stable. So that'll be discussed. Any questions there? No, interesting. Okay. And then the last on the permissions topic is we had this, have this archive of what used to be the Jenkins wiki, wiki.jankins, ci.org, wiki.jankins.io. We used it for documentation, but I was surprised when I was obsoleting a plugin. Okay. Again, let's show what I mean. There is this 12 year old plugin called peggedown that provides, where's peggedown? There it is that provides Markdown support, but it was last released 12 years ago. It has a security vulnerability and it's been superseded by the Markdown formatter plugin. So we deprecated it, we archived its GitHub repository, but because the documentation was being copied from the archived wiki, there was no way to say easily that it's been deprecated. So I got permission to write to that repository and have now put the big deprecated words right here. Okay. And that's a, okay, it's, we got permissions. Guess what? All of you probably also have the same permissions because permissions were granted to copy editors. Okay. Any other questions or any other topics for Docs Office hours today? Yep. I'll just submit a poll request to correct the title. Oh, very good. All right. So let's go. We are going to do a live code review, everybody. Ready? All right. Okay. So let's go review Chris's code. And the prototype site is all ready. So we can look at it and see it live. There is the correct title. And let's read the change. There's the correct change approved. And we're just going to merge it. Okay. Thanks, Chris. Welcome. All right. So we have, we have merged any other topics for today? Nope. Nope. Not for me. All right. Thanks, everybody. I'm stopped recording. I have one question for you before you.