 Excellent. Welcome, everyone. This is our second day sync up for the Jenkins Java 10 hackathon. We're just going to go through. This will be a pretty short meeting. We're going to do a couple demos of what we've been doing. People are going to talk about their status in general and some demos. And if you're watching this live, you can ask questions on the Jenkins CI Jenkins channel or on IRC at Jenkins-hackhouse. Oleg? Okay. So, I'll just share my screen and then we have a status update. Okay. Do you see the matrix? Yes, I do. Okay. So then, just in case everybody is interested, we posted links to the yesterday's opening slides so that you can find all the introductory information including how to run Jenkins, et cetera. And you can also find the recording of the previous meeting. So, if you're missing some information, just go to these links and you will find everything there. And now we just proceed to the status update. So, we have a big Google document with all the current updates. And we can start from Sem since he is in the top of the list. Okay. So, yesterday I spent some time working on looking at pipeline compatibility and doing a more exhaustive test. I have good news. Barring one issue I fixed with declarative. It seems like everything I can find with pipeline works, like shared libraries, multi-branch, loading from SCM. I'm using all of the latest experimental builds and the latest experimental Java 10 core in it. It works. I only had to upgrade Groovy to get one set. Sorry, that's me living in city. And since Liam is a pyromaniac and, sorry, I regret nothing. I'm sure he didn't set the fire. So, I think my next order of business is moving on to trying to fix some of the issues with unit tests and building. Since we can't currently run unit tests for the pipeline plugins, which have a lot of kind of special cases. Currently, we can't pick up the war exploder class from the test harness. And I discovered trying to run tests under Java 10 that if you run the Maven compile under Java 10, that fails. So, I'm going to try to first fix compiling under Java 10, which is related to some sort of annotation issue. And then use that to start getting the unit tests working. And then I also found that there is a memory leak introduced by this version of Groovy. So, I'm going to work on that. I'd love to have someone else to collaborate with to work on maybe some of the POM stuff to get the Maven builds in general working with multi-module releases or multi-release jars. Someone else start hacking on that. And yeah, I think we made a lot more progress than I expected. Cool. Thank you. David. So, yeah, I was looking into those manifest issues. I wasn't able to reproduce any problems locally. I tried to, you know, isolate everything outside of Jenkins and reproduce it, but I couldn't. But I can still reproduce it in Docker. So, I'm going to keep looking into that a little bit to figure out what's going on. Also yesterday, we're just helping to finalize a couple of PRs, you know, just fixing some of the tests and stuff for the other changes we made. That's all for me. I might look at the, you know, making Maven HPI plug-in work under Java 10 to help out, Sam. Okay. Yeah. Thank you. Anything else? That's all. Okay. Then it's me in the list. So, yeah, I continued working on pipeline enablement. So, in order to simplify early adopter things, we needed some patches. So, firstly, we needed to release pipeline support plug-in in incrementals so that it would be available for early adopters. And it caused a chain of things. So, for example, that support of incrementals releases in Docker images also spin new Java 10 and Java 11 images for experimental releases. Yeah. And then finally, I worked with Sam in order to get pipeline support patches incrementally fight. And we've done that. And, yeah, the main outcome that now you can easily build things in Docker with using usage of incremental releases. And the final implementation for that was Jenkins experimental blotch in JDK 10 plug-in, not plug-in docker image. So, now, if you want to try out Jenkins pipeline and if you want to try a blotch, you can just run this image or something like that. So, you can just put a blotch and click enter. And the port is already allocated. But, yeah, this is the idea. So, you just run the image and you get everything out of the box with all patches we have applied. Okay. I'm just running another demo so I do not mess up the things like I did yesterday. Okay. But, yeah, everything is packaged. So, no plain piece, local Jenkins build, no plain piece, local pipeline builds. As an adopter, you just go and run images now. And I will update quick start guide. So, now it's explicit here. Okay. Yeah. Regarding the rest, as Sam said, lots of pipeline things started magically working. Thanks to fixes by Sam and Devin. I also updated my demo, Jenkins configs code demo. And what I can show now is that now you can build Jenkins plug-ins on a Jenkins master running in Java 10. And it includes something like 50 different plug-ins. And everything works like in charm, including unit testing, including pipeline, including reporting, cached publishing. So, we've got a great progress. And, yeah, it's just a number of patches by Sam, Devin and me in order to get it running. So, pipeline story looks really well. And it's available for adoption. So, yeah, this is my main summary. I have no idea what I will continue working on tomorrow, like some core patches and maybe a bit easier to do this. Awesome. Okay. So, then Nicola, you can run? Yeah. So, on my side, I've been working on removing the explicit access to fields via reflection. So, doing so, I try to apply to Stopler and do it so I had to dive into the rabbit hole. So, I'm really feeling like Alice in Wonder Woman here because I had to change Stopler doing so. I had to make a fix to Animal Sniffer. And which one is a Maven plug-in. So, I have to fix Maven plug-in tools. And this one also depends on Java 9 support on enforced rules. So, this last bit is already implemented but not released. So, I've asked Baptist who made the last release on this Maven components to do a release process. And then I will be able to get steps back to get all those pull requests sent to both Maven and Jenkins community. Okay. Thank you. One of the things that you also work on Animal Sniffer and what I know that Oliver Lamy has also started working on it. I pinged him on this topic. Okay. So, you're aligned. Okay. Thank you. So, then regarding Jean Paulo, he continued experimenting with Easy Jenkins. He was a bit delayed because we needed to release all this tooling in order to enable this Docker packaging so that it would be able to build it with standard images. But now I hope he's unblocked. So, we are looking forward to see results. And he's also working to do some experimental packages. For example, for Yoctur, it's one of embedded software development tools. And he also continues exploratory testing for other bits. Okay. Homeless. Do we have online? So, we have Tracy online. Yeah. Hello. Looks like this was a good day for me to not do any hacking and wait for the goodies. But yeah, tomorrow I'll be back at it. And coming in again pretty much as a newbie with friends or friend. So, yeah, be seeing what we can get to tomorrow. Okay. Any other newbies out there, fancy joining, please give me a shout. Okay. So, actually, if you have many newbies joining, tomorrow we can have a session in order to help this initial enablement. So, for example, on the morning or on the evening, we can show how to run everything and answer questions. Yeah. That would be great. Okay. I'll get it scheduled. I'll just announce it later. And not just exploratory testing, but if we could see what's reasonable to set up in the dev environment as well, that would be great. Okay. Actually, we can even do it today after the status update, if you want. So, we have time slot located, so why not? Okay. Okay. So, who else? Lime? Yeah. I don't have anything to report aside from just working on a document yesterday. And yeah, this is really impressive though, seeing what everyone's got done. I already got that in there. Yeah. Okay. Thanks for your help anyway. Yeah. Yeah. And follow the logistics. So, I guess that's it. We also have Alex on the call. Alex, would you like to say something? I'm just here for the first time, trying to see what I can help with. I don't have a ton of time, but I'd like to be involved. So, I'll see what's on the the app. I can see what I can help with. Okay. Thank you. So, I guess that's it with the update. Did I miss anyone? Let's see. Not anyone who's on the call. No. Okay. Yeah. And I think, yeah, Daniels also works on some exploratory testing bits. He raised one of the issues. But yeah, he's also busy with other stuff. So, he hopes that he will contribute more later. But yeah, we have seen cups on mornings. So, likely tomorrow, we will have an official cup for people hugging on morning as well. So, then, yeah, we'll have more information there. Okay. So, I guess that's it with the status update. So, 15 minutes. Yeah. Right on. Okay. Tomorrow, we'll have a longer meeting, because we'll have some people from Oracle coming in, right? Yeah, right. So, yeah, tomorrow at 4pm UTC, we will have some really, really hardcore JVC contributors coming. So, if you have any questions about Jenkins, Java 10, Java 11 integrations, multi-release jars or whatever, feel free to come and I've started the section in the document. Second, I'll share my screen again. Okay. So, yeah, in the bottom, there is a section of questions to Java EC leads. So, whatever you have in mind, just put it there and we will organize the agenda. Cool. I'd ask them a lot of questions about garbage collection changes. Okay. Yeah, I also have a bunch of questions. Yeah, I will update the list, but anybody else is also welcome to just set them and we will moderate the discussion, so we will try to cover as many topics as possible. Cool. Okay. Yeah. So, I guess that's it. So, Tracy asked about some introductions for newbies. How would we organize it? We can do it now, maybe in broadcast mode, maybe after the broadcast, or we can do it later tomorrow with some announcement. Yeah, if you're happy to kind of walk through what we do and then tomorrow I'd like to try and I've got someone else coming in who probably like to sort of have our own go at it and then just do troubleshooting. If that works, that might be good. So, Tracy, do you want to do it on the recorded video here, or do you want to do it separately? Well, if Oleg could run through something now, is that work? Or should we get it up for tomorrow? I can do a recorded video tomorrow as well. You can eat it. Whichever you prefer. Whatever works. I can do it now and then I can do it tomorrow as well. Now, let's do it now. Yes, now. Execute decision now. Yeah. This is just a status update. So, if anybody has any questions, just hoping, join the sling and ask questions. I guess that the floor is yours, Tracy. So, if you have any particular questions, let's start from them or we can just do introductory thing. Yes. Well, I guess just from a developer setup, the first question is what, like how componentize is the code base? So, do I have to check out everything if I want to do things on core or do I just have a specific plug-in? Like, how little can I have if I just want to focus on one area? Okay. So, if you want to develop the stuff, we have some guidelines. Yeah. We have a page on Jenkins IO or called the Jenkins IO party. So, it's a kind of entry point for all new contributors. And, yeah, there are guidelines linked for plugins for the core. It may take a while to find them. But, yeah, for example, there is beginner's guide for contributing, complete guide how to host plugins, tutorial how to get started to this plugin development. So, if you're interested to start working on a plugin, then it's the guide you should start from. So, this guide describes how to set up the entire environment, including ID, how to configure main settings in order to run our builds. And, yeah, it's one of the foundation documents. Okay. And I could use this if I was checking out an existing plugin and want to try it with Java 10 as well. Exactly. By the way. But you build it on Java 9, right? Yeah. On Java 8. 8, excuse me. Yep. So, if you want to just try out the plugin, then you can just start whatever Jenkins instance and download this plugin. But, yeah, if you want to develop the plugin, then yes, it will be a guideline for you. Okay. And what about, like, developing Jenkins Core? How, what's the setup for that starting point? Okay. So, for Jenkins Core, I would say that, yeah, you go to Jenkins, Jenkins. So, we have several branches there. So, this is a master branch, but we also have Java 10 branch and Java 11, actually. They're pretty similar except in Docker packaging. But you go to the branch and there are several guidelines. One is Contributing MD and another one is Building TXT. Contributing describes the process, how to get started, what you need to set up, and how to build the stuff locally. And also how to test it. So, these guidelines are still designed for Java 8. So, if you try to run, sorry, to build Jenkins on Java 10, likely you will experience some issues. And if I understand some correctly, he's going to work on tooling mostly tomorrow. Today. Today. But, yeah, the current stated that you will likely be able to build on Java 9 plus. But on Java 8, you can build the stuff. And then you can debug on Java 10 if needed. And, yeah, how to do that? There are two ways. One of the ways is to just build Warfile. So, when you build this maybe clean package, I'm not sure what is that. Okay, doesn't really matter. I'll show the Jenkins Core Represitorium. Is the phone big enough? Yeah, it looks good. Okay, Jenkins Core Jenkins. So, this is the structure of the Represitorium. You may see that there are several directories like Core Warfile. And effectively, this is the structure you get after the build. So, if you want to see the development package, once you run the build here, you will have War and see the target. There is a Jenkins Warfile. Well, effectively, it's what you need to run. And then you need to run on Java 10. So, you can just use Jenkins tooling for that. And instead of that, what I did, I've created a simple script. So, I have documents, Jenkins, test, Java 10. So, here I have Jenkins Warfile. Actually, I just copied it from here and I can just specify the pass. It doesn't matter. And the only thing I have here, so, there is some obsolete stuff. But, yeah, I have run as each script. And this run as each script just sets Java home to JDK 10. And then I specify Jenkins home to point to the directory where I want to evaluate the stuff. Actually, it's a Jenkins home work. Then I say Java home being Java. And then I have all options to start up. You can find this option in our guidelines for running Jenkins. So, Jenkins IO block. Actually, what I've done there is I just followed the guidelines provided here. So, not a Docker run, but running without Docker. So, this is a command line for Java 10. This is for Java 11. And it's exactly what I did in this repository. The only addition that I also added some lazy debug misalization so that I can start Jenkins with debug flags and then I can attach my debugger to it so that I can evaluate things if something breaks. But it's also a standard Java thing. So, you run a Warfile, but it's self-packaged. And if you're familiar with Java flow debugging, it's actually pretty similar. So, if I do that, I can build it, debug it, make my change. Is there also kind of a minimal test suite I should run locally before submitting a PR? No, because we have continuous integration. So, yeah, actually, we have three types of testing. So, you can build Jenkins with several flags. Just a second. Okay. So, one of the options is to run these default settings. So, we would say clean package. Then you run these. It takes errors. On my machine, running full test suite is something like one hour. You can say skip tests. In such case, you will skip all tests. And, yeah, obviously, it's one of the options you can try if you just wanted to spot check the thing. Because if you spot check the thing, sorry, we have continuous integration. So, it means that even if you do it in such mode, then everything is fine because we have testing established. So, it's perfectly fine for local development. But if you want to do some testing, for example, if you want to evaluate a particular test, you can just use standard genuine things like test something like full bar class or something like that. And it will also work. And the last thing, if you want to run some spot checks, we have two profiles. One is light test. So, it runs only unit tests. So, it spot checks your instance, but it doesn't run integration tests, which take the most of the time. So, with the light tests, you can do the genuine score with maybe three or four minutes. And another option is smoke test. Smoke test is now something like six minutes because it includes some integration tests. Well, this option is available only for Java 10 or Java 11 branches because it's what we built now in our CI system to speed up delivery of patches. Yeah, I think that sounds good. The general strategy will be find some of the new bugs, work out whether the fix is likely in core or plug-in and then set up a dev environment for that. Try and get to, particularly dealing with warnings, find the code, make the upgrades if you can build, and then submit the pull request. So, have any other suggestions? That's the plan? Yeah, it's the best plan. So, if you want to relate to the things, then you can press it with such way. If you just want to discover issues, but you don't have time for fixing them, then you can use Docker images we offer. So, for example, the one I've already started for BloorSim, which bundles maybe 100 or so plugins now. So, for smoke testing and for exploratory testing, it should be good enough for the beginning. But if you want to do development, then it's better to set up local environment. Great. Yeah, no, that's everything I need to get started. Okay. So, any other questions? Okay. Okay. That's it. All right. See you guys on chat. Okay. Thanks, everybody. Thank you. Yeah. And good luck with testing and development. I'm stopping the broadcast and see you tomorrow. All right. Okay.