Fix package reference bug

This commit is contained in:
2025-10-12 13:54:51 +02:00
parent 97aaa715dc
commit 671c1214a8
121 changed files with 6431 additions and 69 deletions

View File

@@ -20,7 +20,10 @@ public class GenerationController : IController
{
try
{
foreach (var task in process) await _genService.Launch(task);
foreach (var task in process)
{
await _genService.Launch(task);
}
}
catch (Exception e)
{

View File

@@ -4,11 +4,13 @@ namespace Generator.Daos;
public abstract class AbstractDao
{
protected readonly ConfigManager ConfManager;
protected readonly ConfigManager _confManager;
protected readonly string _spec;
protected AbstractDao(ConfigManager confManager, string spec)
{
ConfManager = confManager;
_confManager = confManager;
_spec = spec;
}
protected AbstractDao(ConfigManager confManager) : this(confManager, confManager.GetDefArgs().SpecIdentifier)

View File

@@ -6,14 +6,14 @@ namespace Generator.Daos;
public class CredentialsDao : AbstractDao
{
public string Username => ConfManager.Credentials.Username;
public string Password => ConfManager.Credentials.Password;
public string Username => _confManager.Credentials.Username;
public string Password => _confManager.Credentials.Password;
public CredentialsDao(ConfigManager confManager)
: base(confManager, confManager.GetDefArgs().SpecIdentifier)
{
}
public PackageDeletion GetPackageDeletion() => ConfManager.Credentials.ToPackageDeletion();
public PackageDeletion GetPackageDeletion() => _confManager.Credentials.ToPackageDeletion();
}

View File

@@ -17,7 +17,7 @@ public class DotnetDao : AbstractDao
public DotnetConfig GetDotnetGenerate(GenerationType type, ISpecFile file)
{
var config = ConfManager.Dotnet.Map(ConfManager, file);
var config = _confManager.Dotnet.Map(_confManager, file);
config.Type = type;
return config ;
}

View File

@@ -5,9 +5,9 @@ namespace Generator.Daos;
public class EnvironmentDao : AbstractDao
{
public Location ApiFolder() => new ([ConfManager.GetBase().LocalRoot, ConfManager.GetGeneral().ApiFolder]);
public Location ApiFolder() => new ([_confManager.GetBase().LocalRoot, _confManager.GetGeneral().ApiFolder]);
public string Invite => ConfManager.GetBase().Invite;
public string Invite => _confManager.GetBase().Invite;
public EnvironmentDao(ConfigManager confManager) : base(confManager)
{ }

View File

@@ -13,7 +13,7 @@ public class JavaDao : AbstractDao
public JavaDao(ConfigManager confManager) : base(confManager)
{ }
public JavaConfig GetJavaGenerate(ISpecFile file) => ConfManager.Java.Map(ConfManager, file);
public JavaConfig GetJavaGenerate(ISpecFile file) => _confManager.Java.Map(_confManager, file);
public JavaPublish GetJavaPublish(GenerationType type, ISpecFile file)
{

View File

@@ -13,7 +13,7 @@ public class JavascriptDao : AbstractDao
public JavascriptDao(ConfigManager confManager) : base(confManager, confManager.GetDefArgs().SpecIdentifier)
{ }
public JavascriptConfig GetJavascript(ISpecFile file) => ConfManager.Javascript.Map(ConfManager, file);
public JavascriptConfig GetJavascript(ISpecFile file) => _confManager.Javascript.Map(_confManager, file);
public JavascriptPublish GetJavascriptPublish(GenerationType type, ISpecFile file)
{

View File

@@ -13,11 +13,12 @@ public class OpenApiDao : AbstractDao
public Location ConfigOf(string spec) => GetOpenApi(true, spec).SpecConfig;
public OpenApiConfig GetOpenApi(bool isLocal, string file)
public OpenApiConfig GetOpenApi(bool isLocal, string specPath)
{
var items = file.Split("/");
var o = ConfManager.OpenApi.Map(ConfManager, items[0], items[1]);
o.AddRoot(ConfManager.GetRoot(isLocal));
specPath = specPath ?? _spec;
string[] items = specPath.Split("/");
OpenApiConfig o = _confManager.OpenApi.Map(_confManager, items[0], items[1]);
o.AddRoot(_confManager.GetRoot(isLocal));
return o;
}
}

View File

@@ -12,12 +12,12 @@ public class TemplateDao : AbstractDao
public PlantUmlExport PlantUml(ISpecFile file)
{
var config = ConfManager.Templates.Map();
var config = _confManager.Templates.Map();
return new PlantUmlExport
{
LocalRoot = ConfManager.GetBase().LocalRoot,
LocalRoot = _confManager.GetBase().LocalRoot,
Template = config.PlantUml,
Output = ConfManager.GetGeneral().ApiFolder.ConcatenateWith([file.Folder, $"{file.Name}.puml"])
Output = _confManager.GetGeneral().ApiFolder.ConcatenateWith([file.Folder, $"{file.Name}.puml"])
};
}
}

View File

@@ -43,8 +43,8 @@ public class ConfigManager
{
_args = args;
_env = env.Value;
Publish = publish.Value;
Credentials = creds.Value;
Publish = publish.Value;
Credentials = creds.Value;
_defArgs = defArgs.Value;
_general = general.Value;

View File

@@ -1,12 +1,26 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Generator</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Content Include="appsettings.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
<Content Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="CommandLineParser" Version="2.9.1" />
<PackageReference Include="Microsoft.OpenApi" Version="1.6.13" />

View File

@@ -1,6 +1,7 @@
using Core;
using Core.Dto;
using Core.Events;
using Core.Process;
using Generator.Controllers;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@@ -44,9 +45,10 @@ public class GeneratorHostedService : IHostedService
var startTime = DateTime.Now;
try
{
var extractor = new ArgumentsExtractor(_args);
var genProcess = _preGenController.ComputeGeneration(extractor.Spec, extractor.GenType, extractor.PublishType);
ArgumentsExtractor extractor = new ArgumentsExtractor(_args);
string spec = extractor.Spec ?? "";
GenerationProcess genProcess = _preGenController.ComputeGeneration(spec, extractor.GenType, extractor.PublishType);
if (extractor.ExportPuml) _exportController.PlantUml(genProcess.BaseFile);
@@ -55,14 +57,14 @@ public class GeneratorHostedService : IHostedService
}
catch (Exception e)
{
_logger.Log(LogLevel.Critical, e, $"A critical exception was thrown. {e.Message}");
_logger.Log(LogLevel.Critical, "Critical failure : " + e.Message + "\nReason : " + e.StackTrace);
}
finally
{
var endTime = DateTime.Now;
Console.WriteLine($"Process started at : {startTime}");
Console.WriteLine($"Process ended at : {endTime}");
Console.WriteLine($"Duration : {(endTime - startTime).Duration():mm':'ss}");
Console.WriteLine($"Duration : {(endTime - startTime).Duration():mm':'ss}");
_applicationLifetime.StopApplication();
}
}, cancellationToken);

View File

@@ -54,7 +54,7 @@ public class CommandExecutor
while (!output.EndOfStream)
{
var line = await output.ReadLineAsync();
_emitter.Warn(this, line);
_emitter.Warn(this, line.ToString());
}
});
}

