 Welcome. It's the 31st of March, 2022. This is Jenkins documentation office hours. We've got news and crowd in enterprise any other topics that we need to put on the agenda. All right, let's let's go through those topics then thank you. Okay, so first topic. We just had a spring for shell as a remote code execution zero day vulnerability announced in the worldwide. Worldwide web in the infrastructure and it's not affecting Jenkins. You can read more about it. I have a blog post on Jenkins.io from the security team and the info team. Now I've got to insert it here and I have to correct that. And I don't know if the blog post is visible yet so let's try it. It is big victory. Okay, good. We'll be actively promoting that immediately after this meeting I've got to do some more work to be sure that this is widely known so that people don't panic about. Hey is Jenkins affected by it. Any questions or comments on that one. Okay next topic then crowd in enterprise for localization. Alex. Yes. So, I think you want to say something to your experience with the platform level up again. Well so I can. There are there are a couple of awkward spots and this is where Kevin may be able to help so marks attempt to localize some messages failed. And that had nothing to do with crowd in enterprise and everything to do with insufficient documentation on message extraction. For example, one of the messages included embedded the messages included an embedded parenthesis. And there's old documentation wiki docs warned that you can't do that in a localized message. Now that's an odd, really surprising limitation right why can't I put us a parenthesis in, but that was the reality. So we need to convert the wiki docs to Jenkins dot www Jenkins that I'll, because they are the wiki docs are still valid they at least got me started but they didn't. And it's been long enough to find that I ran out of time and so couldn't, couldn't do my localized messages, however, on the plus side marks attempt to use localized HTML. As far as I know has succeeded. The release has been delivered. And I think we can check that. I'll check it separately I don't need to show a demo here I think but check with with Italian language platform labeler. So for me I think the next steps for Mark are localized the messages in platform label or because I haven't done that yet they need to be converted to Java properties. Do you mind showing me what you mean by need to convert the wiki docs to Jenkins IO. I didn't encounter that warning yet. Ah, yeah so what what this is is. Let's see site colon wiki dot Jenkins dot IO localize let's see is it internationalizing maybe it's localizing messages. Let's see if I can find it. Is this it. Yes, I think this is the place that has it. Where it no no this isn't it okay so I'm going to have to continue looking maybe it's here. Where it tells me that you can't use. Maybe, or I'll have to look a little further. Oh yes here it is. For example, this will not parse parse correctly. So this was the thing that I eventually found so it's here here it's describing how do you deal with messages and jelly files and what I had was a message in a jelly file. I was just explaining and use parentheses is a way to do a casual comment about something it said, Hey, this thing, either this or this. It was just like this, and what this says is you can't put these embedded parentheses inside this percent marked string it has to be a local, which of course is now going to be complicated for languages that might change the ordering of those because this now has an order dependency. Did that answer your question Alex. I think I know what you mean. I think it's basically about the crowd and treats the percentage as placeholder or something and that's only, that's only accepted in a specific position. Well, and I'm not even sure that it's cloud in I think in this case the problem I was having was nothing to do with cloudy crowd in at all. It was entirely Jenkins Jenkins when I tried to develop with this plugin would simply refuse if I if I violated this assumption it would fail to show the message if I try to use this style of message. So it wasn't anything to do with crowd in at all. It was entirely Jenkins localization. I think yeah, I know what you mean. And so so that was that was one of the things that okay I learned by trying to localize localize the platform label or plug in is there are some messages in jelly files that you cannot localize without splitting them. Yeah. I personally didn't try to localize jelly files yet, because the majority of files are mostly like in groovy Java or properties for example. Right. And I think the preferable approach would be to transfer these jelly messages into properties files. I think that is the common approach to translate something. Oh, see, and well, okay so that's a good one let's let's discuss that one because I want to, I want to talk about that one and get your insights on it so I'm going to open up my platform label or location here and let's go find a jelly file of jelly slash jelly J. I think oh yeah here we go so here's an example of the of yeah this one. This one certainly has no this doesn't have anything for localizable and how about. Maybe this one does. Nope. It's there isn't a lot to translate in platform label or in case you can't tell. Here we go okay this is this is I think the one file that actually has strings in it that could be translated. And what it's got is these titles. This title is trying to help the user title of a checkbox generate label with Windows feature update and then it gives examples in the, in the parentheses. And I think, I think what you were saying is the best way to do this or the common way is convert this string into a symbolic reference, and then put the symbol at a properties file and put the symbol here. And that is what I did yesterday to translate a few, a few strings in the design library plugin for example reasons. And I think that is also the approach many plugin developers take, because then you have one unified string in the jelly files and can use these unified strings in the properties file as reference for different languages. Okay, and title dot one or title dot two would be the same key the properties file as reference. And let's use your, your you mentioned design library let's use that as a, as a good example because that way I can see it. And think about how I would deal with that because for me the, the challenge with the Jenkins design or with the technique was, I was not sure I'd understand what the string was supposed to say. So let's go looking here and if I look for jelly. I think I've second my PR I made a few hours ago even better yes right. Okay, I think it was a PR. No, not this one that we want to close to one. Okay, so. So this provide initial translation for home. Good. Okay. This is the approach I went I basically exchange the literal words with placeholders. So the dollar sign and the percentage title as reference as title in the properties file a bit below. Right so when I look at this one, when I look down here at title, it will say title is this. Yes. The same hierarchy for every other file for example if you have index and us index underscore de for German for example it would be the same title, and then the German translation for example. And I think this approach the, there is an article on Jenkins IO how to do that. And this is the approach I took to do that. Michael you showed because yours is on wiki that Jenkins but minus on Jenkins IO I think it's about how to localize something in groovy jelly and Java. Good so maybe it's just that I didn't look in the right place and failed to find instead found this wiki page that's outdated, and you found the right page on Jenkins IO. So let me go grab that because that that may already be indication okay I just didn't do the right thing so. If you don't mind I could show it very quick because I still have it open some way. Oh that'd be great. Here I'll just stop sharing. Go ahead. We have it on the screen. Because it was actually on the core. Do I share the right screen here. Because it was actually on the core PR. Daniel commented on. Not this one. Yeah, I think it was this one. Yeah, Daniel shot the link. Nope, this is the wrong one. I think we got it this one. Contributing MD. No, I think I was it. Yeah. And this is basically the article on Jenkins IO how to do internet internet and messages and jelly files. So this is what would be the jelly file and this would be the string we have translated in the properties file encoded here. So if we go one up this article outlines how to do localization in Java files and jelly files and in groovy files. The procedure is always the same you have the in groovy it's a bit special because you have the actual word here like a manager and copy that reference in the properties file and have it here in the Java sources you do the same. What description is in the properties file and in the actual Java code. You utilize the resource bundle holder class and just load the previously defined string from the properties file, and then the jelly file, like we talked a bit, a bit ago about it. We use the message reference with the percentage from the properties file. So basically everything boils down to the properties file if you want to do localization. So some label a plugin just does it in the old fashioned way. I don't know. But this is what is recommended, I guess, well and and the properties file is what I was trying to create the mistake I made was instead was trying to use the literal string as the key. And what this shows is don't use the little string as the key, use something symbolic that is easier easier to represent as a Java property. For example, the only case where you I mean you can use the full word but you would need to phrase it as string, for example, but you can also use a shorthand like message and then message equals in the actual message. The only case where you use the full word would be in groovy that use plug in manager and inverted slash as the limiter then plug in manager and the groovy would load like this then. But in jelly you don't do that. And even in groovy isn't there a way so that that title colon underscore. That's a that's a call to get text so that's just a call to a function. Couldn't I even there embed double quotes message, and it would symbolically look up message in the file and present the English text right. I know that with the localization groovy is bar minimal I didn't try that yet. And I will, I have, unfortunately, the get plug in uses groovy for some of its views, and I've not yet converted it from groovy to jelly, and therefore, I will have to test this so already what you're showing is very good. So if you convert the, I think the one jelly file in the in your platform level up plug in to this example it would work out well as well. Excellent, thank you I will, I will make that attempt it may not be today today's a little busy but but thank you very much Alex thank you thank you. Yeah no problem. So I think my next step then is to do. I'm going to switch mice are going to localize some additional plugins as well. So that so that I have more samples to test. I'm not yet ready to do the get plug in the client plug in there that's a little too heavy weight, but I've got several other plugins that I maintain that I can use as test cases and and so I assume Alex you're still willing to do German language translation for me for one or more of those if I'll just tell you which ones they are. Yeah, for sure. Excellent. All right, thank you. Anything else we need to discuss on the crowd in translation. And I'll share my screen and we'll go back because we've got Elizabeth here with us as well and she may want to have some time to discuss. Can you see can you see my my screen showing the internationalizing. And now Docs office hours good. Okay. All right, so Elizabeth welcome. Did you want to talk to us about she called Africa, contribute on. Hi, everyone. All right, so for this right and they know this the programs manageable and current, currently, and applications have gone out for this current and was still taking in applicants and then applications because in very soon because we'll kick off the program I think next month Yes, next month. So by next month, meaning in April. Excellent. Okay, great. In case Alex you're not familiar with it she called Africa contribute on is a this year will be a six week, six week effort where we invite mentors from the Jenkins project to combine with new open source contributors from Africa. Last year we mentored five contributors from Nigeria Rwanda. I forget one or two other countries and, and had a great experience with them we've proposed a program. We're certainly looking for more mentors and we're going to run it again this year in April and May. That sounds interesting. I think we spoke about it a few weeks ago already. Yeah, exactly. So Elizabeth anything else that you need to share with us or anything else that you need to note to us. I'm hoping that Jenkins will be selected. We have some mentors ready. Look for your announcement. Yeah, we've actually announced to mark we announced last night. We announced already. We have Jenkins we have the PA we have cloud we have various companies and various organizations that are partnering with us this time around about six of them. We announced last night. Excellent. Okay, so I should be able to find that on the she called Africa site. Yes. She called Africa. So programs events school contribute on. Okay, here we go. I'm not seeing announcement but that's that's great. This is the place we should be looking. We've announced it across all our social media handles. We did that last night. Oh good. Very good. Okay. Excellent. Thank you. Any other topics we need to discuss today. Alex any any hot topics from you or Kevin. Okay. I know that I attended this meeting like three weeks back, and we had a conversation you said you asked me to give you two weeks. About the 319 girls. Training various technical skills. Thank you for bringing that back. Thank you for the reminder so let's this is. Oh, here we go. Right. This one was the one your boot camp right. Yes. Okay, so let's let's bring that. And so forward. And, okay, so, so the question was your front end development boot cap. And. Okay, so it is now. What are you looking for next week. Yes, next week is the last week. Okay, good. All right. And looking for internships. All right, this is what you were looking for was internships in the projects. Yeah. Okay, and I so I think I had the action item to see if we could find a way to fund women. I have not found that so my apologies, let me put it on my list again so. So, and I assume in terms of issuing payments to the women that would have to come from the funding project right it would not, it's not that she called Africa administers the payments. So, Elizabeth you're still muted. Yeah, and at some points, I managed to went out so sorry. So, so the challenge here is that in order to pay the interns, the payments this because the boot camp you're running is not a she called Africa boot camp. The payments would have to come directly from the project to those individuals not through she called Africa so it's not that a company could donate to she called Africa and then you would pay them. We would have to find a way to pay them directly. But there is there is actually a registered organization that is running the boot camp empower her community. Oh, there is. Okay, yes empower her community. And there is a website, let me, let me drop the website link in the comment section so you could just go through it. Okay, so I have it as empower her dot community. Yes. Right, so let's go there. Okay, and so this community. Alright, so let me do some reading while we're here then. Okay, so boot camp one dot oh. Okay, and. Okay, so, but as far as I can tell, I don't see anything here that indicates that the empower community has a facility to pay any of these who would be working as interns do I understand that correctly. Okay. When you say facility, do you mean a payment link. Okay, do you have a way so, so let's I think what what you were suggesting is interns might might join the Jenkins project for instance, and contribute their work, but they would need to be paid and in order to be paid. We have to have some way to get the money transferred to them. And I was assuming does does empower community have the ability to do that kind of transfer or would we have to have. We do. Yes, we do. Okay, all right, well so then so then if. Okay, so what I think you're saying then is if an organization donates to or pays. And power dot community that then empower community could pay the intern. Yeah, is that a correct way of saying it. Yeah, I guess so. The reason I ask is, I'm most organizations are not configured to make payments into Africa. At least I know my company is not not not set up to make payments individuals in Africa. Because they could probably we've we've have figured out how to donate to she code Africa and so we might be able to use the same technique to donate to empower her community. Okay, so, so, Elizabeth, who should I contact for further should I just use the contact us for further discussions. Yes, and me is there. And you could as well contact me to go for that discussions. Actually, Mark, can you hear me Mark. I can. Yes. Can you hear me. Yes, I can hear you. Okay, so I'm actually I am the founder of this community. Okay, the founder of this community. Yes. Okay, so, so you have, you have a way that if a company donated, or the Jenkins project donated funds, you have a way to transfer those funds to the, to the intern that would be doing the doing the effort. Yes. Okay, all right. Okay, so then Mark to check with Jenkins project and other donors for donation to sponsor an intern. One or more interns. Good. Okay, thanks. All right, thank you. Excellent. Any other topics we should discuss here today. Let me let me can let's continue this will we'll talk to it again in further discussion next week. Thanks Elizabeth. Alex, thank you. Thank you, Mark. Thank you. All right, recording should be available in about 24 hours. I hope.