Skip to content

Commit 766620b

Browse files
committed
Merge branch 'central-package-version-management-option' of https://github.com/Urganot/openapi-generator into Urganot-central-package-version-management-option
2 parents 85c81be + e8481c6 commit 766620b

File tree

60 files changed

+5367
-383
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+5367
-383
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
generatorName: aspnetcore
2+
outputDir: samples/server/petstore/aspnetcore-8.0-use-centralized-package-version-management
3+
inputSpec: modules/openapi-generator/src/test/resources/3_0/aspnetcore/petstore.yaml
4+
templateDir: modules/openapi-generator/src/main/resources/aspnetcore/3.0
5+
additionalProperties:
6+
packageGuid: '{3C799344-F285-4669-8FD5-7ED9B795D5C5}'
7+
aspnetCoreVersion: "8.0"
8+
userSecretsGuid: 'cb87e868-8646-48ef-9bb6-344b537d0d37'
9+
centralizedPackageVersionManagement: "jghfj"

docs/generators/aspnetcore.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
2020
| ------ | ----------- | ------ | ------- |
2121
|aspnetCoreVersion|ASP.NET Core version: 6.0, 5.0, 3.1, 3.0, 2.2, 2.1, 2.0 (deprecated)|<dl><dt>**2.0**</dt><dd>ASP.NET Core 2.0</dd><dt>**2.1**</dt><dd>ASP.NET Core 2.1</dd><dt>**2.2**</dt><dd>ASP.NET Core 2.2</dd><dt>**3.0**</dt><dd>ASP.NET Core 3.0</dd><dt>**3.1**</dt><dd>ASP.NET Core 3.1</dd><dt>**5.0**</dt><dd>ASP.NET Core 5.0</dd><dt>**6.0**</dt><dd>ASP.NET Core 6.0</dd><dt>**7.0**</dt><dd>ASP.NET Core 7.0</dd><dt>**8.0**</dt><dd>ASP.NET Core 8.0</dd></dl>|8.0|
2222
|buildTarget|Target to build an application or library|<dl><dt>**program**</dt><dd>Generate code for a standalone server</dd><dt>**library**</dt><dd>Generate code for a server abstract class library</dd></dl>|program|
23+
|centralizedPackageVersionManagementOptOut|Opt out of centralized package version management. Set this if you have a Directory.Packages.pros file but want this project to ignore it. https://devblogs.microsoft.com/nuget/introducing-central-package-management/#disabling-central-package-management| |false|
2324
|classModifier|Class Modifier for controller classes: Empty string or abstract.| ||
2425
|compatibilityVersion|ASP.Net Core CompatibilityVersion| |Version_2_2|
2526
|enumNameSuffix|Suffix that will be appended to all enum names.| |Enum|
@@ -46,6 +47,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
4647
|sortParamsByRequiredFlag|Sort method arguments to place required parameters before optional parameters.| |true|
4748
|sourceFolder|source folder for generated code| |src|
4849
|swashbuckleVersion|Swashbuckle version: 3.0.0 (deprecated), 4.0.0 (deprecated), 5.0.0 (deprecated), 6.4.0|<dl><dt>**3.0.0**</dt><dd>Swashbuckle 3.0.0</dd><dt>**4.0.0**</dt><dd>Swashbuckle 4.0.0</dd><dt>**5.0.0**</dt><dd>Swashbuckle 5.0.0</dd><dt>**6.4.0**</dt><dd>Swashbuckle 6.4.0</dd></dl>|6.4.0|
50+
|useCentralizedPackageVersionManagement|Uses centralized package version management. https://devblogs.microsoft.com/nuget/introducing-central-package-management/#disabling-central-package-management| |false|
4951
|useCollection|Deserialize array types to Collection&lt;T&gt; instead of List&lt;T&gt;.| |false|
5052
|useDateTimeForDate|Use DateTime to model date properties even if DateOnly supported. (.net 6.0+ only)| |false|
5153
|useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false|

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetServerCodegen.java