View File

@@ -40,13 +40,17 @@ public class OpenApiDotnetServerBuilder : AbstractBuilder<OpenApiYaml>
var templateFolder = new Location([_config.DockerRoot, _config.TemplateFolder]);
var packageFolder = new Location([_config.DockerRoot, _config.PackageFolderPath()]);
var outputDir =
_config.DockerRoot
.ConcatenateWith("generated")
.ConcatenateWith("localFeed");
var stringBuilder = new StringBuilder();
stringBuilder
.Append($"docker run --rm -it -v {_config.LocalRoot}:{_config.DockerRoot} {_config.BuildImage} /bin/sh -c '")
.Append($"cp {templateFolder}/NuGet.config {packageFolder} && ")
.Append($"cd {packageFolder} && ")
.Append($"dotnet pack -c Release -o out -p:PackageVersion={SpecFile.Version}'");
.Append($"dotnet pack -c Release -o {outputDir} -p:PackageVersion={SpecFile.Version}'");
var command = stringBuilder.ToString();
Executor.Register(command);
@@ -71,7 +75,7 @@ public class OpenApiDotnetServerBuilder : AbstractBuilder<OpenApiYaml>
{"generatorVersion", "7.3.0"},
{"outputFolder", new Location([_config.DockerRoot, _config.OutputFolder()]).ToString()},
{"modelSuffix", SpecFile.Config.ModelSuffix},
{"aspnetCoreVersion", "3.1"},
{"aspnetCoreVersion", "6.0"},
{"packageName", SpecFile.Config.NugetPackage},
{"packageVersion", SpecFile.Info!["version"]},
{"refs", SpecFile.ReferencedSchemas},

