 Thank you for coming everyone. I'm Augustin de la Porte. I'm a general manager China for platform SH and I now live in Shenzhen. I come originally from Paris and I've been sent to Shenzhen to expand the platform SH operations in China. Before we start into the deep dive coding session I want to give you a little bit of history about where does platform SH come from originally and why we are still highly involved in the Drupal community and where we are going also in the in the future. Originally we were a company called CommerceGuys. I'm sure some of you have heard about CommerceGuys. CommerceGuys is the editor of a solution called Drupal Commerce, the Drupal suite and ecosystem for Drupal. So I joined CommerceGuys in 2011, early 2011 where we're still a very very small team. We started building Drupal Commerce and then we realized that we needed distribution for people to understand how to configure commerce because it's not easy to understand how commerce works, how it's integrated with Drupal 7. We built this solution called CommerceKickstart. I'm sure some of you have heard about CommerceKickstart. For the for the record it's still the high the most downloaded distribution on Drupal.org. So a very successful distribution. A lot of contribution came out of CommerceKickstart, the admin team. A lot of stuff came out as a contribution and it was really useful for example when you want to change the way that the Drupal installation works, when you want to customize the Drupal installation before Drupal even installs, when you want to select for example in CommerceKickstart, before you even install Drupal you select whether you want the demo store, demo content, you select whether you want a tax system or a shipping system. You have a lot of options that you can do before Drupal even installs which are going to define the way that Drupal is going to install itself. So that was very exciting to work on that on that project. We also built a solution called Commerce Marketplace which was a website which was supposed to connect the merchants who have a website, a e-commerce website, with the third-party vendors. So when you're a merchant and you have an e-commerce store you need a third-party vendor, at least a payment getaway, right, PayPal or Stripe or whatever you're using. You also need sometimes a shipping provider. You need many multiple services, analytics, marketing, multiple services and we wanted a single place for merchants using Drupal Commerce to connect with those vendors and get information about the product and subscribe to the product. So we built that solution also and in addition to that we also built a solution called Commerce Platform. Commerce Platform was a development and hosting solution for those e-commerce sites using Drupal Commerce. Here you have Ryan Zramma, the creator of UberCart and then Drupal Commerce, Bojan Zivanovich who is now the lead developer for Drupal Commerce. And you see that our marketing was not very good at that time. But basically that's where platform usage came from because it was supposed to be Drupal solution but we realized that we could support any PHP application but not only PHP, any language, any runtime actually. So we decided in 2014 to split the company and separate from Commerce Guys and get into our own route. So we called the company platform.sh and we split it from Commerce Guys and very soon in the process we started to come more than Drupal by getting for example Magento. So you guys know Magento. Magento recently launched a cloud solution called Magento Cloud, their official cloud solution. And we are the company behind. They picked us to be their official cloud solution. So we are the Magento Cloud. We operate the cloud for them. We also the cloud for Symphony called the Symphony Cloud. So another PHP framework which chose us to be their cloud solution and also Easy Publish. So Easy Publish you probably know the framework. They have launched their Easy Platform. It's a cloud solution for their project that they are selling on RB Alph. But we are behind that too. Regarding WordPress for example, it's not on that picture. But we are becoming the third largest WordPress cloud company in the world with some very big projects that are coming into our solution. Okay, maybe you don't really care about why I'm telling that. But I think it's interesting to see why we are in the Drupal world. Okay, let's jump into the coding session. Today we are going to talk about Drupal 8. View.js. It's a Node.js framework. Platform.sh a little bit and GitHub. A quick prayer for the demo gods so that they can help me to succeed in that challenge. All right, let's get started. First I'm going to create a Platform.sh project where I'm going to develop my Drupal website and my Node.js framework. How you create a project on Platform.sh? Either you go through the web UI and create your project, choose the region. Either you do what I like to do and do everything from your terminal. I hope it's fine with you. So I simply start a command called platform project create. I'm going to call it DC Singapore 2018. The platform command line interface is going to ask me on which region, those are the regions that I have access to, on which region I want to deploy. Here I'm going to choose the Australian region, which plan doesn't really matter. Number of environments, the storage, I can keep that default. Continue. So at that time the platform bot is creating my project for me on Platform.sh. That's the only thing I need to do to have a new project on Platform.sh. We offer a free trial to get you started if you want to try. So you have a free trial for a month. And in the meantime, I'm also going to get the Drupal 8 templates that you need to use if you want to deploy a Drupal 8 website on Platform.sh. So this template is a public repository on our GitHub. You have many, many templates, WordPress, Laravel, Drupal, Magento, Node, Java, anything. So you look for a template. What the template is, is really basically a configuration file called .platform.app.yaml, which defines the deployment process, build process, everything. So I'm just cloning this repository locally. OK, the platform bot is done. So let me do a git clone of that repository on my local. I can kill this one. So I've cloned the template locally. I'm going to get, to use the command line interface also to get the new project that I've just created. So I'm just getting locally my new project, Platform.sh project, and I have the template for Drupal that I've just cloned. I can go to the new repository. I'm going to move the template, the Drupal 8 template inside my repository. So I'm going to move the Drupal, no, the Platform.sh template, Drupal 8 template here, and I'm going to, yes, here, and I'm going to rename it as just Drupal. OK, to make more, no, let's check on my new repository. So that's the repository I'm ending up with. This is Singapore. I have the Drupal folder that I've just downloaded, and this is the Platform.app.yml that I have from GitHub. For more efficiency, I'm going to rename this application because Platform.sh supports multiple applications inside the same git repository. So I want to rename this application to make more sense of my project. So I'm calling that application Drupal, and I'm actually going to move those two files, which are the routes and the services, to configuration files at the root of my git repository. They are at the root of the template repository, but because I have multiple applications, I'm going to move that to the root of my git repository. So let's do that real quick. I'm moving the Platform file routes into my Platform file and also the services into my Platform repo. So let's look at how it looks now. I have those two files here, so I can remove the .platform here, and I can also remove the .git that is inside my Drupal template because I'm only going to use the Platform git repository. If we look at the routes file, you see that it just defines the URLs that your website is available, and it's served by an application. So I need the same name, and because I've called it Drupal, I need to change the name here, and I want my Drupal website to be available at api.something, something, something. So I need to say api here, HTTPS, api, something, and do the redirect to the same thing api. So I'm just telling Platform that I want to serve the Drupal application at api.something, that makes sense. All right, something else I need to do for my setup to work is to update the file called the services.yaml, which is a new concept that has been provided by Drupal 8, the services.yaml, and add what we call the course configuration. Course is the cross origin resource sharing, and it's defined which domain can send an accept request from which domain, basically. So I'm taking that from the default services.yaml and putting that into my actual services.yaml, and I need to say, do you allow a course on this domain? I'm going to say yes, I want to allow that, and you can actually define which origin or which headers are going to be accepted. In my case, I don't really care, I'm going to accept everything. This should be fine. So now that we're set up, we can check that we have everything running. Okay, I'm going to add anything to my project, git add dash dash all, git commit Drupal application, and now I'm simply going to push to the platform SH remote, and it's going to automatically, and that's when I think the 4G is going to be funky, it's going to actually deploy and configure an entire infrastructure for me for my Drupal site. Okay, so it's going to create the web server, the MySQL database that I've defined, everything that is defined in the .platform.app.yaml that you can see from here, PHP 7.2 container, MySQL database, this amount of resources, those specific volumes that I want to attach to my project, build everything with Composer, run this stuff during the deployment process, configure the NGNX this way. You see that with Drupal, you want to make sure that you don't allow any scripts on the write table volume that is attached to your project, configure the crons and whatnot. Okay, so reading this file, platform is actually read this file and deploy based on what you have on that file. In the same time, what I can do is start setting up my Vue.js application also, the same way as I did with my Drupal application. So let's go to project, platform, AU, the same repository that I was on, look for the Vue.js example, and because I've created the Vue.js example myself, we only have the Angular one, so because I've created myself, it's not been approved by the entire company and maintained properly and everything, so it's still under my own GitHub, but it will end up in the Platform.js GitHub. So Platform.js example Vue.js, let's clone this thing and we are going to call it in a repository in a folder called Vue.js, same way as we did with Drupal, and we are going to remove the Git folder from that new repository. So I'm just removing the Git information of my Vue.js application. Now we can check what Platform.js has done. You see that when you do a Git push, you're not simply outputting the Git result, but you're outputting the entire stream of actions that Platform.js is actually doing. So you see that it's actually compressing the Git data and sending that, making sure that you have, if you have sub-modules, pulling the sub-modules, validating the configuration file, building the application. So here we are using this runtime, PHP 7.2, download the packages that have been found in Composer.log file, downloading all those dependencies. You don't want to have those dependencies inside your Git repository, by the way. You want your Git repository to be as light as possible and only commit the stuff that are custom to your application. Everything that is contributed needs to remain contributed, so that when you want to update them, you simply change one line in your Composer.json file, run Composer.update, and you have everything up to date. We've also done some pre-flight checks for the security. In Platform.js, you cannot deploy an application which contains a known CVE. If Drupal has a known CVE, like critical security issue, and you want to deploy this specific code base, it's going to block the deployment. We don't allow you to deploy something that contains a known CVE. That's security. We do that for every framework that we want to maintain, because we want to make sure we guarantee the infrastructure. Confressing the application, provisioning some SSL certificates from Let's Encrypt for your development domain, deploying Drupal MySQL, providing those sorts. And now if we go to the UI, Platform.js UI, for example, we should have our project that is ready. So it's called, it's not calling PHP, it's called Drupal DC Singapore 2018. That's the project I created. I should see my commit on the application stream. From the UI, you also have the same information logs that I have in my terminal. Everything I do in the terminal, I can do that from the UI, basically. And here in the access site, you see that I have the API.master-projectidau.platform.sh. If I click on that project, I should have a ready to use Drupal environment. Of course it's not installed. I need to install that. I never installed that from here. I always use my terminal. So if we look at the environment that we have, we have the master environment. So there is a command called rush. So you can do si site-deer-default. If you want to install in the specific directory, it's not active yet. And you should work on the sound try. So if you look here, it says that the environment is inactive, which is not true. That's just because my local command line interface has not refreshed its cache. So I need to run whatever command and then it's going to refresh the cache. And the second try. You see it says that it's not active, but actually it's active, but it thinks it's not active because the cache local has not been refreshed. So I'm just installing Drupal here. As soon as Drupal is installed, I'm going to create a content type. Then I'm going to create a view to some content and a view to export the JSON information. And right after that, we're going to focus on the Node.js pass and connect the two applications together. Drupal has been installed. So now if I go back to this website and I try to refresh, it's going to tell me, oh, it's already been installed. Perfect. So we have a Drupal site. I can connect to my admin backend. And now I'm going to create the content type. No dash line. I don't want to. So I'm doing some site building. You should be familiar with because we went to a kind of a restaurant, a Singapore restaurant. So I decided to create a website to showcase some very famous local Singapore food. So that's going to be the website we're going to put in production together right now. So the content type is going to be called food. And the only thing I'm going to add because it already had a title and a body is the image field. So I'm just reusing the image field. Very simple, simple stuff. The only thing I want to do is not require the alt field because I never fill in the alt field. It's the best practice to do, but I don't follow best practice sometimes. Some content. Okay. I also thought about creating a migration class to import my content. But in the end it was too much too much trouble. So I'm just going to add a couple of content. And I've put my content here. So you might, if you're from Singapore, you might recognize some of this some of this food. I hope they are good because I want to try them all. All right. So we'll start with the high nannies. It's probably not very Singaporean. The high nannies, whatever, chicken. But whatever. Let's start with the high nannies stuff. And I don't need to fill the alternative text which is great. I'm going to add like 34 different type of food because I'm leaving tomorrow so I won't have time to try them all. But I'll try to come back and have more time. Your chili crab is really something that I wanted to try too. All right. I have the picture. Yeah. I did some googling yesterday to try to find the best Singaporean food. Any questions so far? Perfect. Either you're all sleepy. It's a symphony console application. So it's available on github. So you install it as a PHP package. Yeah. It's available on our github. So it's returned with its PHP code. Okay. Last one. Perfect. I have more but I can add them later. That's not really the point of this session and we're tied by the time. Okay. We're good. Let's create the view to promote our content. Before we create the view, something very important that I didn't do is Drupal by default contains some modules related to web services. You need to install them to enable them. Right. Those modules are going to provide for example a view export where you can export a view as a gzone for example or xml or whatever data structure that you want. So I'm creating a very simple view that I'm going to call food API and I'm not going to create a page or block or anything. It's going to be called food and on that rest export some very important thing that I really encourage you to do is to choose a format. Right. You don't want to get that random. You want to make sure that the front end guy is going to be structured the same way as you want him to be structured. So I like json. I'm going to start with json. I always like to add a filter on the content type. So we are going to only export the food and that should be pretty much it. So I save and now if I go to food I should be able to access the gzone of my content exported directly. Okay. So my Node.js application will only have to consume those information and to connect them and they will simply have to consume that information. Okay. Let's focus to the Node.js then. Let's move the Node.js that we have just cloned previously into our repository. So Vue.js we call it here. If we look at what we have, we have the .git, the .platform, a Drupal application and a Vue.js application. Let's do some updates on that Vue.js application. So Drupal we are done with Drupal for now. Vue.js application. Let's call it Vue.js. Same we call the Drupal one Drupal. So Vue.js we call that Vue.js. And for the routes we're going to take the routes from Vue.js and paste it at the root of our repository the same way as we did with Drupal and make sure that the application that is actually serving this pass, this URL, is actually the Vue.js one. I think the redirect should be better if we redirect to the front end. You don't want anybody accessing your back end. So let's redirect to the front end. And that should be it for our repository. We can remove inside the Vue.js the platform folder. And if we look at what we have added we've simply updated the routes and added a new application. Let's commit that Vue.js application. And it's going to do exactly the same thing as I did before for the for the Drupal application except that now it's not building a PHP application but it's building a Node.js application. I've defined the version 6.9. I could upgrade by the way. The build dependencies that I want I'm not even using npm. I decided to use yarn. And then it's going to execute the build hook that are defined in my platform.app.yaml which are defined here. And on the build hook I say yarn install and run npm run build. An npm run build should be defined in my package.json. I should find it here. So any technology would be supported by platform.sh but you need to tell platform.sh what to do. There is no magic. There is one configuration file that we're going to read and we're going to do everything from that from that configuration file. Let's pray one more time. Okay. In the meantime let's create a GitHub repository because as you might know we can connect any Git repository and map it to your platform.sh repository. So you don't need to push anything to platform.sh. You can keep pushing to whatever Git server you're using and simply mirror the Git repository from platform.sh. So here I need to go to my profile probably and create a new repository. So the good thing is that after this session you will be able to contribute to GitHub and maintain that website. We can add a comment section or something. All right. DC Singapore 2018. Food. Food. All right. And to connect a GitHub repository to platform.sh you need what we call what GitHub calls personal access token to make sure that platform.sh can actually push code to your repository. So that's what I'm going to do right now. It's inside settings. It has moved. It's now under developer settings. Personal access token. Generate a new token. Oh my GitHub password. Always use the password manager. And because it's a public repository I can simply grant the public repo scope to that token. I don't need anything else. It doesn't need to access any of my private repository and I need a name for that repository for that token. Okay. Let's save that token for now until we actually deploy. So deployment is complete. We now have a new URL. New route. Okay. That for our application which should be the Vue.js application. So I didn't touch anything. So it's a very brand default Vue.js application. But you see that this pass is the default pass that I have in my routes configuration file and I still have my Drupal site that is available here. Right. So api.something targets the Drupal application and my default domain targets the Vue.js application. That's my front end. So now let's dig into some coding. And because I'm very bad at JavaScript coding I actually have the snippets somewhere and I'm going to copy paste and explain the kind of specific stuff that I did. So main.js. Main.js is the entry point of your of our Vue.js application. So by default it's very simple. I'm doing two stuff here. Two interesting stuff. I'm using Vue router and Vue resource. That's very basic if you want to move to pages and do some fancy stuff. The only actual thing that I'm using which you might find weird in a Vue.js application is this piece. I'm actually loading a platform.sh viable package which is available on npm that we've written. And this package allows you to extract some information that are generated by platform.sh to get information for example about the services that are deployed. Okay. Your application here the Vue.js application might have access to some services like a database and the information the connection information to that database are exported as environment viable and you want to have your application to be able to extract those information to configure itself. That's the same for the routes. Okay. So here I'm extracting the information the platform sh information to find where is what is my domain. What is the other routes that are available for my project. In that case I have two applications. So I have the API serving Drupal the backend and I have the front end. Right. So I want my Vue.js application to find about the URL of my backend. And that's important to do that because you cannot hard code that because every time you create a new branch you get a different URL. Okay. So you want to make sure it's dynamic and the way to make that dynamic is to extract the viable and simply inject that in your application. If it's not super clear we can discuss about that a little bit later but that's seriously that's the only thing that is a little bit specific to platform sh on this on this session. Then I'm using my main components which is the app view components. Here I've seriously simply stolen some code from Twitter bootstrap which is what I'm going to use bootstrap template. So here it's a Singapore best food ever and all the food you need to try out when in Singapore. Okay. So it's nothing fancy here and you see the only thing I have is my router view which is going to load the different components that I have. It's a Vue.js concept and now in components I'm just creating a new component that is that I'm going to call home. Okay. Home and that's my components where I'm going to load the information. I'm going to consume the API and whatnot. I'm going to show you that right now. Anyone here has already worked with a Vue.js couple. Okay. So that might be a little bit weird or angular or react. Okay. The idea of those frameworks is to allow you to work with a kind of virtual DOM and manage the virtual DOM and connect HTML code with non HTML code. Like here you're injecting. The only thing I'm doing here is loading some information. So I'm actually getting data from an API pass. So the API pass in my case is a food. Right. I have the normal domain that I need to target because I've defined it from the platform message variable. So I'm just targeting the food pass and here I'm just getting the body from what I get from Drupal. So here is the piece which actually consumes the information from your Drupal backend. And then I'm injecting what I got as a result from the Drupal field. In your JSON you're exporting item.title, item.body, fieldimage.url all the information you can actually inject those directly into your templates in your frontend. So that should really be the only thing to do. If we verify that we have not done anything wrong we are going to commit that the same way. Connect backend with frontend. Kit push platform message. And something that I didn't show you before is while I deployed my application you see that there is some very interesting stuff that platform message is doing is that if you have not changed your application, if no code has changed in your application, we are not rebuilding your application at all. We get the tree id from git and we know that we have already built that application so we don't need to rebuild it. If you didn't touch anything the deployment is going to be super fast because there is nothing to change and that's what we do when you go to production. If you build an environment let's say you create a new branch you have a new environment and you build something on that environment you end up with a container and archive and when you deploy to production you click merge we don't rebuild everything for the production we just take the same built container and we clone it and then you end up in production that's why we can say that that's our motto we have stickers about that like deploy on Fridays because you can actually control exactly what happens and what will happen when we will go to production before going to production on the development environments. Every development environment is a production environment. All right so we should be good I'm sure you've seen that we have SSL certificates for every branch for every development environment that you provide that's also good to check before you're in production that you're not loading any unsecured assets for example image or libraries or anything all right we have the access token oh I think I forgot to create the to enable bootstrap yeah I'm using twitter bootstrap but I have not enable twitter bootstrap so let's do that right now I think it's great here because if you don't import the library that you're using you cannot use it that's also specific to to Vue.js so here I'm simply importing the bootstrap Vue component it's a connection between Vue.js and bootstrap I'm loading their CSS files and I'm using this bootstrap okay so now before that I think it's going to read my template but it doesn't have any connection to the CSS bootstrap CSS files or JavaScript files or anything so if I want that I need to to add them this way if we look at what we have you see that it looks ugly because bootstrap is not enabled okay but it's still a wow effect because we have the image on our front end that are loaded from our backend in a couple of minutes actually right so we are actually loading content from Drupal directly from our Vue.js application now let's connect to github and do the change with bootstrap so that's another wow effect all right so there is a command I don't know it by hurt so let's go to the platform message documentation great resource by the way if you're stuck so platform message documentation let's look for github github github github github github github okay let's find github here okay so there is one command to run to integrate with github and that's this one okay platform integration hat so name of the repository that we've just created I don't know it by hurt also that's the one Gugu's DC Singapore all right name of the repository user token that we've created oh no good okay and the project ID that you're on so that platform knows on which project to connect your github to okay a couple of questions that is going to ask because you have many ways of integrating with github maybe you want to build to deploy every branch that you're pushing maybe you want to build and deploy only the pull requests maybe you want to build the pull request with the data maybe you want to build the pull request without the data so I'm going to keep everything by default but there are many different options and ways you can actually integrate your own git repository with something else so here the integration has been done that's how you connect to github let's add the actual github remote here git push no git clone git remote add let's call it github so we have a github remote and a platform remote but we can only push to the github remote so and deploy to platform sh git remote add github and now if we do a git push github master you see that here I'm only pushing to github I don't have any information from platform sh because I'm pushing to github the way that I used to push and the reason why you want to use github is because github is a great tool for code review great tool for collaboration we are not a code review system we are a deployment qa and production system we don't want to manage your code review we don't want to manage your application you choose the tools that you're you like and you're a good at and we will manage the rest so now if I refresh this page on my github it's a public repo so you can already browse this repository if someone wants to add or read me to add with all the steps that we went through feel free to to do that all right and now yeah let's enable bootstrap and go to production and we will be almost done so git check out dash b created a new branch bootstrap what is the difference yep gith add bootstrap git commit import bootstrap git push github bootstrap I'm now pushing to a different branch all right so in github you should see that branch bootstrap and now I can automatically create a pull request I will be reviewing myself so I don't really need a pull request but this is the best practice to actually create pull requests in that case I follow the best practice no merge conflict and here you see in github oh something has happened a platform deployment is in process so you know that at the moment you have a platform environment that is deploying and when it's done either it's green or it's red but orange is really at the beginning but when it's green you have access to the url and your application with that specific pull request and when it's red that means something went wrong with the deployment so it sends you back to here and here on the platform shu i you see that an environment is being created with my commit that I push from github and it's the actual github integration that pushed that environment so here I'm actually getting a new environment for this branch with a clone of my database I have a new database the two applications are cloned it's completely separated environments but they are an exact copy that's what's important and you can have as many pull requests as many branches as you want or need every developer in your team can have its own environment every ticket can have its own environment you organize and structure your environments the way you want or like and as soon as we are able to test that environment we can merge it to production and then go to production with the environment oh yeah to go to production we need a domain good thing is that I have a domain ready for that so we'll use that what's the pass of our application so that's our frontend master something so let's add a domain here I'm using name name chip so DNS add a new record so I have a domain called jump into the cloud jump into the dot cloud and that's the the one that that I will be using so I'm adding a CNM record to this frontend and here I can give it a prefix should it be like food the jump into the cloud yeah or DC Singapore so that I can redo this session later yeah all right DC Singapore 2018 uh no food all right and the important thing is that because your domain is going to target two completely separate applications you also need a CNAME for the API to serve the the Drupal pass okay so you need actually two CNAME in that case and the CNAME that I'm targeting is API.food and here it's targeting API.master.something something something is it uh yeah API.master or something something something how are we okay oh no I need a less than automatic because it's going to take forever and we only have 10 minutes left so probably less than uh all right we're good um so let's verify that our bootstrap frontend works if it looks good we go to production if it doesn't we can uh we have five minutes to do some tweaking or fine tuning or whatever command wi-fi I need you don't let me down okay let's try to merge it so here I can either merge from from the cli or git or directly from here I'm going to merge it from here oh no I should have used github to merge that would have been smarter because next time I'm going to use github and merge the github for request it's going to be built because github takes the authority on the on the thing yeah that was a bad move all right um any question for now yep so it will redeploy on platform side but the next time you deploy on github it will override what you have on platform because the authority repository is the github one yes yes you can still push only to platform but next time it's going to override the thing yeah so that's what you just did you just merged the repos on platform instead of merging the ones in exactly so if you merge now and get redeployed exactly but it's the same commit so it's it's going to redeploy the same thing but it override the thing to push what force pushed yeah no but it takes the authority so it doesn't care about what's already in platform the authority is github so now if if we do that now um like merge this for request pulled from you see it's yes exactly exactly then you have to close the field yeah exactly so you see it say this error says that I cannot get the import bootstrap environment because it's been deleted because the environment has been merged so the environment doesn't exist when I merge an environment I don't want to keep the environment idling forever I want to keep environments right so we are good actually it's pretty smart you see it it was very very very fast because it's exactly rebuilding the same thing right so even though I've pushed to two different remotes it went super fast and now the the last step is to add the domain I can do that from the cli or I can do that from here I will do that from here to show you our awesome UI how did we call that food food dot jump into the cloud add domain and we probably need the no that should be fine the red rake will be uh will will work so as soon as the domain has been added here we are just refreshing the routes uh internally and as soon as the domain it will be right on time as soon as the domain has been added we are in production deploy on saturday yeah I don't work on saturday usually so yeah but it looks quite good right oh nice looks at that the view gs my view gs integration didn't escape the uh the the p fun so I can uh to yeah to fix that I could actually um I can the easiest way oh we talked about that last time um so in droopalate you have a new text formats and editors by default it's uh it doesn't let you use plain text right and my content if I go to my content and I edit the the the high nannies chicken rice it's not going to let me uh use plain text by default so you need to configure the plain text and say exactly how you want plain text I think it's a bit uh not done but uh and here if you actually change the content from here and you refresh um the the p are not there anymore you see uh you can actually bypass this plain text stuff by going to the source it's a little bit weird anyway how come we're still we're still loading the domain so what happens uh when I'm adding a domain is that I'm generating ssl certificate for that specific domain right and if the good the configuration has not been spread for that specific domain it can actually take a while to provision the certificate so what happened most of the time it says yeah so missing certificate for this domain will retry in a couple of uh in the background in a couple of times right unable to validate domain for this uh for this uh unable to validate ssl certificate for this domain so it's going to retry in the background but that uh that should not uh block the deployment anyway um so yeah deployment will uh will happen that's a good question actually no because the variables are loaded at runtime so once you have the the information you can load the routes while the app is running it's not at build time it's at run time and during the run you have yes exactly exactly so that's uh you don't need to reveal anything let's pray the demo god one more once more before we load the domain and I will uh allow to allow you guys to uh to tweet about this uh awesome new website that we just created all together jump into the clown oh it has oh yeah it has the ssl certificate it just didn't create the ssl certificate for the um let's fix the image now for the uh uh w w w domain but this pass went fine we didn't pray hard enough what happens to the images pending it's trying to load this uh okay it's still trying to load the uh the old the old url which are not available maybe I need to add because what happened here is that when you uh add the domain the old routes that are master dash something something are not available anymore you need to use the domain so here it's trying to load the images on the drupal site that are uh that are behind and it cannot access them so I hope this is uh how uh how we can uh we can fix them and we are yeah almost done with the time so um and the wi-fi went not so bad actually pretty good come on come back online now I cannot access it anymore anyway let's forget my last action um all right any other question nope yeah can we customize the build process the yaml file that we pull in yep uh good question actually you can uh you go through this uh let's look at the drupal one that's going to be more speaking to you uh on the on the drupal one we uh we have this uh oh no we don't have one for the drupal one that that will actually be uh this this thing um and here you say you can actually do your composer with authentication for example here or a composer in store or whatever if you do that you need to remove this build flavor because that means I don't want you platform to do any magic I want me to define what I want to do the same as we did with the not gs application here we define the build process you can load external libraries build your own components directly for your project um yeah you have lots of control on what you want to uh to do during the build process all right thank you very much guys for your uh for your time I hope it was entertaining and um yeah don't hesitate to try it out or uh talk to us Chris is here with me too so don't hesitate to uh come talk to us thank you so much