Lines changed: 67 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.swagger.v3.oas.models.OpenAPI;
2222
import io.swagger.v3.oas.models.media.Schema;
2323
import io.swagger.v3.parser.util.SchemaTypeUtil;
24+
import lombok.Getter;
2425
import lombok.Setter;
2526
import org.openapitools.codegen.*;
2627
import org.openapitools.codegen.meta.features.*;
@@ -64,8 +65,11 @@ public class AspNetServerCodegen extends AbstractCSharpCodegen {
6465
public static final String USE_NEWTONSOFT = "useNewtonsoft";
6566
public static final String USE_DEFAULT_ROUTING = "useDefaultRouting";
6667
public static final String NEWTONSOFT_VERSION = "newtonsoftVersion";
68+
public static final String CENTRALIZED_PACKAGE_VERSION_MANAGEMENT = "centralizedPackageVersionManagement";
69+
public static final String USE_PACKAGE_VERSIONS = "usePackageVersions";
6770

68-
@Setter private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
71+
@Setter
72+
private String packageGuid = "{" + randomUUID().toString().toUpperCase(Locale.ROOT) + "}";
6973
private String userSecretsGuid = randomUUID().toString();
7074

7175
protected final Logger LOGGER = LoggerFactory.getLogger(AspNetServerCodegen.class);
@@ -91,6 +95,27 @@ public class AspNetServerCodegen extends AbstractCSharpCodegen {
9195
private boolean useNewtonsoft = true;
9296
private boolean useDefaultRouting = true;
9397
private String newtonsoftVersion = "3.0.0";
98+
protected CliOption centralizedPackageVersionManagement = new CliOption(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT,"Option to control the usage of centralized package version management. https://devblogs.microsoft.com/nuget/introducing-central-package-management/#disabling-central-package-management");
99+
100+
101+
@Getter
102+
private enum CentralizedPackageVersionOptions {
103+
Default("default","Property in project wont be used"),
104+
Use("use","Centralized package version management will be used"),
105+
OptOut("optout","Opt out of centralized package version management. Set this if you have a Directory.Packages.pros file but want this project to ignore it. https://devblogs.microsoft.com/nuget/introducing-central-package-management/#disabling-central-package-management");
106+
107+
private final String Value;
108+
private final String Description;
109+
110+
CentralizedPackageVersionOptions(String Value,String Description) {
111+
this.Value = Value;
112+
this.Description = Description;
113+
}
114+
115+
public String GetDescription(){
116+
return this.Description;
117+
}
118+
}
94119

95120
public AspNetServerCodegen() {
96121
super();
@@ -249,6 +274,8 @@ public AspNetServerCodegen() {
249274
"Uses the Newtonsoft JSON library.",
250275
useNewtonsoft);
251276

277+
addCentralizedPackageVersionManagementOption();
278+
252279
addOption(NEWTONSOFT_VERSION,
253280
"Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+",
254281
newtonsoftVersion);
@@ -303,11 +330,21 @@ public AspNetServerCodegen() {
303330
addOption(modelClassModifier.getOpt(), modelClassModifier.getDescription(), modelClassModifier.getOptValue());
304331
}
305332

333+
private void addCentralizedPackageVersionManagementOption(){
334+
centralizedPackageVersionManagement.setType("String");
335+
for (CentralizedPackageVersionOptions option : CentralizedPackageVersionOptions.values() ) {
336+
centralizedPackageVersionManagement.addEnum(option.Value, option.GetDescription());
337+
}
338+
centralizedPackageVersionManagement.setDefault(CentralizedPackageVersionOptions.Default.Value);
339+
centralizedPackageVersionManagement.setOptValue(centralizedPackageVersionManagement.getDefault());
340+
cliOptions.add(centralizedPackageVersionManagement);
341+
}
342+
306343
@Deprecated
307344
@Override
308345
protected Set<String> getNullableTypes() {
309346
return new HashSet<>(Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double",
310-
"DateTime", "DateOnly", "DateTimeOffset", "Guid"));
347+
"DateTime", "DateOnly", "DateTimeOffset", "Guid"));
311348
}
312349

