/// <summary> /// To generate WebAPI Sub Projects and added those projects to root solutions created by Swagger Codegen /// </summary> /// <param name="webapiName">Package Name from Swagger codegen. example - For ProtoType.Api, webapiName is Prototype </param> /// <param name="subProjects"></param> /// <param name=""></param> /// <param name=""></param> public async Task GenerateSubProjectProjectCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { string apiRootProjectPath = config.outputFolderPath + "\\" + "src"; string apiSolutionPath = config.outputFolderPath + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".sln"; string[] folders = System.IO.Directory.GetDirectories(apiRootProjectPath); if (folders != null && folders.Length > 0) { foreach (var subProject in webApiProjectStructure.SubProjects) { var subProjectDirectoryPath = apiRootProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectPath; if (Directory.Exists(apiRootProjectPath)) { Directory.CreateDirectory(subProjectDirectoryPath); } var codeGenerationOptions = new DotNetCoreCommandOptions(); codeGenerationOptions.ProjectName = config.PackageName + "." + subProject.SubProjectName; codeGenerationOptions.ProjectType = subProject.SubProjectType; codeGenerationOptions.OutPutLocation = subProjectDirectoryPath; await CodeGenerationCoreOperations.CreateNewDotNetCoreProject(codeGenerationOptions); var csprojFilePath = codeGenerationOptions.OutPutLocation + "\\" + codeGenerationOptions.ProjectName + ".csproj"; while (!File.Exists(csprojFilePath)) { } await CodeGenerationCoreOperations.AddProjectToSoluion(apiSolutionPath, csprojFilePath); } } }
/// <summary> /// Generate and customize API code based on Mustache template /// </summary> /// <param name="config">Configuration values to customize API Code</param> /// <param name="webApiProjectStructure">API Structure and dependencies</param> public static async Task CustomizeAPICode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { //Generate Startup.cs file await GenerateStartupCode(config, webApiProjectStructure); //Generate Docker file await GenerateDockerfileCode(config, webApiProjectStructure); //Generate Deployment Manifest File await GenerateDeploymentManifestCode(config); //Generate Pipeline code await GeneratePipelineCode(config); //Generate Jenkins file await GenerateJenkinsfileCode(config); //Generate UpdateAssembly file await GenerateUpdateAssemblyCode(config); //Generate AppSettings file await GenerateAppSettings(config, webApiProjectStructure); await GenerateGitIgnoreCode(config); }
private static async Task GenerateDockerfileCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { string fileName = "Dockerfile"; string dockerFilePath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName; dynamic dockerConfig = new JObject(); dockerConfig.packageName = config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix; dockerConfig.donotcoreVersion = webApiProjectStructure.DotnetCoreVersion; await MustacheParser.GenerateCodeFile(fileName, dockerFilePath, dockerConfig); }
private static async Task GenerateStartupCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { string csprojAPIPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj"; string fileName = "Startup"; string fileExtension = "cs"; string startupFilePath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName + "." + fileExtension; dynamic startupConfig = new JObject(); if (config.UseCircuitbreaker == true) { startupConfig.isPolly = true; //Add Polly Package to Web API Project await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.PollyWebApiPackage.PackageName, webApiProjectStructure.PollyWebApiPackage.Version); } if (config.UseLogging == true) { startupConfig.isSteeltoe = true; //Add Steeltoe Package to Web API Project await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.SteeltoeWebApiPackage.PackageName, webApiProjectStructure.SteeltoeWebApiPackage.Version); } if (config.Database == EnumDatabase.MongoDB) { startupConfig.isMongo = true; startupConfig.mongoConnectionName = config.PackageName + "MongoConnectionString"; //Add Mongo Package await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoDBDriver.PackageName, webApiProjectStructure.MongoDBDriver.Version); await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoDBDriverCore.PackageName, webApiProjectStructure.MongoDBDriverCore.Version); await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoBSON.PackageName, webApiProjectStructure.MongoBSON.Version); await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, webApiProjectStructure.MongoHealthCheck.PackageName, webApiProjectStructure.MongoHealthCheck.Version); } startupConfig.packageName = config.PackageName; startupConfig.apiTitle = config.PackageName + " " + webApiProjectStructure.RootWebAPIProjectNameSuffix; startupConfig.apiVersion = webApiProjectStructure.ApiVersion; await MustacheParser.GenerateCodeFile(fileName, startupFilePath, startupConfig); }
public async Task AddProjectReferenceForWebApiProjects(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { //Add Project Reference for API project string csprojAPIPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj"; var csprojAPITestPath = config.outputFolderPath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + ".csproj"; while (!File.Exists(csprojAPITestPath)) { } //Add API Project reference to API Test Project await CodeGenerationCoreOperations.AddProjectReference(csprojAPITestPath, csprojAPIPath); foreach (var subProject in webApiProjectStructure.SubProjects) { string csprojSubProjectPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + subProject.SubProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectName + ".csproj"; while (!File.Exists(csprojSubProjectPath)) { } //Add subProjectReference to main API project await CodeGenerationCoreOperations.AddProjectReference(csprojAPIPath, csprojSubProjectPath); while (!File.Exists(csprojAPITestPath)) { } //Add subProjectReference to API Test project await CodeGenerationCoreOperations.AddProjectReference(csprojAPITestPath, csprojSubProjectPath); //Add project reference for all depedencies if (subProject.ProjectDependencies != null && subProject.ProjectDependencies.Count > 0) { foreach (var project in subProject.ProjectDependencies) { var csprojDepedentProject = config.outputFolderPath + "\\src\\" + config.PackageName + "." + project + "\\" + config.PackageName + "." + project + ".csproj"; //Add depedent project reference await CodeGenerationCoreOperations.AddProjectReference(csprojSubProjectPath, csprojDepedentProject); } } } }
private static async Task GenerateAppSettings(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { string fileName = "appsettings"; string fileExtension = "json"; string appSettingsPath = config.outputFolderPath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + fileName + "." + fileExtension; dynamic appSettingsConfig = new JObject(); if (config.Database == EnumDatabase.MongoDB) { appSettingsConfig.isMongo = true; appSettingsConfig.mongoConnectionName = config.PackageName + "MongoConnectionString"; } if (config.Database == EnumDatabase.Oracle) { appSettingsConfig.isOracle = true; appSettingsConfig.oracleConnectionName = config.PackageName + "OracleConnectionString"; } if (config.Messaging.Contains("kafka")) { appSettingsConfig.isKafka = true; } else { appSettingsConfig.isKafka = false; } if (config.Messaging.Contains("ibmmq")) { appSettingsConfig.isIBMMq = true; } else { appSettingsConfig.isIBMMq = false; } await MustacheParser.GenerateCodeFile(fileName, appSettingsPath, appSettingsConfig); }
public async Task GenerateTestProjectCode(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { string apiSolutionPath = config.outputFolderPath + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".sln"; DirectoryInfo rootTestDirectory = new DirectoryInfo(config.outputFolderPath); string[] folders = System.IO.Directory.GetDirectories(config.outputFolderPath); if (folders != null && folders.Length > 0) { if (Directory.Exists(config.outputFolderPath)) { rootTestDirectory = Directory.CreateDirectory(config.outputFolderPath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory); } var apiTestProjectDirectory = rootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix; if (Directory.Exists(rootTestDirectory.FullName)) { Directory.CreateDirectory(apiTestProjectDirectory); } var codeGenerationOptions = new DotNetCoreCommandOptions(); codeGenerationOptions.ProjectName = config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix; codeGenerationOptions.ProjectType = webApiProjectStructure.TestProject.TestProjectType; codeGenerationOptions.OutPutLocation = apiTestProjectDirectory; await CodeGenerationCoreOperations.CreateNewDotNetCoreProject(codeGenerationOptions); var csprojFilePath = codeGenerationOptions.OutPutLocation + "\\" + codeGenerationOptions.ProjectName + ".csproj"; while (!File.Exists(csprojFilePath)) { // Console.WriteLine("Not Present" + csprojFilePath); } await CodeGenerationCoreOperations.AddProjectToSoluion(apiSolutionPath, csprojFilePath); } }
public async Task AddPackagesForWebApiProjects(CodeGenConfig config, WebApiProjectStructure webApiProjectStructure) { //Add Project Reference for API project var outPutCodePath = config.outputFolderPath; //@"D:\E-Comm\Modernization\CodeGeneratorAPI\CodeGeneratorAPI\Output";//config.outputFolderPath; string csprojAPIPath = outPutCodePath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + ".csproj"; var csprojAPITestPath = outPutCodePath + "\\" + webApiProjectStructure.TestProject.RootTestDirectory + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + "\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "." + webApiProjectStructure.TestProject.TestProjectNameSuffix + ".csproj"; string fileContent = File.ReadAllText(csprojAPIPath); if (fileContent.Contains("netcoreapp2.2")) { fileContent = fileContent.Replace("netcoreapp2.2", "netcoreapp3.1"); var replaceValue = @"<PackageReference Include=""Microsoft.AspNetCore.App"" />"; //To DO fileContent = fileContent.Replace(replaceValue, ""); } await File.WriteAllTextAsync(csprojAPIPath, fileContent); //Delete Unwanted Files from Root Folder var deleteBuildBatFile = outPutCodePath + "\\" + "build.bat"; var deleteBuildshFile = outPutCodePath + "\\" + "build.sh"; if (File.Exists(deleteBuildBatFile)) { File.Delete(deleteBuildBatFile); } if (File.Exists(deleteBuildshFile)) { File.Delete(deleteBuildshFile); } //Delete Filter Files var filterFolderPath = outPutCodePath + "\\src\\" + config.PackageName + "." + webApiProjectStructure.RootWebAPIProjectNameSuffix + "\\" + "Filters"; DirectoryInfo filterDir = new DirectoryInfo(filterFolderPath); foreach (FileInfo file in filterDir.GetFiles()) { file.Delete(); } while (!File.Exists(csprojAPIPath)) { } //Add package to Web API Project foreach (var package in webApiProjectStructure.WebApiPackages) { await CodeGenerationCoreOperations.AddPackageToProject(csprojAPIPath, package.PackageName, package.Version); } //Add package to Web API Sub Projects foreach (var subProject in webApiProjectStructure.SubProjects) { string csprojSubProjectPath = outPutCodePath + "\\src\\" + config.PackageName + "." + subProject.SubProjectPath + "\\" + config.PackageName + "." + subProject.SubProjectName + ".csproj"; while (!File.Exists(csprojSubProjectPath)) { } foreach (var package in subProject.ProjectPackages) { await CodeGenerationCoreOperations.AddPackageToProject(csprojSubProjectPath, package.PackageName, package.Version); } } while (!File.Exists(csprojAPITestPath)) { } //Add package to Web API Test Project foreach (var package in webApiProjectStructure.TestProject.ProjectPackages) { await CodeGenerationCoreOperations.AddPackageToProject(csprojAPITestPath, package.PackageName, package.Version); } }