 Well, thank you all for coming and there's plenty of room at the front. So don't be shy But yeah, be whatever you want to be and Hoping that you could find the session room easy It took me a while to get to this room a few tries But yeah, eventually made it they also told me to stay in this town Which I usually find it difficult because I tend to move around if you see that I'm there The microphone is here. So just Tell me to come back here. Okay, and So the session is about the API dot Drupal dot org. I Assume that most of you have used it and maybe that's why you are here And you know what the site is about but if you don't then you will hopefully get a good understanding of What the site does and basically the Current I didn't want to say this war in the conference But the current website API Drupal dot org is on Drupal 7 and we Migrated it to Drupal 10. I want to tell you a little bit about the urn it that went and in the migration because It was a bit different from the normal website Drupal website that you may have built and I found it a really good and interesting project to talk about So yeah, I hope that you you like this session and My name is Fran I work for the Drupal Association as web developer You can find me as FJ Garling in the community Slack and LinkedIn Gmail and that's about it. I'm not in many social networks And if you have any question at any point about this project or about any of the other projects I'm involving don't hesitate to contact me and Today I'm gonna be obviously explaining very briefly what the API site is about We're gonna talk whether to Drupal or not to Drupal Because yeah that question kind of came by at some point We will talk a little bit about the node module. I think this was an interesting part of the of the site We will obviously talk migrations. We migrated aside to by 7 to 2 by 10 We talk about cues we talk a little bit about the inference infrastructure around the site We will discuss a little bit custom versus countries and And then at the end I will also show you how to spin up your own API parsers I mean you can do that in a few seconds in your own computer and you will get a kind of 99% copy of the API website On your local machine and you can just play with it break it as much as you want and just investigate And then obviously at the end we do some Q&A if there are any questions Cool, so and as a beginning the API dot Drupal org site all it does It just passes the source code in this case Drupal core by could be any other module and from that code it generates a website So the content will be exactly the same set that it will look a bit nicer It will hopefully be responsive. We can check it from the phone. We don't need to be navigating code obviously most of the newer Text editors allow us to jump into functions and these kind of things But think that the API dot Drupal org site was created around 10 years ago None of those fancy bells and whistles were built into text editors So it was actually very useful and continues to be it was creating on Drupal 7. So we want it need it Something new obviously Drupal 7 is coming out of sport So we wanted to start migrating the site and as I said as an example You can see the code of this file. We can see it's class HTML. It's got some static static Properties some comments around it and all the API Site does is transform that into an HTML site. We can see class HTML We can see the properties down there. We can see some of the descriptions Yeah, the hierarchy and of the class a bit extends all these sort of things So that's about it for the introduction. Was there anybody that has never used API dot Drupal org before? So good that means I don't need to expand any farther on it and One of the first points that I mentioned before was whether to Drupal or not to Drupal and This question was actually a really good one. This was my very first project when I joined the Drupal Association They told me we want to rebate the API website and as I was kind of Getting into it at some point is I do we even need Drupal because there are some tools Out there that might be able to do the job They might not we will just find out in a second But we actually questioned that ourselves obviously we all love Drupal. We want to do Drupal as much as possible But if Drupal is not fit for the job then why use it? so You can see the result of the investigation in that repo basically, I evaluated a series of Tools that are out there if you just Google Code parsers so that we gonna that will likely be the first result PHP documenter Then there was a PHP docs and then there was dock to in the case of dock to I found as well That is it was used by Laravel So these tools were the first one the first things that I check because it's a if there is a tool that is already doing Exactly what we want. Why are we going to go through the hassle of building a big Drupal 10 site maintaining it? Etc. Etc. We could just maybe use one of those tools When I was testing those tools I needed to also test on different projects because obviously we cannot compare my module to Drupal core my module is 10 files Drupal core is way more than 10 files So I actually tested on Drupal core. That was our main goal But I also tested for example on the webform module is a decently sized Module and I also tested on the gene theme is a kind of a smaller Source code So these are the repos that I that I tested with and these are the tools and again If you go to that github report you can see all the results and you can see how to launch launch all the tools so Which were the pros of using those tools? I mean first of all they were already built. I didn't need to write a single line of code It would have been a great wing. I first project for the DA done in less than a day and But also there were some other good things one of them is that it was Scriptable so we could just run a command and say use this tool with this project generate a site boom So that was a great great thing to have They were very easy to use I mean obviously all of them requires some learning at the beginning see the parameters That they need and all these kind of things but they were relatively easy to use But there were some issues and Looking all the time there and I have it in here. Sorry about that. I will keep looking at you And one of the main issues was that there was no paginated Output that can seem silly But again, if we look in my module, maybe even in Jim module that could be okay Maybe a bit of a scrolling but if you look now in the web for module You will be scrolling for a while And I don't want to tell you what could happen with Drupal core. I'm actually going to do it now Because it fails on large code bases like I was testing with Jim everything good even web form Everything good tested with core. It could just blow out. It wouldn't work. It would fail nine out of ten times And the one out of ten that would work it would generate massive massive Files so all these tools what they basically do is they generate HTML with CSS and Javascript and that Javascript is what provides the kind of a live functionality life search clicking around these kind of things So they were actually parsing the code and they were generating a massive Javascript web file I'm in the case of core One of those times that it did work. It was more than 50 megabytes file as you can imagine Sending that to each and every one of your computers. It would take a while to load Okay, so We can start seeing now where we're going to What I told the team at the beginning is I maybe this is actually good for country Maybe we should and discarded. I mean we are using good laugh And that means that we could use good laugh pages. It is very thing It is already working. We could all use good laugh pages for our modules Also, we could use good laugh CI which if you are not using your modules You could already and that means that with good laugh CI We could actually automate remember what I said at the beginning they were scriptable So I could actually create a job in good laugh CI that run that tool again the module and it produces a Website that I can put on good laugh page. So to me they were very very valid tools to use for country But it was not good for core and that was our main use case that was our goal So they buried it at the end was easy use Drupal Okay, and it took me some time to do that investigation But I think it was worth because also it allows us to identify They actually needs of what we need it like these tools do the job, but they fail here here and here So that means that I need to focus on those fails when I'm reading the Drupal site Okay, we're now using Drupal. That's good. We're all happy happy Drupal developers I got to do a much bigger project. Um, yeah, it actually made me happy. I started to work on it And now this was a very interesting part of starting to be the project. I was beating it and Yeah before that I'm gonna read you Directly a few quotes found in Drupal.org one of them is all content on a Drupal website is stored and treated as nodes You can see it on that link The node module allows content to be submitted to the site and displayed on the pages. You can find it on that link Comments are not stored as nodes, but I always Connected to one you can find that there Okay, let's continue our goal is to generate pages from code, but If you want to edit the page You need to edit the underlying code If you want to delete a page, you need to delete the underlying code So we can't really edit pages. We can't delete them. There's no author. There's not dated time So our our our pages will be notes This was a kind of aha woman at some point So I'm gonna ask you a question raise of hand if you have used the node module to build your Drupal site Good Now raise it if you have not Used the node module to build your Drupal site We have three people including me that's oh wow five people that's four more people that I was expecting And that is good. I did this presentation a few weeks ago in Drupal camp Spain and There was one other person. I mean the room was smaller. So kind of perspective But yeah, you can see that is a vast minority compared to the first question You told me that you have not used Did you try to uninstall it because that that other person on the camp that told me that didn't use it The node module was actually enabled, but they did not uninstall it did any of you that raise your hand actually uninstall the node module Okay, that's good. Yeah, that that qualifies us as it has not used in it So that is good. I mean you saw that from those five people that didn't use Three actually do not use it. I left it enabled. Okay So what can we use? I mean, we are really questioning nodes in here What can we use instead? So in this case after you met to pull entities? I'm taking more quotes from the from the Drupal.org site Entities this was one of the most important changes of Drupal 7. This is not new to Drupal 8. It was already and Created for Drupal 7 and it really opened a huge window of possibilities entity types in Drupal core like a lot of Drupal core was actually moved to entities. We're talking of nodes, but we're also talking of comments We're talking about users. We're talking about taxonomies. We're talking about Many of the things that were moved into entities You can also you can also build new kinds of entities where the options are both don't suit your needs Don't suit your needs and Why wouldn't I use nodes? Not only the things that I mentioned before I cannot edit the page So I don't really need it. But also there is a whole set of hooks that run before after I did pre-save post All these kind of things. So it's not just really What the UI or kind of the needs like the editing the deleting is also the logic that goes before and after Which may or may not affect performance. Okay, I don't know if you've ever seen the Drupal database But there is a lot of tables that are created for every single field that you create So when you start making joints on those tables, then we're starting to hit performance issues if the site grows a little bit So this comes to this last quote entity API allows for more lightweight and flexible solutions So as I said, this was really my mom and I was so happy That I could do it is a I don't really need the node module at all So I'm just going to uninstall it and that's what I did What are we using on the new version of the site? We're just using entities as I mentioned. We are defining all the tables in there We're controlling all the functionality within the within the entities note that the old site did use a note For every single copy for every single file. There was a matching note so that the comments could be attached to that note Okay, so the new site does not use the node module and that was so cool as a paper and Okay, but how did Drupal take it? I mean we're talking the node module that was probably the very first I mean note one that's the home page of every single Drupal site Any hard feelings is kind of my Favorite child my favorite module. So I just heard you really want to go without it well Road wasn't easy, but That was the first issue that I found do not check node access If the node module is not installed So there was one module that was actually checking the node access modules that was making joints to the node tables even if that core module Was not including node as a dependency yet. It was joining tables with node. So Everything just was just breaking. So that was the issue. I mean as you know, sometimes with core issues It may take a day or a week or a month or longer and a slightly Growing conversation. Okay, so you can follow that that big conversation let eventually to This or the issue impossible to reply to comments That was the module that was actually having a dependency a hidden dependency on node the comments module So we could make comments, but we could not reply to comments every time that you would reply to a comment What screen of death or broken? So that first issue eventually Move to that other issue which had already a long conversation before and had a long conversation after But eventually after I mean my very first part in the in the top more in the top issue was if the node module is not enabled Do not make all these joins on the node module close brackets But then it's like we cannot just do that and I mean that that kind of solve 50% of the equation. Obviously if the node module is not enabled, it doesn't make sense to make the joins But those joins were there for a reason and the reason was scalability and Security is okay. You are telling me that now comments can be linked to entities Let's do those same checks for entities. So if you start following the conversations It all goes around that there was a lot of back and forth. It's okay We kind of want to have the same information That wasn't easy to reach. It was a lot of kind of hooks and functions in voice But we eventually got got it in there But finally that was also another issue. This took a bit shorter and But yeah, it was the failing in some edge cases. We were able to fix it Happy to say that those three issues are all fixed now Those are the three that I discovered while working on the site. It may be I mean Drupal core Sizes is just cute. So it may be some other hidden dependencies somewhere. I just run into those But it's super happy. I mean it's Yeah, I don't know if that was maybe the one of the first core issues that I was working in and yeah It was a it was a thrill to sit and commit it So yeah, this kind of ends the conversation about the node module as I said I found it to be a very and Cool use case in which I was meeting a big big site without the node module And and this speaks a lot to the power of truth but The next question was actually Migrations and again, I'm gonna go back to kind of the previous slide I want to edit the code a page. I need to edit the file. I want to delete a file I need to be I want to delete a page. I need to delete the file So I think you kind of are starting to follow what I'm trying to say So the node module is not needed, but surely we need migrations, right? We want it. We need a one-to-one page party and So before continuing the conversation and just gonna take a random URL of one class and A bit long and the reason for it is just I'm just going to deconstruct it So obviously we have the site URL API to drop a dog Then the API prefix that just comes from the API module Then we have the word Drupal and that is just because we are viewing the project Drupal If we were parsing the web for module, it would be web form Then we have a path and because it's a URL. We are just encoding the forward flashes into percentage 21 So a big part of the of the URL is is that then we have class That's the element that we are viewing That's now the name html in this case the name of the class that we are viewing and finally we have the Drupal version that we are viewing the element for so That kind of means I mean if you see that URL it all came from information about The file itself the the branch of Drupal that I'm parsing So we can potentially regenerate the whole page with the same path And here is what I wanted to tell you That's what we've done, but there were no need whatsoever for migrations for Drupal migrations in the in that way So we are not using migrations in there because we can actually get a one-to-one page parity Just by regenerating reparsing and regenerating the site But what about comments, I mean this is a kind of Within-site controversy, but it's opinionated topic as you know many of you if you've been using the site for many years we allow comments on the API side and Comments were attached per branch So for example comments made them for the branch 8.4 did not go to 8.5 Even if it was in the same class in the same function in the same property in the same everything if it was on 8.4 There was no visit visibility whatsoever in any of the other branches And but then at some point, I mean as you know we have Drupal 7x or 6x that was the same branch forever We started to use Sember versioning and then we have 8.1 8.2 8.3 4 5 6 or the way until 9 I don't know if you saw the navigation at some point on the side But it was a huge set of tabs purely for 8 point whatever And then Drupal 9 came in. It's okay. Are we going to have 20 30 tabs? We really gotta go some gonna do something about this So we eventually decided to clean up the unsupported branches And only show the supported ones and by cleanup. I mean delete And if I'm deleting the 8.4 branch, I am deleted in 8.4 related comments We did try a first I agree. I mean with we kind of We did not delete we store the comments in case there was some fallback from the community And we actually found out that there was no fallback whatsoever. The reason for this is because 98% of the comments in the API Drupal.org site are against the branch. Can you guess? 7 98% of the comments were against the 7x branch 2% and not exaggerating where in all the other branches. So that's why we decided to clean up. See what happened That was a good test. Okay, so we are only showing now the Supported ones we used to pass us way even the vendor folder, but again parsing vendor parsing symphony symphony Has its own documentation. So why are we going to do this if they are really doing it and they are probably even doing it better in that sense So we slashed out as well the vendor folder And with the comments we had some options I mean we can migrate comments if the URL match remember that there was a one-to-one page party We are trying to get that D7 and D10 site So for the 7x comments, we could actually migrate them and that is already implemented in Site module called API Drupal.org So we just XML export from from the view of comments in Drupal 7 and we just fit that file And we can import them that functionality is there. So if we want to migrate comments We would be able to Another possibility was why don't we just drop comments all together and Improve the top blocks if I need a comment to know how to use a function That might mean that the documentation of that function is not good enough to show me how to use the function You know what I mean. So why don't we just Stop the possibility of comments and if somebody finds it difficult conversion, okay, then create an issue Unless improve the code documentation, which is we will benefit everybody in the long run Another possibility was merging comments between branches remember what I said 8.5 8.4 But that had a lot of problems like threads timeline Relevancy like if a comment was made at the same time for different branches does that go on top below? So that was discarded pretty quick and And then we found out that the latest Drupal version received less and less and less comments Remember we were talking about less than 5% of comments in the whole 8.x and 9.0 something at the time branches so Obviously is not because the site is not live The decision has not been taken has not been taken but comments might be dropped Because we think that that's kind of the most sensible But again, don't don't get word on that don't start with in the leading comments or it We have the functionality in there. It is beating. So if we want to migrate the 7.0 next comments We will do it. So the functionality is there, but we are really thinking about Dropping them, but again, I mean it's decision-state pending Okay, so moving on to the next Part of the site that I wanted to talk. So this is about and cues And so basically with the module we parse all the files of the project That is relatively quick even up for Drupal core. I don't know if it was 15 to 20,000 files It wouldn't take that long. So and we can even parse technically all the files on a cron call That's all right by parse. I mean read the file Dump that somewhere in the database. That's about the extent of the of the of the parsing But then once we have that information a file can contain a lot of information So from the information of file we have a kind of file entity We could have a class entity or an interface or a function whatever the file is We have the methods within that class. We have the constant. We have the properties We have the namespace that that that file belongs to we have in heritane inheritance information because we are extending a class. So as you can see From a file I can obtain a lot of information and that's kind of where kind of Hues came into place because all the above is really time-consuming parsing the file easy Extracting all the information for each individual file not so quick and easy So the option where we cron or cues, but again, it's really time-consuming So what we're doing is the parsing is happening on cron because we tested even with core I mean core was our edge case if he can handle core it can handle pretty much anything else and Chrome was good on cron so just do the initial parsing there But then for everything else if we want to extract all that information if we want to link it together inheritance and all that Doing it through cron it just take a few hours Which yeah was not an option in this case So we went through the option of cues Because actually from those few thousands of files We would actually get a lot of many other thousands of tasks to evaluate and convert to different objects If cron if cron was used it could take hours for big repositories And the good thing is that cues by default if you just define a cue worker It will be hook up to cron because it's got an annotation But if you remove that one line of code you can make it independent So you can make cron run independent from cues and that's exactly what we did So we started we created a series of cues We are running those cues every x minutes, but never in parallel The reason why we are not running cues in parallel is because if we are say that we are calculating the inheritance and dependencies We want to actually parse all the information and have all the classes parts so that we can start Connecting them together if we were to run them in parallel we might start Connecting before they have been parsed. So it is sequential, but it is okay It's that's kind of a process that is running like all the time It's running every I think five minutes set up now, but yeah, we can just take it I will take hours, but it's okay. It's okay because I mean how often does the child the code changes? It doesn't once we have parsed it won't change that much until the newer Minor version Because of the time that it takes we actually try to prioritize memory consumption Whether you want it or not whether you ask Drupal or not Drupal will cash in memory and by default Every entity that you load. So if you do entity load ID it will cash it in memory even if you are not telling Drupal to cash it So what happens when you run a cron of thousands and thousands of thousands of job? So the memory at the beginning goes well. I just start to grow start to grow start to grow start to grow Most of the modules web form gene They will be okay. They will come to a point which that's totally okay Even if my local machine core was okay. I mean by okay I mean the job finish at some point, but then we Deployed to one of our testing environments. I was just never finishing. It was just crashing crashing all the time So in the case of chrome we realized that the memory consumption was getting all the way up to nearly four gigabytes of run memory ice a lot So we needed to do something about it. It took a little bit of investigation knowing that Drupal by default Does it whether you want it or not? So after that basically the fix in our case after each test We just clear the caches that were built during that task because it's obviously when we're talking about inheritance We are connecting things but during all the parsing that we do at the beginning They are pretty much independent entities So we don't need to have them loaded in memory and what we did when we are reading relationships. We are just trying to Cash as much as possible without abusing once we did that fix We never went over a hundred necks of memory. I mean if it takes hours, that's totally okay So that was an interesting case I put this session I realize that the sessions that I'm referencing in my slides they have already happened This happened this morning, but maybe you can see the the recording once is available. It's about huge I'm sure that there is a bit of overlap with the things that we've talked about and I'm sure that they Go much more in depth than the night just on here Moving on to the infrastructure side of things So the project the new project that we are trying to be at the association We're all using Kubernetes for the new servers at the event site that we've been always visiting That's already on Drupal 10 and that's on Kubernetes and this project is the same and Yeah, just mention this and What we use is Helm charts. I don't know if you are familiar with it. I know very little about Kubernetes But I know Jamu and basically this Helm chart. They are Jamu files which contain Not all the configuration in this case the overwrite that we want to do which are specific. So there is a kind of Common repository for all the D10 sites and then each individual site will have their overwrite in this case is the Chrome jobs the queue definitions For example the deployment steps that we want to do every time that I deploy the site so all of that is the is defined via Helm charts and Yeah, backups, etc. All these kind of things and in this case with Bait it so that is fully automated. So if we just push certain branch, it will just deploy automatically in this case They've stage and prod branches. So we just need to push there and the code will just go there It will run trust deploy. It will do all the things that that needs to be done And again, this has happened already. It happened a few hours ago, but some of you were there Although in this case our infra partners could then come to the to the conference But yeah, in there we talk a little bit about the infrastructure related to the Drupal 10 sites There is actually no recording of this because it was in a both room So sorry about that. But again, if you need details reach out to me, I'm happy to expand on it and moving to the next Question is custom or contrary. So one could argue that This module was really designed to run the API to Drupal or And I could be a custom module from the site But in reality if we look at it, I mean at the very beginning I was presenting generic tools that would parse the code and generate a website That is exactly what this module does So even if it's called API and even if we use it heavily for the API website at the end of the day It is a generic tool And we can parse any PHP code base. I was mentioning core web form gym theme But I could mention not about I could mention symphony. I could mention any in this case PHP Related code base So it can actually be made a product as all the tools that we mentioned But it just happened to be built in Drupal. So in this case contrived was the way to go. The module is fully available Not the site But just wait until two or three more clicks And you will be fine with that. So the new API dot Drupal.org site has no custom modules in it It uses API admin to about just because I want to But it's not really needy path also facets redirect search API to to give some search functionalities We use as a theme by default blue cheese the two point two point X This was amazing because it was done by the community blue cheese is the kind of typical thing that you find on our Drupal website It was Drupal 7 community took it over and made the two point X version so thanks for that and And then obviously trust and some commands and this is what I said that you should be okay because really I mean And this 98% is even too late. It is ninety nine point nine percent is the API module Zero point one percent is site bidding and proof of that is the last part of the slides where I'm gonna show you How to create your own API site and you are gonna get it in three clicks and it works So this is precisely the section that I wanted to talk if you want to create your own parser site You can easily do it. I mean, I realized that I mean when I'm working on projects I like to destroy and redo many times over the same thing because that kind of teach you how to put it in a new environment Eventually you kind of scripted a little bit and then I realized I was so generic I had it at the beginning on the site But then I thought why don't I move that script to the module and just make it available to people in case they want to Try they want to play with it and that was the case. I mean it was so Generic that you can find that in the in the demo folder within the project It has a written file on it. I just got a script SH file in it and you can run locally and you will have out of the box a Brand-new through by 10 site on the latest version with the latest version of the API site with three modules set up on parts And in this case it uses the depth to launch the site But you can replace the depth for land or for whichever I mean if you open the file It's literally 15 commands and they're all prefixed with the depth So if you are using any other tool, you can just happily replace it and it will do the job equally And what would the result of running that script be? So as you can see Drupal out of the box or libero and we will get three projects small Medium and my favorite one for your browser And and then you can see that you can navigate through it You can search you can get all the functionality that we are used we can see all the tabs To change between the different branches of a project and you can see that this all the functionality that we are so used to In api.drupal.org in your own local copy within seconds and then we can see I mean all this I mean some of the things are massive and they don't look to write because it's all libero by default We wouldn't yeah, I mean on the final version of the site. We're not gonna put the title so big But you can see that everything is working. I mean like everything is just a link as well You can see all the links in there that you can you have links to the fight to the different functions to the services So everything that you see today on the api.drupal.org you will see in your local copy within a few seconds I don't know how I'm running with time Yeah, that's good I mean if you want if any of one if any of you want me to show you the demo in my machine We can just run it in a few seconds or otherwise. I invite you to do it And I'm happy to point you to anything that you that you need But yeah, I want to leave some time for the Q&A but before that I'm gonna ask myself a few a few questions And I'm gonna save you the time Is it life already? No, it's not I'm sorry to hear that I'm in for myself. I'm for you that is not it's not fully life yet Everything is built. Everything is working and everything is just sitting on a shelf in there just waiting for somebody to Take it and put it live But as you know, I mean the DEA team we are a relatively small team And I always say the same when people tell me when are we going to have this site? It's a migration or project browser employing or the API side is okay These are our tasks Just put them in order of priority And we will need to do the top one and that's really what's holding this up I mean this project has been built for more than a year But I mean I was talking about it to some of you think at the at the come The only reason why we have not prioritized this is because the second that we make it live That means that is one more project that we need to maintain because it's life. Okay, whereas Yeah, I'm also there are other competing priorities in this case As you know some of the key initiatives automatic updates that needs the tough and rugged Framework then there is also a project browser and there are many things that are sitting on top of this project Which I mean I'm fine Once you understand the context of the size of the team then is that okay? Maybe more people will benefit from automatic updates and project browser than a new updated version of the API website We have a kind of running version of it. So it's not super high priority But it's not life yet, but you can test it in there In fact every time that somebody opens an issue against the API module. I go and I test it on that URL And I see if it's working or not And if it's working inside the new version of the site is working already So this is postponed and the reason why it does not work on the older version of the site Is because it's running on PHP 5.6 is running on a new version of the library that I'm about to mention in a bit And some of the new Features available in PHP They didn't even exist when the Drupal 7 site and libraries were built So it just doesn't know what to do with them. They are not linked just because it doesn't know how to parse then how to Yeah expand them And so yeah, this leads me so how does the parsing happen? So we are let we are not doing the parsing ourselves There is a very very cool tool out there that does the heavy lifting for us is this library And this is what I mentioned the current site is using an older version of that library that does not support newer PHP features But right now we are using the latest version of that library Which means that it supports the the newer versions of the newer features of PHP? And so that's the library that we use And then how does it work? So we tried to make it the old site was a bit cumbersome You needed to upload a folder to the server and then you needed to fill up a massive UI Form telling the location of the folder and branches information on all these kind of things When I started to work on that I saw that it was taking me long time to do every single time And as I told you before I like destroying and redoing it was very time-consuming We are developers if only we could do something that would automate the thing for us. That's what I did I started as a drafts command and because I did it as a drafts command thing I started and I did a UI abstraction as well as quick wizard and all you need to do is put the repo URL And I mean you can still put the folder if you want to but all you need to do is put the repo URL Click the button or hit the command and you're done And that's actually what I'm running in that script that I mentioned before Then we run Chrome to scan all available files. This was the first step Then we run the queues so when we are generating the site locally That's the step that takes a bit longer because the examples module actually is rather long Especially in the last branch the 4.x I think And then when we are running so we are creating or updating existing entities Then we are creating their relationships for that. We need to gather all the parents are children And then also I wanted to kind of say that they are new commits to the 10.1.x that have to come but there is not a minor version So I added the possibility of re-scanning the files automatically So we can just set Define time which is could be one day one week one month and after that time It would just do a git pull in the repo and it will repart everything So any new patches that have coming into the branch that didn't make it to the New or minor version will be parsed again, and then we go to three again. We run the queue So these were the pre Q&A Q&A now This was yes pretty much the content of the session. Are there any questions? Yeah, if you have a question, there's a mic over there or I have two more mics over here Okay, cool Yes, so we have a question already where Where and or who will make the final decision about whether to drop the comments? I can promise you that that's not gonna be me We will basically talk about it internally I mean as you know the thing is a new drum team learning myself Brandon So and I don't know if we will create an issue to discuss it but in any case I'm not concerned because I Build the functionality to import the comments, but I'm not I don't know who is going to make the final call We will need to discuss it and we will need to make the call and It might be that we actually Import the comments, but do not allow new comments I think we show them, but we don't allow further comments. I think that might be a good compromise and But again that decision having hasn't been taken yet live questions. Yeah Thank you You said that you when you're scanning the code you ignore the vendor folder Do you actually ignore it or do you even install it in the first place? And if you are running an install, why do you do that? Yes, so in the D7 version we are running composure installed and that's why the vendor folder comes in In the newer version we are not doing that And I also there are some parameters that can be added to Exclude some folders or say that you have some fixtures for the contains dummy code You can ignore them if you want, but yeah The main difference is that in D7 we are running composure installed and we are not doing it in a newer version And that was a deliberate decision. Thank you Any other question in that case. Thank you everybody