313350
@Override
@@ -378,6 +415,8 @@ public void processOpts() {
378415
newtonsoftVersion = (String) additionalProperties.get(NEWTONSOFT_VERSION);
379416
}
380417

418+
setCentralizedPackageVersionManagementSettings();
419+
381420
// Check for the modifiers etc.
382421
// The order of the checks is important.
383422
setBuildTarget();
@@ -680,6 +719,29 @@ private void setBuildTarget() {
680719
additionalProperties.put(IS_LIBRARY, isLibrary);
681720
}
682721

722+
/**
723+
* This method sets both the USE_CENTRALIZED_PACKAGE_VERSION_MANAGEMENT and CENTRALIZED_PACKAGE_VERSION_MANAGEMENT_OPT_OUT setting
724+
*/
725+
private void setCentralizedPackageVersionManagementSettings() {
726+
727+
additionalProperties.put(USE_PACKAGE_VERSIONS, true);
728+
729+
if(additionalProperties.containsKey(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT)) {
730+
var chosenOption = additionalProperties.get(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT);
731+
732+
if (chosenOption == CentralizedPackageVersionOptions.Default) {
733+
additionalProperties.remove(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT);
734+
}
735+
if (chosenOption == CentralizedPackageVersionOptions.Use) {
736+
additionalProperties.replace(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT,"true");
737+
additionalProperties.put(USE_PACKAGE_VERSIONS, false);
738+
}
739+
if (chosenOption == CentralizedPackageVersionOptions.OptOut) {
740+
additionalProperties.replace(CENTRALIZED_PACKAGE_VERSION_MANAGEMENT,"false");
741+
}
742+
}
743+
}
744+
683745
private void setAspnetCoreVersion(String packageFolder) {
684746
setCliOption(aspnetCoreVersion);
685747

@@ -808,10 +870,10 @@ private void setIsFramework() {
808870
}
809871

810872
private void setAddititonalPropertyForFramework() {
811-
String targetFramework = ((String)additionalProperties.get(TARGET_FRAMEWORK));
873+
String targetFramework = ((String) additionalProperties.get(TARGET_FRAMEWORK));
812874
if (targetFramework.startsWith("net6.0") ||
813-
targetFramework.startsWith("net7.0") ||
814-
targetFramework.startsWith("net8.0")) {
875+
targetFramework.startsWith("net7.0") ||
876+
targetFramework.startsWith("net8.0")) {
815877
additionalProperties.put(NET_60_OR_LATER, true);
816878
}
817879
}

modules/openapi-generator/src/main/resources/aspnetcore/3.0/ModelsProject.csproj.mustache

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,32 @@
1313
<OutputType>Library</OutputType>
1414
<AssemblyName>{{modelPackage}}</AssemblyName>
1515
<PackageId>{{modelPackage}}</PackageId>
16+
{{#useCentralizedPackageVersionManagement}}
17+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
18+
{{/useCentralizedPackageVersionManagement}}
19+
{{#centralizedPackageVersionManagementOptOut}}
20+
<ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
21+
{{/centralizedPackageVersionManagementOptOut}}
22+
1623
</PropertyGroup>
1724
<ItemGroup>
18-
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
25+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" {{^useCentralizedPackageVersionManagement}}Version="{{aspnetCoreVersion}}.0" {{/useCentralizedPackageVersionManagement}}/>
1926
{{#useSwashbuckle}}
20-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
27+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" {{^useCentralizedPackageVersionManagement}}Version="1.10.8" {{/useCentralizedPackageVersionManagement}}/>
2128
{{#useNewtonsoft}}
22-
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="{{swashbuckleVersion}}"/>
29+
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" {{^useCentralizedPackageVersionManagement}}Version="{{swashbuckleVersion}}" {{/useCentralizedPackageVersionManagement}}/>
2330
{{/useNewtonsoft}}
2431
{{^useNewtonsoft}}
25-
<PackageReference Include="Swashbuckle.AspNetCore" Version="{{swashbuckleVersion}}"/>
32+
<PackageReference Include="Swashbuckle.AspNetCore" {{^useCentralizedPackageVersionManagement}}Version="{{swashbuckleVersion}}" {{/useCentralizedPackageVersionManagement}}/>
2633
{{/useNewtonsoft}}
27-
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="{{swashbuckleVersion}}" />
34+
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" {{^useCentralizedPackageVersionManagement}}Version="{{swashbuckleVersion}}" {{/useCentralizedPackageVersionManagement}}/>
2835
{{/useSwashbuckle}}
2936
{{^useSwashbuckle}}
3037
{{#useNewtonsoft}}
31-
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="{{newtonsoftVersion}}" />
38+
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" {{^useCentralizedPackageVersionManagement}}Version="{{newtonsoftVersion}}" {{/useCentralizedPackageVersionManagement}}/>
3239
{{/useNewtonsoft}}
3340
{{/useSwashbuckle}}
34-
<PackageReference Include="JsonSubTypes" Version="1.8.0" />
41+
<PackageReference Include="JsonSubTypes" {{^useCentralizedPackageVersionManagement}}Version="1.8.0" {{/useCentralizedPackageVersionManagement}}/>
3542
</ItemGroup>
3643
<ItemGroup>
3744
</ItemGroup>
Lines changed: 60 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,61 @@
11
<Project Sdk="{{projectSdk}}">
2-
<PropertyGroup>
3-
<Description>{{packageDescription}}{{^packageDescription}}{{packageName}}{{/packageDescription}}</Description>
4-
<Copyright>{{packageCopyright}}</Copyright>
5-
<Authors>{{packageAuthors}}</Authors>
6-
<TargetFramework>{{targetFramework}}</TargetFramework>
7-
<GenerateDocumentationFile>true</GenerateDocumentationFile>
8-
<PreserveCompilationContext>true</PreserveCompilationContext>
9-
<Version>{{packageVersion}}</Version>
10-
{{#nullableReferenceTypes}}
11-
<Nullable>annotations</Nullable>
12-
{{/nullableReferenceTypes}}
13-
{{#isLibrary}}
14-
<OutputType>Library</OutputType>
15-
{{/isLibrary}}
16-
<AssemblyName>{{packageName}}</AssemblyName>
17-
<PackageId>{{packageName}}</PackageId>
18-
<UserSecretsId>{{userSecretsGuid}}</UserSecretsId>
19-
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
20-
<DockerfileContext>..\..</DockerfileContext>
21-
</PropertyGroup>
22-
<ItemGroup>
23-
{{#useSeparateModelProject}}
24-
<ProjectReference Include="../{{modelPackage}}/{{modelPackage}}.csproj"/>
25-
{{/useSeparateModelProject}}
26-
{{#useFrameworkReference}}
27-
{{#isLibrary}}
28-
<FrameworkReference Include="Microsoft.AspNetCore.App" />
29-
{{/isLibrary}}
30-
{{/useFrameworkReference}}
31-
{{^useFrameworkReference}}
32-
<PackageReference Include="Microsoft.AspNetCore.App" />
33-
{{/useFrameworkReference}}
34-
{{^useSeparateModelProject}}
35-
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="{{aspnetCoreVersion}}.0"/>
36-
{{/useSeparateModelProject}}
37-
{{#useSwashbuckle}}
38-
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.8" />
39-
{{#useNewtonsoft}}
40-
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="{{swashbuckleVersion}}"/>
41-
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="{{swashbuckleVersion}}"/>
42-
{{/useNewtonsoft}}
43-
{{^useNewtonsoft}}
44-
<PackageReference Include="Swashbuckle.AspNetCore" Version="{{swashbuckleVersion}}"/>
45-
{{/useNewtonsoft}}
46-
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="{{swashbuckleVersion}}" />
47-
{{/useSwashbuckle}}
48-
{{^useSwashbuckle}}
49-
{{#useNewtonsoft}}
50-
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="{{newtonsoftVersion}}" />
51-
{{/useNewtonsoft}}
52-
{{/useSwashbuckle}}
53-
<PackageReference Include="JsonSubTypes" Version="1.8.0" />
54-
</ItemGroup>
55-
<ItemGroup>
56-
<!--<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="{{aspnetCoreVersion}}.0" />-->
57-
</ItemGroup>
58-
</Project>
2+
<PropertyGroup>
3+
<Description>{{packageDescription}}{{^packageDescription}}{{packageName}}{{/packageDescription}}</Description>
4+
<Copyright>{{packageCopyright}}</Copyright>
5+
<Authors>{{packageAuthors}}</Authors>
6+
<TargetFramework>{{targetFramework}}</TargetFramework>
7+
<GenerateDocumentationFile>true</GenerateDocumentationFile>
8+
<PreserveCompilationContext>true</PreserveCompilationContext>
9+
<Version>{{packageVersion}}</Version>
10+
{{#nullableReferenceTypes}}
11+
<Nullable>annotations</Nullable>
12+
{{/nullableReferenceTypes}}
13+
{{#isLibrary}}
14+
<OutputType>Library</OutputType>
15+
{{/isLibrary}}
16+
<AssemblyName>{{packageName}}</AssemblyName>
17+
<PackageId>{{packageName}}</PackageId>
18+
<UserSecretsId>{{userSecretsGuid}}</UserSecretsId>
19+
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
20+
<DockerfileContext>..\..</DockerfileContext>
21+
{{#centralizedPackageVersionManagement}}
22+
<ManagePackageVersionsCentrally>{{.}}</ManagePackageVersionsCentrally>
23+
{{/centralizedPackageVersionManagement}}
24+
</PropertyGroup>
25+
<ItemGroup>
26+
{{#useSeparateModelProject}}
27+
<ProjectReference Include="../{{modelPackage}}/{{modelPackage}}.csproj"/>
28+
{{/useSeparateModelProject}}
29+
{{#useFrameworkReference}}
30+
{{#isLibrary}}
31+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
32+
{{/isLibrary}}
33+
{{/useFrameworkReference}}
34+
{{^useFrameworkReference}}
35+
<PackageReference Include="Microsoft.AspNetCore.App" />
36+
{{/useFrameworkReference}}
37+
{{^useSeparateModelProject}}
38+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" {{#usePackageVersions}}Version="{{aspnetCoreVersion}}.0" {{/usePackageVersions}}/>
39+
{{/useSeparateModelProject}}
40+
{{#useSwashbuckle}}
41+
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" {{#usePackageVersions}}Version="1.10.8" {{/usePackageVersions}}/>
42+
{{#useNewtonsoft}}
43+
<PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" {{#usePackageVersions}}Version="{{swashbuckleVersion}}" {{/usePackageVersions}}/>
44+
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" {{#usePackageVersions}}Version="{{swashbuckleVersion}}" {{/usePackageVersions}}/>
45+
{{/useNewtonsoft}}
46+
{{^useNewtonsoft}}
47+
<PackageReference Include="Swashbuckle.AspNetCore" {{#usePackageVersions}}Version="{{swashbuckleVersion}}" {{/usePackageVersions}}/>
48+
{{/useNewtonsoft}}
49+
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" {{#usePackageVersions}}Version="{{swashbuckleVersion}}" {{/usePackageVersions}}/>
50+
{{/useSwashbuckle}}
51+
{{^useSwashbuckle}}
52+
{{#useNewtonsoft}}
53+
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" {{#usePackageVersions}}Version="{{newtonsoftVersion}}" {{/usePackageVersions}}/>
54+
{{/useNewtonsoft}}
55+
{{/useSwashbuckle}}
56+
<PackageReference Include="JsonSubTypes" {{#usePackageVersions}}Version="1.8.0" {{/usePackageVersions}}/>
57+
</ItemGroup>
58+
<ItemGroup>
59+
<!--<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="{{aspnetCoreVersion}}.0" />-->
60+
</ItemGroup>
61+
</Project>

0 commit comments

Comments
 (0)