Unleashing Clean Architecture in .NET 8 - Jason Taylor - Copenhagen DevFest 2023

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
foreign nice to see you here today I'm Jason Taylor I'm a solution architect in Brisbane for a company named increment and I'm also a Microsoft MVP in developer Technologies I'm excited to be here today at the Copenhagen developers festival and I'm even more excited to be presenting my new talk unleashing clean architecture in.net 8. now this is very much a show and tell style talk I'll be showing you how to use my clean architecture solution template show you how to set up your development environment how to create a new solution how to build test and run the solution locally and how to use the built-in pipelines as code and infrastructure as code to deploy the solution to production I'll also be telling you about some of the features that I've included in the template which have been designed to enable you to focus on delivering business value rather than setting up new Solutions setting up projects setting up infrastructure and pipelines let's get started so the clean architecture solution template provides a simple and straightforward approach to Enterprise application development with clean architecture and asp.net core now it's easy to get started it's a net project template and that means you can run it from the command line using.net new or from Visual Studio 22 file new project it's been built on.net the original version was released in October of 2019 on.net 3.1 and it's been upgraded to 567 and the largest upgrade by far has been to.net 8. now if you're looking at starting a new solution in anytime now dot net 8 would be a great choice that's the long-term support release and as the LTS release that's mean it's going to be supported in production for three years now we should receive a go live license in about one week and then the official release for net 8 will be in November at dot net conf so with the.net upgrade there was a lot of new features that I added that were requested by users of the template for many years so one of the first and biggest ones was support for multiple front-end Frameworks so we now support angular react and web API out of the box I've also added support for multiple databases I've started with sqlite and SQL server but I'll be looking to add postgresql quite soon now you know there's been a lot of changes with the asp.net core templates in regards to authentication and authorization.net's been quite a big upgrade so I've adjusted my templates to align with those changes so I've removed uh dewandi identity server and using this simple approach now with asp.net core identity for angular and react and also the new identity API for the web API only solution one of the really big things was implementing a full CI CD pipeline as code and also infrastructure as code because I want users of the template no matter what level they're coming from to have a good chance to do things right on day Zero so using this template you can establish a new CI CD Pipeline with GitHub actions and deploy the solution to Azure using bicep templates I've also included scripts so that it makes sure that GitHub Azure the resources and the credentials all get set up for you and of course the template is still freely available on Open Source on GitHub so if you do find it useful please give it a star all right so installing the template is straightforward you can do that from the command line.net new install Clean architecture solution template now the current version of the template is a preview version so you'd need to specify the version otherwise you'll get the.net 7 version but I'll show you that now once you've done that you can create a new solution just by going.net new ca solution there's a few options that are available in the template so you could specify the standard options the name the output but also the client framework so this is where you can specify either angular react or none if you'd prefer a web API Only Solution you can also specify that you'd like to use sqlite by default it will use SQL server but if you choose sqlite then that's that's fine and that'll work across all different environments so the example there is creating a new react front end with an asp.net core backend it'll be called cph Dev fast now because it's a.net template it does some really cool stuff when you create a new project it's going to use that folder name the output directory cph Dev Fest as the solution name and it'll also have namespaces cph defest but remember there's pipelines as code and infrastructure as code in that template as well and so that means those pipelines and infrastructure are going to be customized with cph defest as well so when you download this and create a new solution you're pretty much ready to go so if you want to create a new solution using visual studio 2022 just install the template and then that that project template will be available in the create a new project dialog so very easy to get started I want to jump into the first demo so the first demo we're going to prepare your development environment we'll create a new solution make sure the template's installed make sure you've got the correct version of.net installed we'll build it run it test it and then deploy it to production because we uh we don't want to waste any time with this one right all right so I'm going to jump into Windows terminal and the first thing I want to do you probably wish me luck it's quite a lot to do but hopefully with the template it's all automated fingers crossed I'll check the.net version so if I go.net version 8 preview seven so we're on the latest version so if you don't have the latest version you can go off to dot dot net and grab it I also want to make sure that I've got the GitHub CLI installed and this is going to be used by one of the scripts that will set up the Azure resources that's great and you know what I might as well go ahead and create a new GitHub repo while we're at it so let's go GitHub repo create I've got some help there cph deadfest will make it a public repository and we'll clone it straight away there we go so we can jump into cph Dev first and we can go GitHub browse and we can see that repositories ready to go okay so we want to install the clean architecture solution template so as mentioned it's net install Clean dot architecture dot solution dot template and we need to specify the version because it's a preview version so I think we can just go eight star now if that's already installed that's off to a good start file was not found.net new install there we go if it's already installed it's just gonna it's just gonna reinstall it for me make sure everything's right so you can see there's two templates there there's the ca solution which you've already looked at and then there's the ca use case so this has got some item templates in there to help you generate use cases to make it a little bit easier to build the functional idea that you that you'll need to build and we'll have a look at those a little bit later but right now I want to create the new solution so we're in that c h cph Dev fast directory so we'll go.net new uh CI solution client framework we'll choose none we'll go with web API just could it'll build a little bit quicker for us and so that creates the solution so we see we're ready to go we've got an Azure directory which includes all of our bicep templates we've got a GitHub directory which includes our GitHub actions we've got a scripts directory which will help us set up our CI CD Pipeline and all the Azure resources then we've got source for our main projects tests for other projects and a whole bunch of other files there so the first thing I want to do is build this so I'll run.net build TL and TL is the new modernized build output and so you can see there it's kind of doing this inline build if there's some issues it'll show us more specifically where their where the issues have occurred so it's not this big wall of text anymore which is which I think is quite nice I'll just take a little while to get through this first build it'll go ahead and um add support for open API so it's going to build a specification as part of the build but once that's done we'll go ahead and run this solution let's go okay there we go okay so if we go ahead and run the solution first I just need to jump into the web directory so we're going to Source start web .net run okay so this is a web API only so it'll just launch the solution and we can have a look at Swagger UI so we're not going to get too much into the details of the UI or anything like that just to make sure that it's running there we go okay so I'll go ahead and run the tests there's a whole bunch of test projects built into this solution to help get you started on the right foot whoops CD back CD tests and so you can see that I've got some application layer functional tests unit tests some domain unit tests and a placeholder for your integration tests so if I go.net test and we'll just go no build make it nice and quick so we just want to make sure everything's working right before we go ahead and deploy this thing to production so I'm just doing some sanity checks it makes sure that my development environment set up correctly but really we want to that's not good oh that's Docker all right one thing I forgot to do we want to make sure that this is going to be okay and that everything's in place so I'm pretty confident so let's go ahead and add those files and commit this is a new project okay now before I push that through because when I do push it through it's going to make those changes um it'll kick off the pipeline I just need to configure uh GitHub and the repository that I've created make sure that it has all the environments that I want to support I want to support development staging and production I also need to configure the variables that will be associated with that repository so that it can connect to Azure so we need things like the tenant ID The Client app everything that oh some secrets for SQL server admin passwords and things like that we also need to head off to Azure and we need to set up some Azure ad app registration some Federated credentials and all those sorts of things so obviously we can't do that very quickly unless we've got some scripts so I've created some scripts to do that for us so inside of scripts we've got two setup.ps1 and cleanup.ps1 now obviously you shouldn't jump in and run these scripts without understanding exactly what they do the cleanup one is especially destructive because it will go and delete resources from Azure but once you have done that and once you've read the warning that comes up and the disclaimer that comes up and if you type yes it will go and do these things so I didn't have to pass any parameters because this script tries to figure it out based on the environment that we have here so I've got a couple of things running I've got the Azure CLI running and I've got the GitHub CLI running and so it's able to use those tools to look at well the GitHub repository name is cph devfest we'll assume the project name is cph Dev first we've got our Azure subscription ID because I've gone in to using the Azure CLI and actually set the right subscription so you should always go and do that I've got the tenant ID the location I default it to Australia East because that's where I am most of the time I've got the default SQL login SQL admin and I've got my GitHub organization name so all of these defaults have been collected but of course you can pass them in as parameters as well and it just gives us a list of the environments that we're going to create and the abbreviations that it's going to use so if I say continue then this script is going to go off and set up environments resources and credentials as it says here for a project hosted on GitHub and deployed to Azure it'll create the workload identities Azure ID set up resource groups and configure environment specific variables and secrets blah blah blah blah it'll do all the work for us so that's good so if I hit yes that's going to kick off that process and so this is something that will save me a lot of time because if I'm starting a new project I don't want to have to create a new solution and start adding files and start building tests and installing all of my favorite packages and I also don't want to establish the first Pipeline and the first infrastructure so that's what I've built into this template I've built in the capability that when I start a new project based on my specialization I can go to a client site and on day one in the first 45 minutes I can get it deployed through to production okay and that means that from that point forward I can focus on delivering business value I can focus on building new features now that pipeline's going to change the infrastructure is going to change but I've started those things from the simplest approach possible for an Enterprise application development okay so it's a really good starting point so let's see how this goes shouldn't take too much longer let's go and have a look in GitHub at some of the environments and things that are being created so if I go into settings and into environments here I can see the development environment has already been created so we've got a multi-stage deployment in GitHub and development's got one secret and three variables so we can jump in here I could put some protection rules on this Branch if I wanted to I could set some required reviewers so for staging and production that's something that I definitely want to do for development I'm just going to let it flow through I won't do any required reviewers as part of this demonstration because I'll forget to do it while we're talking about other things and then it won't go all the way through so if we have a look at some of the environment Secrets here that's a really cool new thing in GitHub actions I don't know how new it is but sometime this year we got the capability for environment specific secrets and variables which is really really good feature that we need so we've got the Azure SQL administrator password the client ID so that's the client ID for the application in Azure ID that's specific to the development environment and then the resource Group name so you can see cph Dev first and the default SQL administrator username so if we have a look at other environments we've got production staging development they look like they're all set up so this script is probably finished running and so if we go over to azure we'll see that um resource groups and all that sort of thing have been set up login uh I'm not going to do that so we'll see the resource groups have been set up they'll be empty right now because we haven't deployed anything but they're there ready to receive all of the Azure resources that were pushed through and we'll also see an Azure ID that there's application res registrations for development staging and production and also the credentials necessary for GitHub to talk to Azure and actually be able to deploy those resources so now with that done the only thing I really have to do is push those changes through so that's the initial project getting pushed through and if we go over here we can see fingers crossed yep that's all pushed through and if we go to actions we can see the pipeline is starting to kick off and so we're going to go into details with the pipeline where did that go but for now I just want to make sure it starts correctly there we go yeah so it's installing.net installing.net8 preview 7 and it'll go through and do all the things necessary to build and produce those artifacts so let's tick that we'll let that tick over keep our fingers crossed that it goes all the way through and we'll look at some of the features that have been included in the template to make your life easier all right I noticed this down here what I thought I didn't I didn't really see that was there I kind of saw it in the back of my mind you guys should have shouted out you've got to have my backup here I've got to do all of these live demos so if something doesn't look right just let me know all right so one of the things that I did in this version of the template was to improve the framework and package management so you can see here I've got the required.net SDK version specified in the global.json so it's specifying version 8 preview seven but it'll roll forward to the latest major release now I've also included a directory build.props and that specifies common props for all of the projects in that directory so for all of the projects dotnet8 is specified treat warnings as errors is specified because we don't want people committing code with warnings in that we then have to look at and implicit use into nullable across all projects and finally I've got directory.packages.props included so we have Central package management and that means that we specify our packages and those versions in one place and then within the Cs projects we just specify the package without the versions and that means if I want to say move from net 8 preview 7 to rc1 I only have to change one file and and the associated packages so two files maybe maybe one if I just ignore the fact that my SDK is supporting an older version but I should say global.json is used by the CI CD pipeline to install the appropriate SDK as part of the build so we'd need to change it there and then also in this one back here so the directory.package.props so for if I've got you know five different test projects and I want to go and update X unit or end unit as the example is here I can just change it in one file in one place and that will update all of those test projects so when you've got a solution that's just one project this sort of thing doesn't matter but when you've got seven or eight projects having centralized framework and package management is really useful all right next up dependency injection so I'm using di with.net out of the box but I tend to break up project service dependencies into individual modules so I create a extension method on iservice collection and that way I can register say all of the services for infrastructure in the infrastructure project all of the services for the application layer in the application project and that really helps to keep my composition route which is program.cs nice and Simple and Clean so you can see there the only Services I'm registering in program.cs are these extension methods add application Services add infrastructure Services pass in the configuration and ADD web services nice and simple much easier to maintain all right now for the web API we've included the API with built-in support for asp.net core minimal API now I didn't want to use minimal API Straight Out of the Box because for me it it's missing some features that I'd really like to see one of those features is routing conventions I don't want to have to specify using magic strings all of the routes and all of the names throughout it and so I've added extension methods to support the defaults and routing conventions that I would typically use uh now there are numerous options for organization of API endpoints and I wanted to just discuss that so the first option is all endpoints in a single file such as program.cs and we see this example a lot and it's fine if you're building a really small application with a tiny number of endpoints then maybe that's going to work well for you but generally for Enterprise application development not so much now you could also have individual endpoints in separate files such as get weather forecasts and so with this approach all of the logic for the endpoint is in a single file and you might even take it a step further and you might have a folder for that endpoint and also put in the input types and the response type response types and so you have this single location where you can go and work on that endpoint and I think that works well for larger applications where you have a lot of logic in the endpoint and it makes sense to have it all in that one place the third approach is to group endpoints related endpoints into a single file such as user.cs so in user.cs I might have the ability to log in to register that sort of thing and this works well again for large Enterprise applications where there are a lot of endpoints to manage but where there's not so much logic in each endpoint and that pretty much describes the type of apis that I create they're very small very thin very little logic and so I've decided to group my related endpoints into a single file now let me just show you what that looks like so if I go over to this one I've got an example here of my to-do lists and so you can see here I've created a to-do list file inside of an endpoints folder and so I've got to do list to do items users and weather forecasts I've got a um a endpoint group base which specifies a map method we pass in web application and then we can use the web application to register our endpoints so you can see here I'm calling map group now this isn't the one that comes out of the box the one that comes out of the box has a few different options but I like to actually customize what map group does for the for the way I typically like to build an API so this one's an extension method so what happens is is it will look at the type in this case the type is to-do list and it'll go ahead and make a group where the base route will be API forward slash to-do list and then it will set the group name the group tags and specify that these endpoints will use open AP AI those are the defaults that I like to use when I'm whenever I'm creating a group of endpoints the same thing's Happening Here require authorizations built in because these are extension methods right so I've extended the capabilities of minimal API with the way that I like to work but I haven't reduced the capabilities so we're still using the minimal API framework and so we can use all of this nice fluent API to build it up you can see with map get this is an extension method as well so go and put some defaults in here so instead of specifying the name in a magic string I'm actually getting the name of the Handler that I'm passing through which is get to-do lists so my route for this particular endpoint will be forward slash API forward slash for to-do list forward slash get to-do lists and so you can see that I've leveraged minimal API and extended minimal API in a way that makes it easy for me to work with so I can go ahead and create one of these groups I can use all of my extension methods so I don't have to write so much code and I've got the very very small methods listed in one file because my light doesn't live in the API right it's often the application layer and in the domain layer okay so groups are defined in separate files they're derived from endpoint group base which is the type that I created we implement the map method we use the extension methods to then register our groups and our endpoints and then inside of program.cs I've got another extension method on web application which will then just go through and automatically wire up all of my endpoints so I just call app.map endpoints and that's pretty nice and clean I really like working with it that way all right I've also implemented the new eye exception Handler that came with.net 8 and this allows us a mechanism for managing um known exception types in a kind of controlled way so you can see here that I've created a custom exception Handler that is implementing the I exception Handler interface and what it will do is it I will add logic to handle known exception types and if the exception is handled by my custom logic then I'll return true otherwise I'll return false now typically the way that I build this in the past was using filters but this provides us with a really new unique opportunity instead of handling all known types in a single filter we can actually have multiple exception handlers so we can have one for not found if that's what we're doing and one for validation if that's what we're doing and so what will happen is the middleware will use these exception handlers passing it to the next exception Handler if the first one doesn't handle it for us and that means that we're able to adhere to SRP quite closely and just have one type handled per exception Handler so I like that it's easy to register these exception handlers we just go Services dot add exception Handler let's have a look and see how the deployment's going okay still ticking along that's good news okay so it is let's zoom in there so it's gone through and it's done the build it's done the validation of infrastructure and it started the development deployment so it's moving through fairly well so as part of that it's building up the infrastructure initializing the database and deploying the actual site okay the template has built-in support for open API so it'll improve your productivity and allow you to easily adapt to API changes so I like to generate my open API specification on build and it's based on the included web API so Swagger UI is included out of the box so you can visualize and interact with the API endpoints and for the angular and react templates I generate typescript clients for those front ends and so that means you don't have to write your own code to interact with the back end API in fact your front-end developers don't even need to look at the backend API if you've got two teams perhaps they can just look at this generated client it's going to include all of the clients you'll need to interact with the API it's going to include Bearer tokens so authorization is taken care of and it's also going to include typescript versions of those types that are exposed by your API so it makes life really easy now the react template was a little bit tricky to get to work I've customized the N swag template that has been generated and so it supports authorization as well so you won't need to jump through hoops to get it to work with asp.net core Identity or any other authorization techniques I've also included a web.hdp file so you can see how the API is designed to work jump in have a play with it and get a better understanding of it all right next up for authentication and authorization this is supported through ASP netcore identity so the angular and reacts bars use asp.net core identity UI and cookie based Authentication whereas the web API only apps use the new identity API endpoints which is excellent it comes out of the box with a group of endpoints such as login register refresh and we'll be able to use those when we're building out our angular and react apps Blazer apps because now we don't need to rely on that Razer UI and we don't have to build this API ourself so in the past we kind of maybe scaffold out the identity UI have a look at how things are working build an API based on that that is done now and it's quite simple when I created the kind of approach to minimal API for my solution I knew when I saw this and when I included the map identity API that my solution was working really well because I was able to go in and Define a group in a really simple way and then just call Dot map identity API which is built by the team and it just works and for me it looks really nice and simple and organized so we'll see all of those endpoints in this particular solution at forward slash API forward slash users and then all of the endpoints that come with map identity API that's an example that example is from preview seven uh in preview eight there's a whole host of new endpoints that you can check out so data access is supported using Entity framework core either with sqlite or SQL server but of course those are just the options that are built into the template if you want to go and use something else you're free to do so as mentioned I'll be including postgresql shortly if core migrations is enabled and it's almost completely automated so you still have to go in and create migrations of course but in development time there is an initializer that will create the database update it to the latest migration and Seed the database and then for the CI CD pipeline for all of your deployed environments it's going to use EF core migrations bundles so you're not going to have to figure out how to get that working it will build the bundle as part of the build pipeline once the infrastructure is deployed it will use that bundle to upgrade your database to the known version and of course because it's built into the CI CD pipeline if the bundle if the database upgrade fails you'll know before the solution is deployed to production and before your user jumps on the phone and says hey this app doesn't even start all right so database initialization yeah let's see deployed environments use EF core migrations EF core fluent apis used to configure entities where required so I like to keep my data model sometimes as a dual purpose domain model I want that to be as clean as possible so I use the fluent API for that I've also implemented some examples of EF core interceptors in this template so you can see some examples of auditing entities and dispatching domain events now there's a number of core features that are built into this solution and these are the features that are built into the core of the architecture so this is the application layer and the domain layer independent of any kind of external technology so we have automatic validation of invoked use cases and this is powered by mediator using the validation behavior and fluent validation we also have the ability to specify authorization requirements on use cases and that means we can go and specify things like roles and policies this is an abstraction that is implemented in infrastructure on ASP Network identity so the abstraction can be can remain but you can change out whatever identity process you're using we automatically log unhandled exceptions automatically log invoked use cases so when you go and have a look at that you'll see the use case name the input for the use case and also details of the user we add and dispatch domain events support for Value objects support for auditable entities that's again powered by EF core interceptors and here's the CI CD pipeline let's check and see how that's running okay so it looks like it's finished the deployment to development so we can probably go and jump on and see if that's working so if we go to deploy website and click on that fingers crossed we'll come back to it give it some time to load okay so the cicd pipeline is a multi-stage pipeline it's included in the template and it's a pipeline as code so it's built on GitHub actions so the first thing this pipeline does is build the solution so we saw when we had a let's let's dive in and have a look at that build actually so in build here it's going to install.net install latest SDK restore the solution build the solution test the solution okay it's going to publish the website so it's going to create that website artifact which will then be used later to deploy it to Azure it will also create the EF core migrations bundle and publish that artifact as well so once build's done it'll kick off with a multi-stage deployment to development staging and production the first thing it does is using the bicep templates is to deploy the infrastructure now the Sim validation that happens on those bicep templates before they run so you do have an opportunity to actually if you put in some required approvers you have an opportunity to review the changes that will be made to Azure if you click approve and continue so that's why you're seeing some additional steps in here so for the deploy to development there was a validate stage to check those templates and a deploy stage for the deploy to staging there was a validate stage which was running a what-if so we can go and have a look at the changes that will be made if we decide to go ahead with this deployment okay so there's the dev environment up and running and ready to go so not much to see there it's an API but it was a successful deployment okay so the continuous delivery pipeline will deploy the infrastructure and then initialize the database so the initialize of the database is happening using the EF core migrations bundle and just for clarity the migrations bundle is a cross-platform application that will upgrade your database to the correct migration and you don't have to manage that and then finally it will deploy the website now the infrastructure as code AS mentioned has been built using bicep templates now I've based this on the Azure reference architecture for a basic web application because I figured we need the simplest starting point before we dive into the details and figure out actually what is this application going to be about is it multi-tenanted let's get something up and running so we can start building features and we'll start to evolve the CI CD Pipeline and the infrastructure as code from a place that works right and that's important we've got something that works and we can build on it as we understand more so you can see there we'll have an app service plan with an app we've got a SQL Server database and we've got application insights wired up and receiving metrics across those services now there's also support for code scaffolding so when you installed the template you've got of course the ca solution template which is a.net Project template for building the solution but you also receive the ca use case template and so this template is something you typically run from within the application directory where the application project lives this is where we create the use cases the reason that this application exists an example of use cases might be dispatching an order or creating a new customer so we run it by going.net new ca use case and there's a number of options that we can specify so first thing is the feature name and that will go ahead and create a feature folder in the application directory if it doesn't exist then we have the use case type either a command or query because in this approach we're using cqrs and next we have the name which is the name of the use case being created so let's give some examples so the feature name might be orders and the use case name might be dispatch order and then finally we have the return type which is optional depending on what type of use case you're creating so as an example here we've got net new Co use case feature name of orders use case type of command and name of dispatch order and so that'll give us a nice skeleton that we can get started with and go and start adding our application logic to that skeleton finally documentation so when you create a new template when you create a new solution using the template it includes a readme file which is generated automatically and is based on the version of the template that you created so if you create an angular app a react app or a web API on the app it'll be specific to that and it includes steps basic tasks such as building and running the app code scaffolding to generate use cases details on code Styles and formatting using editor config running the automated tests and help and other resources it also includes the version of the template that was used to create the solution so if at some point you want to go back to the clean architecture solution template and look at what's new and what has changed you'll have a point at which you can compare that all right let's have a look and see how our deployment's going okay so it looks like it's in the final stages now so it's going through and deploying to production check in there so yes it's finished uh it's finished the initial stages it's deploying infrastructure then it'll go through and initialize the database before finally deploying the website so it looks like that's going to be successful which is good so it's been running for 22 minutes now so that means that you know if we're on client site first day on the job it's 9am this is going to be finished within the uh 45 minutes at least and we'll be able to grab a coffee before the kickoff meeting which is nice so I like to operate whoops all right thank you for coming to my talk today I hope you've enjoyed it now if you'd like to learn more you can jump onto github.com at jasontaylordev clean architecture and there you can learn more about the template you can request a new feature request a bug fix and you can have conversations with other people contributors and users about the template and how best to use it if you do find the template to be useful I'd really appreciate it if you give it a start on GitHub thank you [Applause] uh plenty of time for questions if anyone has any yep into sorry why do I separate them into separate um two reasons so so why do I append kind of the name of the yes that's right so the question was in the minimal API approach let's see I'm going to bring up the card so actually maybe we can even just go to Swagger UI okay so the question is why do I append the name of the method to the route is that right so you can see there that I'm not um really what's happening is the name of the method is being used to provide a richer set of data to API Explorer so that when it goes and builds the specification it's going to be able to build us a nice open API specification and it's going to organize things into those groups so you can see there we've got a grouping of our to-do items to-do lists and users actually we can come here and see all of the wonderful endpoints that the team has put in for working with asp.net core identity they've really gone above and beyond I don't I don't know if we'll see any more as part of the.net 8 release because I think it'll be about stabilization now with rc1 and rc2 but that's a really great starting point any other questions yes sorry I can't you'll have to come forward sorry yes that's a good question so thank you for using the template um so the upgrade of the template how do we do that there's no supported upgrade process and when I generated the readme that I showed you before the reason that I put the version in there is so that you always know what version the solution was created from so the simplest thing you could do to see what's new is go back and install that version of the template create a new empty solution and then install the latest version create a new empty solution and compare the two that at least is going to give you an idea of what's new but you can also go through and check the release notes because when I do a new release I try to describe what's changed so you could dive in and grab those things that you're interested in yeah it's not an easy easy problem to solve but at least if you know the version it was created from you've got a good starting point a reference point yes that's a great question are there any plans to add Blazer to the template I've been very busy working on this one but I do have a Blazer template and this one is for Blazer webassembly so oh we're about to run out of time so it's called rapid Blazer it's on.net7 and one of the things that I'll be doing next is fixing that failing build and deploy but after that I'll be upgrading it to.net 8 as well so the rapid Blazer template is simpler uh is is similar it's got a built-in CI CD pipeline it's got built-in infrastructure as code templates and uh what else does it have it's got some scripts to help you get started but it's not quite as easy so I'll need to take what I've learned all the changes that I've made to the clean architecture solution template and apply it to Rapid Blazer and it's starting to get tricky because now I've got too many open source projects to maintain so if you do have some time and you are interested and you'd like to contribute I'd welcome some contributions if you're not sure where to start you can ask me and we can figure out a good place to start any other questions yes foreign that's a great question do I have any plans to extend the template to use Azure devops pipelines as well as GitHub actions yeah you know something that's really interesting me at the moment is the Azure developer CLI and they're doing a lot of great work and I'd like to see how much I can Leverage The Azure developer CLI as part of this template so then I would have a net project template that uses the Azure developer CLI the table to deploy GitHub actions pipelines Azure devops pipelines by bicep templates or terraform templates and I think that might be a good starting point but I worry that it's not going to support a multi-stage pipeline so I'm tracking some of the issues on that repository to see if they're adding support for that so I will add support for Azure devops pipelines pretty soon it's not a it's not a big task but I'm not sure whether it'll come through Azure developer CLI or directly into the template yes so could you ask again no but I'd so uh what about gitlap am I planning to add support for CI CD for gitlab no I'm not planning to add support but I would welcome a contribution on that um so for me an open source project building in my spare time I tend to focus on the things that I do and so for me that's Azure devops pipelines and GitHub actions but if you if somebody puts through a contribution forget lab that would be appreciated and I'd definitely include it in the template any last questions okay wonderful thanks again everyone bye
Info
Channel: NDC Conferences
Views: 18,266
Rating: undefined out of 5
Keywords:
Id: yB01HaG0i0w
Channel Id: undefined
Length: 46min 30sec (2790 seconds)
Published: Sat Sep 30 2023
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.