View File

@@ -47,7 +47,7 @@ public static class SettingsMapper
public static OpenApiConfig Map(this OpenApiConfigDto dto, ConfigManager configManager, string folder, string name)
{
var apiFolder = configManager.GetGeneral().ApiFolder;
var config = new OpenApiConfig
{
Folder = new Location(dto.OutputFolder),

33
Generator/Program.cs Normal file
View File

@@ -0,0 +1,33 @@
using CommandLine;
using Core.Dto;
using Core.Interfaces;
using Generator;
using Generator.DataSource;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace Generator
{
public class Program
{
public static async Task Main(string[] args)
{
var parserResult = LoadArguments(args);
var parsedArgs = parserResult.Value;
var hostBuilder = Host.CreateDefaultBuilder();
hostBuilder.ConfigureServices((hostContext, services) =>
{
IDataSourceLoader loader = new JsonLoader(services, hostContext.Configuration);
services.AddServices(loader, parsedArgs);
services.AddHostedService<GeneratorHostedService>();
});
await hostBuilder.Build().RunAsync();
}
private static ParserResult<ArgumentsDto> LoadArguments(string[] args) => Parser.Default.ParseArguments<ArgumentsDto>(args);
}
}

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"Generator": {
"commandName": "Project",
"commandLineArgs": "--name example/example"
}
}
}

View File

@@ -1,8 +1,8 @@
using Core;
using Core.Dto;
using Core.Interfaces;
using Core.SpecConfig;
using Generator.Daos;
using Generator.DataSource.Packages;
using Generator.Mappers;
namespace Generator.Repo;
@@ -15,17 +15,19 @@ public class RepositoryActions
public RepositoryActions(CredentialsDao credentialsDao)
{
_credentialsDao = credentialsDao;
_requester = new NexusRequester(_credentialsDao.Username, _credentialsDao.Password);
//_requester = new NexusRequester(_credentialsDao.Username, _credentialsDao.Password);
}
public async Task<List<PackageData>> GetVersions(Language language, string package)
{
var packages = await _requester.GetVersions(language, package);
throw new NotImplementedException("Repository actions cannot be user for now. It is missing a repository requester");
List<PackageDataDto> packages = await _requester.GetVersions(language, package);
return packages.Map();
}
public async Task DeleteVersion(string packageId)
{
throw new NotImplementedException("Repository actions cannot be user for now. It is missing a repository requester");
await _requester.DeleteVersion(packageId);
}

View File

