 OK, and we are live. Thanks. So if there is anyone on YouTube watching us, we're waiting one more minute to see if anyone is joining and we'll start very soon. If anybody wants to join, you can go to Jenkins configuration and it's called GitterChat, and you can find a link there. I'll just show. OK, I messed up my browser again. It's so nice that it's not me this time, so. Oh, yeah. So just a second, yeah, we're waiting for everybody anyway. So there is Jenkins-configuration-as-code-pointing-chat. So if you're interested in any activities around this project, please join this chat and ask any questions you have there. OK, I guess now we can start. If you want to join, yeah. But it's OK. First of all, I'd like to start with some confession. So I didn't make any minutes of meeting last time because it was our first meeting and I thought we'll have it recorded, so we don't need that. But then it didn't happen that I went back to YouTube and go through and create minutes of meeting. So I'm going to change that from this meeting and minutes of meeting will be created. And the link to the document was already shared on the same Gitter channel that Oleg has just presented. So if anyone is interested with what we're doing, what are the decision and action points because I guess that's the most interesting part, it will be available. And if you have a link, you can access it, so. If you want, I can send out meeting notes for the previous meeting. Oh, that would be great. OK. And of course, feel free to edit the one I have created. It's open for editing for anyone. OK. So if you have some notes from the previous meeting, maybe we can use them for the follow up from previous meeting. OK. Makes sense. Yep. So I guess we should just sync up on the progress for now. Yes. If you want, I can screen share and open the current projects or you can do it on your own. So let's see if I learned how to share this screen share. And I'm going to share this. So you should see my browser now. Here is configuration is called plug-in. And during the meeting two weeks ago, we have decided that we, of course, we will release a couple of more alphas if there is a need. I think, yes, Nikola was releasing a version 0.9 yesterday. 0.9 alpha, of course. And it may happen that we'll have more alphas, but there is a date set for 1.0 release candidate. And it's the middle of July. And the month after that, we're hoping to release the actual official release. So we have created milestones for both releases. And so far, we have one closed for release candidates. So have a look at that. The issues that are on me that I promised to finish soon, well, they are progressing, but not as fast as I wanted. I had some unplanned vacation during those last two weeks, but I'm back, so hoping for the best. This is, yeah. So I don't think there is any progress on that one. This is documentation. This is, well, no progress for now. Oleg, is this something that you are planning to work with? I mean, it's your issue, but I'm not saying you have to. Just want to know what's your plan. Yes, I can do that. So just assign it to me. Also, for those who doesn't know yet, we are using those prior labels to make it easier for anyone to pick up the issue if you're interested in contributing. So the darkest red prior one is something that we should start with when we implement the ones with prior three may not even happen, and it won't stop the release candidate. Restricting non-public APIs. Nicola started doing some foundational work for that about restricting things on the package level. That's very good. So we should check with him if he should be assigned to that one. Yeah, right. We always have a plan B just to spend five minutes and 20 total classes. So Nicola has a reference in the pull request on the bottom, pull request to access Medifier. OK, so something here is happening. Is this one connected, related? I know that's the long discussion we had. Yeah, I guess Nicola has already delivered this patch in 284. Yes. At least I believe that this task is actually closed. OK. Since it's a workaround, I'm now wondering should we close the ticket for short term work? Yeah, we'll do so. OK. So now we have a top level jcask configuration section which allows to set behavior for deprecated and restricted fields. The default behavior is if you don't set anything. Reject restricted, repeat deprecated. I'm pretty sure that you can just close it. Because Nicola just implemented the generic engine with both examples at once. So yeah, it's shipped in 0.9 alpha. Very good. Maybe we are missing some documentation for that. But yeah, the feature is inside. OK. This is something you're working on, right? I'm not sure. I'm waiting for somebody to make a decision whether we merge it or not. Some checks, you are not successful. This comment I missed. Yeah, that's the one I was trying to merge. So like Nicola commented that it sounds like a. OK. So we just need to have this checked. I merged some not successful checks before, and it didn't end well. And we actually started talking about if there is a way to re-trigger checks like that's your PR and I can re-trigger it in any way. We haven't found a nice way to do this yet. Even I have no permission to do it on Jenkins infrastructure. So the most straightforward way is to just commit. OK. So I'll check what's going on with this pull request. Oh, yeah. It seems it just needs to be merged with upstream. I will do it after the meeting. Very good. And so you're happy with this solution and you don't have any objections when it comes to merging it? No. No, very good. I will have a look once again. But if the checks passes, then we'll probably merge that one. So what we agreed that this API will stay in beta forever, at least for now. So it means that it won't be publicly exposed to other plugins unless they consent that they want to use it. Because yeah, this API is just a workaround and generally we don't want people to use that unless there is an ultimate need to achieve compatibility in some edge cases. OK. So once the checks are done, I'm on it. Then the only issues that are left are related to documentation. So that's on me and that's going to happen this week. So I think it's going quite well and it seems very possible that we will release the 10 RC before the deadline we decided last week, two weeks ago. Yeah, I think so. We also can take a look at the release plan. I mean, the second milestone. This is documentation. It's just not named wisely. Documentation, not documentation, but that's the easy stuff. Documentation, yeah, this is something that we could have. MakeJocDSL optional. It's already in progress by Nikola, as far as I can tell. Yeah. So he has created a pull request or not? Yeah. OK, so seems that one can be closed too. Yeah, so we had some discussion with Nikola because there was a dead code, which seemed to be dangerous. But the assumption that it's a dead code. So now we should be fine to just close it. Hopefully. Very good. I am going to close it. I just want to go through whatever was happening here before doing that because I don't want to do it blindly. But yeah, we'll do that after the meeting. This is bigger. We have talked about it. So I think we need to do some discussion with Nikola. OK. If he's fine, we will proceed with the approach. OK. So I guess we don't need to spend too much time on it. Now we'll try to get a hold of him. Yeah, and this is something just really nice to have. I would even say if someone is able and have time to implement it, then that's great. Oh, there is also discussion, but yeah. So I don't think we need to spend much time on that. OK, so it's going quite well. I've seen that there was a lot of things happening. I just haven't managed to go through all of their mails and updates and comments in all the issues yet. But it's progressing. OK. So I don't feel like we need to add anything else to both milestones, at least not for now. So I'm happy with how it looks now. I don't understand what is the ticket in the top. Plug-in installation tries to download from wrong URL. So at least we need to trace this issue. Oh yeah, that's from Jan from Pragma. So I asked him to check. I know there is an answer from Nicola. OK, so basically once we have the solution in the update center, the issue should be gone, right? I think so, or maybe another understanding of that. So here it pulls in data from the mirror. So one of the things we could do, we could add an option to the JCask section to support custom update centers. OK. Yeah, there are many companies which deploy their own update centers for Jenkins, performance reasons, security reasons, or shipping their custom plugins, whatever. So supporting custom update center for installations would be reasonable. And the most trivial approach is to just specify the center in Jenkins YAML. In the same section where we configure behavior for restricted fields, for example? Yes. What's the name of the section? I can find it. Just a second. Configuration is code. With dashes? Yes. I have twisted the YAML snippet to the chat. So you can take it from there. I should have. Yeah, I'll just post it to get it, I guess. Yeah, but OK. OK, yeah, so we have this section. One of the things which I don't exactly like about the current structure, that deprecation and the restricted are on the top level. So I was proposing a kind of separate level for that. Now we have it on the top level. Maybe it may make sense to refactor it later. But when Nikol is on the call, we can discuss that. So you mean you wouldn't like to have configuration as called as a top level? Our configuration is called as top level for sure. Yeah. I don't like the fact that it's deprecation and restricted on the second level. Oh, OK, OK. I get it. Yeah, I've pasted the sample to the Gitter. But yeah, regarding update center, you should definitely go to the top level and to the top level of the configuration as code section. OK. I'm creating an issue. And I can update it there. Very good. OK. So I think that it's a totally reasonable feature request. And actually, it's a newbie friendly thing. So everybody can just do it. Very good. Yeah. So I mean, it would be nice. It would be nice to have in release 1.0, I would say. So like low priority. OK, you can update metadata or you can update metadata in this. You already did that. Yeah, I just wanted to think. So is there any other new thing that you would like to go through? So yeah, I don't have so many updates from my side, because I was working on Jenkins and Java 10 hackathon the previous week. But what I did, I updated my configuration as code to demos. And if you want, I can briefly show it to you. Oh, yes. I mean, like now? Why not? Yeah, that would be great. Yeah, so I won't be running the demo, because I was presenting it last week, if I recall correctly. Yeah, so it's my project, located in GitHub, or in our demo Jenkins-configured code. So here I had a pull request for a jcask demo. And now I also have a branch for Java 10 support experiments. So actually, it includes a jcask as well. And the idea was to test on Java 10 and then on Java 11. So if anybody wants to try it, I deployed it in Docker Hub. So you can just download it and all the documentation in the repository applies. Can you share the link to the repository? OK, sure. I'll put it to the chat. Yeah. OK. This one of the things. Yeah, this is another thing. Actually, I was quickly demonstrating Peter the hackathon as well, because our main problem there was to get pipelines and other stuff working. We were quite successful with it. And actually, I used this demo. So it includes a simple Jenkins YAML file. It can figure security, job restrictions, also authorization strategy. I'm about moving some other configuration. So I start doing patches in local plugin and other subplugins, which do not support the jcask yet. Actually, even in system review, it's not exactly perfect now. Yeah, but I will be moving more and more configuration to jcask. With regards to Java 10 support, good news that everything works like a charm. So I have created a bloat in JDK 10 image, and I just built my image on the toilet, same for 11. So it works. And yeah, all bits of jcask start up successfully. The only thing I discovered is one glitch in the configuration exporter. So if we go to configuration as code, there is an issue I reported. jcask config exporter fails on the latest version with Java 10 on being specified. Oh, yeah, I've seen that on. Yeah, so my assumption was that it's about beans. It's about low-level logic. Something is broken on Java 10. But if you scroll down, people say that they experience the same on Java 8. So it means that something can relate to Java 10. But yeah, or maybe it's related. Luckily, we need to investigate it a bit more. So it was in my plan. But yeah, there is. Nikola is assigned to that. So I don't know if he assigned himself. Maybe he's looking. OK. And so what I can do here is use this. Use it. So technically, anybody can just start this image and probably it gets reproduced immediately. Could try maybe. Should be enough to get this demo running for the current needs. Yeah, so it includes all configuration as code. Some bits are done in Groovy Hook scripts. But I already moved some bits to pipeline. Sorry, to jcask. Sorry, can you please repeat because I can't. OK. So yeah, this is just a bundled demo, which includes also configuration, plug-in things. So it now executes system Groovy scripts. But before that, it executes jcask. And unfortunately, we don't have a cool text log in for jcask now. So yeah, jcask is some way here. Maybe we need to do something like maybe one information entry for that to make it a little bit. Previously, we had a big ASCII text highlight. But now it's missing. So yeah, I go to this image. You may see that it's based on the recent VCR, this new login screen. OK, let's see whether it still breaks. OK, configuration as code. OK. Yeah, so file cannot be found. And here is this issue. So export, now being specified. Yeah, I will sync up with Nikola. I do not know what exactly happens. It may be the Java problem or it may be just glitch somewhere in the code. But the most of Jenkins functionality works on Java 10 and 11 after purchase for pipeline. So yeah, I'm not sure what causes that. OK, but it seems Nikola is working on that. He's assigned. So we can try to talk with him or you can talk with him and discuss what to do with it. Maybe he has some ideas. But yeah, anyway, we don't have any timeline for Java 10 support now. So it's available in experimental mode. But yeah, maybe we will do something in the next month. And if yes, this issue may get to the priority list for the release. Yeah, sure. So let's keep an eye on how it goes with the Java 10 support and who needs it. But I guess you'll be the one who will know that we have to solve it quickly or something. Yeah, right. So we will have some results for that. And during the hackathon, we also had several external contributors and one contributor, maintainer of easy Jenkins project. He starts exploring JCASC for his configurations. So maybe he will also provide some feedback in the future. That's great. And yeah, I have a question now that maybe you will be able to help me with. So I mentioned last time that I introduced JCASC at one of my customers' Jenkins installation. And it's working well. But there was a plugin that was not supported. So I fixed the plugin and I created a pull request in the plugin. And the maintainer of the plugin is not coming back to me. I mean, the last release was in 2016. So I totally understand that he may not be working with it anymore. But is there a procedure to take over? Yeah, there is a procedure. So if you could put a link to the plugin, we can just take a look. OK. And then I will describe procedures because it's actually a pretty popular question in the Jenkins community. So I will, what do you want to link? And just put it to the chat. OK. Gitter or? Gitter. So you have it. OK. Oh yeah, this plugin I know. I mean, it's very simple. So I get it why he doesn't need to update it, but. Yeah, right. So one of the issues with this plugin is that it's not compatible with Jet 200 now. So even if you fix this issue, it's not going to work on any of the Jenkins versions. OK. But we can fix the Jet 200 issue. We can. Cool. So yeah, let's see. OK, so we have two maintainers. We have the emails. So what we usually do in these cases, there is a program for adopting plugins. So if the plugin is marked for adoption and we can easily check that, then the process will be simple. OK, let's see. It's a bit outdated just in terms of POM. So it uses an ancient version of Jenkins. And it lacks lots of features we introduced. OK. So yeah, it's not marked for adoption. If it was marked for adoption, we would have about that. But yeah, still, even if the plugin is not marked, there are ways to do. So the most straightforward approach is to email to the Jenkins developer list and ask her to be a maintainer. So even if the plugin is not up for adoption, you just see current maintainers. You can see the emails here somewhere. OK. And then you create email, CC them. And if there is a response from them and they approve handover, then we handover the plugin. If they don't approve handover, we just wait for two weeks. And after two weeks time out, we still can transfer permissions. OK. Very good. So thanks for the link. I will follow that. I mean, I will give them a couple of more days. It's summer after all. After all, they may be on vacation. And it's very, very not urgent. So it's all this plugin is maintained by a company at this. At least it starts it as a plugin by one of the companies. Yeah, and it means that after two years or so everything has probably changed. Yeah, you can try. OK. Pinging in the developer list, asking about the future of this plugin is something interesting. Because yeah, there are two pull requests which haven't been released. Then yeah, JEP 200 issue, and then this JCASC compatibility. Yeah, I think we can try to fix JEP 200 issue before merging. So we release one version that is complete. You already updated plugin. You updated links, you updated dependencies. So it should work. Honestly, I have no idea what is this library. But yeah, it should be fine. So in order to release it, they think you will need to remove the distribution management section. So this definition is outdated. And it's not required. So this section, you won't be able to release the plugin. It's just for the future. But here, regarding the rest, it's fine. We could be updated, but generally, it's fine. So yeah, after distribution management, you will be able to release, I think. OK. Yeah, then regarding the implementation, it's something to discuss. But you use bind.json. Actually, Nikola had a look at it. So it's very simple. Why do you need a custom configure method at all? Maybe it makes sense to create a data-bound constructor and then a data-bound setters. But yeah. Oh, I simply followed the instruction from plugins marked down in our folder. But maybe it can be improved. Yeah. Anyway, it should work. I was just wondering. So yeah, setters, it should be fine. Escaping, it should be fine. Yeah. So this patch should work well. One of the things I would recommend is when you create such good requests, installs Go and create a Jenkins file. So currently, there is no continuous integration running for this plugin. Oh, OK. Yeah. In order to have this CI enabled, we just need this should work. So yeah, there is a Jenkins file. It may be trivial like that. Since you need to verify JEP 200 compatibility because there is no JEP 200 compatibility there now, you could use a more complex constructor. Something like that. I hear you also specify versions today to test against. And yeah, with this thing, it should actually get CI enabled if you have right permissions to the repository. So if you just add it to your pull request now, it won't work because you don't have right permissions. But once you have them, Jenkins will pick up this auto build automatically. Yeah. OK. So I will try to fix the notify of JEP 200 compatibility issue and add the Jenkins file. And we'll see how it goes with getting the rights. So yeah. So I think that for this plugin, it's a common procedure. So in the community, we appreciate anybody who wants to take ownership of the plugins. And yeah, we try to help them. So if you go to Jenkins developer mailing list, there is a number of such requests there. Yeah, I actually have seen them, but wanted to ask about the process anyway because it may be one of the first steps. But the page you linked on the Gitter should be enough for me to. OK. Yeah. Should be fine? Yeah. But yeah, for JCask, we will probably need to update such patches to all plugins because in many cases, all kinds of data binding will work. But the plugins created maybe six or seven years ago. They may have no audit binding engine included. So there was a low level JSON handling before. And as far as I can tell, JCask doesn't always handle that. OK. Just because it kind of discover fields. OK. Is there anything else you want to talk about? Not so far. OK. Nice to see your progress with the plugin. And as I said, I missed the party last week. So yeah, I'll try to catch up and deliver some bits for the release candidate. Yeah, me too. So I want to mention that you heard already about it. We are organizing this Day of Jenkins event in Copenhagen in October. And it's not like I want to promote the event so bad using this meeting. But the idea is to have a contributor track there. So some kind of hackathon around Jenkins configuration as code. So I think if we have any Scandinavian contributors and I know we have, it's worth mentioning that there is an opportunity to meet, sit together and do some coding. Around the Jenkins world in Europe, because it's actually a couple of days before Jenkins world comes to France. So just a short announcement. And I think that's all I have also. I will take care of this notifier plugin and I will take care of the issues that I have regarding documentation. I think it should appear and be improved very soon. Okay, cool. Thanks for the update. Yeah. And I guess there is no need to keep the meeting open for 20 more minutes if we're more or less done. Yeah, I think so. So thanks to everybody who watched this in-cub session. You'll have another session in two weeks and taking the time frame and we will be syncing up regarding the release candidate release there. So if you're interested to participate or if you're interested to give a try and report some issues, let us know. We will try to take them into account in the next releases. Exactly. Thanks again Oleg for taking care of streaming it live. Yeah. I'm happy to do that. Okay, so I think I'll stop the broadcast and see you in two weeks. Thanks. Okay.