@@ -0,0 +1,81 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"Environment": {
"invite": "powershell.exe",
"localRoot": "C:/Users/Laurent/Desktop/api-generator/architecture/api/apis/",
"dockerRoot": "/api/"
},
"DefaultArguments": {
"specIdentifier": "example/example",
"generatorVersion": "7.3.0"
},
"General": {
"apiFolder": "apis",
"outputFolder": "generated"
},
"Dotnet": {
"ServerFolder": "dotnet-api",
"CommonFolder": "dotnet-models",
"ClientFolder": "dotnet-client"
},
"Javascript": {
"Folder": "javascript-client"
},
"Java": {
"Folder": "java"
},
"OpenApi": {
"OutputFolder": "openapi",
"GeneratorConfigFile": "openapi-generator-config.yaml",
"GeneratorIgnoreFile": ".openapi-generator-ignore",
"specExtension": ".yaml",
"schemasIdentifier": "-schemas",
"configExtension": ".json",
"configIdentifier": "-config"
},
"Templates": {
"folder": "templates",
"plantUml": "plantUml.mustache",
"dotnetServerGeneratorConfig": "dotnet-server-generator-config.mustache",
"dotnetClientGeneratorConfig": "dotnet-client-generator-config.mustache",
"javaGeneratorConfig": "java-generator-config.mustache",
"serverIgnore": "dotnet-server-ignore.mustache",
"clientIgnore": "dotnet-client-ignore.mustache"
},
"DockerImages": {
"javascriptImage": "temporaly_missing_please_fill_javascripImage_field_in_appsettings.json",
"openapiGeneratorImageName": "openapitools/openapi-generator-cli",
"openapiGeneratorVersion": "7.3.0",
"openapiGeneratorImage": "openapitools/openapi-generator-cli:v7.3.0",
"dotnetSdkImage": "mcr.microsoft.com/dotnet/sdk:8.0",
"mavenImage": "maven:3.9.5"
},
"Publish": {
"npmRegistry": "https://npm-registry-sample.url",
"nugetRegistry": "https://nuget-registry-sample.url",
"mavenRegistry": "https://maven-registry-sample.url"
},
"Credentials": {
"token": "TOKEN_SAMPLE",
"email": "EMAIL_SAMPLE",
"username": "USERNAME_SAMPLE",
"password": "PASSWORD_SAMPLE",
"always-auth": "true"
}
}

View File

@@ -0,0 +1,74 @@
{
"Environment": {
"invite" : "powershell.exe",
"localRoot": "C:/Users/Laurent/Desktop/api-generator/architecture/api/",
"dockerRoot" : "/api/"
},
"DefaultArguments": {
"specIdentifier" : "example/example",
"generatorVersion" : "7.3.0"
},
"General": {
"apiFolder" : "apis",
"outputFolder": "generated"
},
"Dotnet" : {
"ServerFolder": "dotnet-api",
"CommonFolder": "dotnet-models",
"ClientFolder": "dotnet-client"
},
"Javascript" : {
"Folder": "javascript-client"
},
"Java": {
"Folder": "java"
},
"OpenApi" : {
"OutputFolder": "openapi",
"GeneratorConfigFile" : "openapi-generator-config.yaml",
"GeneratorIgnoreFile" : ".openapi-generator-ignore",
"specExtension": ".yaml",
"schemasIdentifier": "-schemas",
"configExtension": ".json",
"configIdentifier": "-config"
},
"Templates" : {
"folder": "templates",
"plantUml": "plantUml.mustache",
"dotnetServerGeneratorConfig": "dotnet-server-generator-config.mustache",
"dotnetClientGeneratorConfig": "dotnet-client-generator-config.mustache",
"javaGeneratorConfig": "java-generator-config.mustache",
"serverIgnore": "dotnet-server-ignore.mustache",
"clientIgnore": "dotnet-client-ignore.mustache"
},
"DockerImages": {
"javascriptImage":"temporaly_missing_please_fill_javascripImage_field_in_appsettings.json",
"openapiGeneratorImageName":"openapitools/openapi-generator-cli",
"openapiGeneratorVersion":"7.3.0",
"openapiGeneratorImage":"openapitools/openapi-generator-cli:v7.3.0",
"dotnetSdkImage":"mcr.microsoft.com/dotnet/sdk:8.0",
"mavenImage":"maven:3.9.5"
},
"Publish": {
"npmRegistry":"https://npm-registry-sample.url",
"nugetRegistry":"https://nuget-registry-sample.url",
"mavenRegistry":"https://maven-registry-sample.url"
},
"Credentials": {
"token": "TOKEN_SAMPLE",
"email":"EMAIL_SAMPLE",
"username": "USERNAME_SAMPLE",
"password": "PASSWORD_SAMPLE",
"always-auth": "true"
}
}