Skip to content

Commit

Permalink
Support NSWAG_NOLOG and NSWAG_NOVERSION environment variables (#4703)
Browse files Browse the repository at this point in the history
  • Loading branch information
lahma authored Feb 4, 2024
1 parent 9db9f1b commit 2add8c6
Show file tree
Hide file tree
Showing 23 changed files with 95 additions and 100 deletions.
11 changes: 9 additions & 2 deletions src/NSwag.CodeGeneration/DefaultTemplateFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
// <author>Rico Suter, [email protected]</author>
//-----------------------------------------------------------------------

using System;
using System.Reflection;
using NJsonSchema.CodeGeneration;
using System.IO;
Expand All @@ -27,7 +28,13 @@ public DefaultTemplateFactory(CodeGeneratorSettingsBase settings, Assembly[] ass
/// <returns>The toolchain version.</returns>
protected override string GetToolchainVersion()
{
return OpenApiDocument.ToolchainVersion + " (NJsonSchema v" + base.GetToolchainVersion() + ")";
if (!string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "true", StringComparison.OrdinalIgnoreCase)
&& !string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "1", StringComparison.OrdinalIgnoreCase))
{
return $"{OpenApiDocument.ToolchainVersion} (NJsonSchema v{base.GetToolchainVersion()})";
}

return "";
}

/// <summary>Tries to load an embedded Liquid template.</summary>
Expand All @@ -38,7 +45,7 @@ protected override string GetEmbeddedLiquidTemplate(string language, string temp
{
template = template.TrimEnd('!');
var assembly = GetLiquidAssembly("NSwag.CodeGeneration." + language);
var resourceName = "NSwag.CodeGeneration." + language + ".Templates." + template + ".liquid";
var resourceName = $"NSwag.CodeGeneration.{language}.Templates.{template}.liquid";

var resource = assembly.GetManifestResourceStream(resourceName);
if (resource != null)
Expand Down
11 changes: 7 additions & 4 deletions src/NSwag.Commands/NSwagCommandProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,12 @@ public NSwagCommandProcessor(IConsoleHost host)
/// <returns>The result.</returns>
public async Task<int> ProcessAsync(string[] args)
{
_host.WriteMessage("toolchain v" + OpenApiDocument.ToolchainVersion +
" (NJsonSchema v" + JsonSchema.ToolchainVersion + ")\n");
_host.WriteMessage("Visit http://NSwag.org for more information.\n");
if (!string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOLOGO"), "true", StringComparison.OrdinalIgnoreCase)
&& !string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOLOGO"), "1", StringComparison.OrdinalIgnoreCase))
{
_host.WriteMessage($"toolchain v{OpenApiDocument.ToolchainVersion} (NJsonSchema v{JsonSchema.ToolchainVersion}){Environment.NewLine}");
_host.WriteMessage($"Visit http://NSwag.org for more information.{Environment.NewLine}");
}

WriteBinDirectory();

Expand All @@ -62,7 +65,7 @@ public async Task<int> ProcessAsync(string[] args)
await processor.ProcessAsync(args).ConfigureAwait(false);
stopwatch.Stop();

_host.WriteMessage("\nDuration: " + stopwatch.Elapsed + "\n");
_host.WriteMessage($"{Environment.NewLine}Duration: {stopwatch.Elapsed}{Environment.NewLine}");
}
catch (Exception exception)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
35 changes: 7 additions & 28 deletions src/NSwag.ConsoleCore.Tests/GenerateSampleSpecificationTests.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using VerifyXunit;
using Xunit;

namespace NSwag.ConsoleCore.Tests
{
[UsesVerify]
public partial class GenerateSampleSpecificationTests
public class GenerateSampleSpecificationTests
{
[Theory]
[InlineData("NSwag.Sample.NET60", "net6.0", false)]
Expand Down Expand Up @@ -46,7 +45,11 @@ public async Task Should_generate_openapi_for_project(string projectName, string
Arguments = executablePath + " run " + nswagJsonPath,
CreateNoWindow = true,
RedirectStandardError = true,
RedirectStandardOutput = true
RedirectStandardOutput = true,
Environment =
{
{ "NSWAG_NOVERSION", "true" }
}
});

try
Expand All @@ -63,11 +66,10 @@ public async Task Should_generate_openapi_for_project(string projectName, string
{
var output = await process.StandardOutput.ReadToEndAsync();
var error = await process.StandardError.ReadToEndAsync();
Assert.True(false, output + error);
Assert.Fail(output + error);
}

var json = await File.ReadAllTextAsync(openApiJsonPath);
json = RemoveVersionIdentifiersFromApi(json);
await Verifier.Verify(json).UseParameters(projectName, targetFramework, generatesCode);

if (generatesCode)
Expand All @@ -81,42 +83,19 @@ public async Task Should_generate_openapi_for_project(string projectName, string
private static async Task CheckCSharpControllersAsync(string projectName, string targetFramework, bool generatesCode, string generatedControllersCsPath)
{
var code = await File.ReadAllTextAsync(generatedControllersCsPath);
code = RemoveVersionIdentifiersFromGeneratedCode(code);
await Verifier.Verify(code).UseMethodName(nameof(CheckCSharpControllersAsync)).UseParameters(projectName, targetFramework, generatesCode);
}

private static async Task CheckCSharpClientsAsync(string projectName, string targetFramework, bool generatesCode, string generatedClientsCsPath)
{
var code = await File.ReadAllTextAsync(generatedClientsCsPath);
code = RemoveVersionIdentifiersFromGeneratedCode(code);
await Verifier.Verify(code).UseMethodName(nameof(CheckCSharpClientsAsync)).UseParameters(projectName, targetFramework, generatesCode);
}

private static async Task CheckTypeScriptAsync(string projectName, string targetFramework, bool generatesCode, string generatedClientsTsPath)
{
var code = await File.ReadAllTextAsync(generatedClientsTsPath);
code = RemoveVersionIdentifiersFromGeneratedCode(code);
await Verifier.Verify(code).UseMethodName(nameof(CheckTypeScriptAsync)).UseParameters(projectName, targetFramework, generatesCode);
}

private static string RemoveVersionIdentifiersFromApi(string input)
{
var cleaned = GeneratedApiCleanupRegex().Replace(input, "\"x-generator\": \"NSwag\"");
return cleaned;
}

private static string RemoveVersionIdentifiersFromGeneratedCode(string input)
{
var cleaned = GeneratedCodeCleanupRegex().Replace(input, "");
return cleaned;
}

[GeneratedRegex("""
"x-generator": "NSwag v[\d\.]+ \(NJsonSchema v[\d\.]+ \(Newtonsoft.Json v[\d\.]+\)\)"
""")]
private static partial Regex GeneratedApiCleanupRegex();

[GeneratedRegex(@"[v\d\.]+ \(NJsonSchema v[\d\.]+ \(Newtonsoft.Json v[\d\.]+\)\)")]
private static partial Regex GeneratedCodeCleanupRegex();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,14 @@ private async Task<OpenApiDocument> CreateDocumentAsync()
await OpenApiDocument.FromJsonAsync(Settings.DocumentTemplate).ConfigureAwait(false) :
new OpenApiDocument();

document.Generator = $"NSwag v{OpenApiDocument.ToolchainVersion} (NJsonSchema v{JsonSchema.ToolchainVersion})";
var version = "";
if (!string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "true", StringComparison.OrdinalIgnoreCase)
&& !string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "1", StringComparison.OrdinalIgnoreCase))
{
version = $" v{OpenApiDocument.ToolchainVersion} (NJsonSchema v{JsonSchema.ToolchainVersion})";
}

document.Generator = $"NSwag{version}";
document.SchemaType = Settings.SchemaSettings.SchemaType;

if (document.Info == null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,14 @@ private async Task<OpenApiDocument> CreateDocumentAsync()
await OpenApiDocument.FromJsonAsync(Settings.DocumentTemplate).ConfigureAwait(false) :
new OpenApiDocument();

document.Generator = "NSwag v" + OpenApiDocument.ToolchainVersion + " (NJsonSchema v" + JsonSchema.ToolchainVersion + ")";
var version = "";
if (!string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "true", StringComparison.OrdinalIgnoreCase)
&& !string.Equals(Environment.GetEnvironmentVariable("NSWAG_NOVERSION"), "1", StringComparison.OrdinalIgnoreCase))
{
version = $" v{OpenApiDocument.ToolchainVersion} (NJsonSchema v{JsonSchema.ToolchainVersion})";
}

document.Generator = $"NSwag{version}";
document.SchemaType = Settings.SchemaSettings.SchemaType;

document.Consumes = new List<string> { "application/json" };
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.Sample.NET60/openapi.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"x-generator": "NSwag v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))",
"x-generator": "NSwag",
"openapi": "3.0.0",
"info": {
"title": "My Title",
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.Sample.NET60Minimal/openapi.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"x-generator": "NSwag v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))",
"x-generator": "NSwag",
"openapi": "3.0.0",
"info": {
"title": "Minimal API",
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.Sample.NET70/openapi.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"x-generator": "NSwag v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))",
"x-generator": "NSwag",
"openapi": "3.0.0",
"info": {
"title": "My Title",
Expand Down
34 changes: 15 additions & 19 deletions src/NSwag.Sample.NET70Minimal/GeneratedClientsCs.gen
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand All @@ -20,13 +20,12 @@ namespace MyNamespace
{
using System = global::System;

[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "")]
public partial class Client
{
#pragma warning disable 8618
#pragma warning disable 8618 // Set by constructor via BaseUrl property
private string _baseUrl;
#pragma warning restore 8618

#pragma warning restore 8618 // Set by constructor via BaseUrl property
private System.Net.Http.HttpClient _httpClient;
private static System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings, true);

Expand All @@ -46,7 +45,6 @@ namespace MyNamespace
public string BaseUrl
{
get { return _baseUrl; }
[System.Diagnostics.CodeAnalysis.MemberNotNull(nameof(_baseUrl))]
set
{
_baseUrl = value;
Expand Down Expand Up @@ -83,7 +81,7 @@ namespace MyNamespace
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl);
// Operation Path: ""

PrepareRequest(client_, request_, urlBuilder_);
Expand Down Expand Up @@ -164,7 +162,7 @@ namespace MyNamespace
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl);
// Operation Path: "sum/{a}/{b}"
urlBuilder_.Append("sum/");
urlBuilder_.Append(System.Uri.EscapeDataString(ConvertToString(a, System.Globalization.CultureInfo.InvariantCulture)));
Expand Down Expand Up @@ -246,7 +244,7 @@ namespace MyNamespace
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl);
// Operation Path: "abs({a})"
urlBuilder_.Append("abs(");
urlBuilder_.Append(System.Uri.EscapeDataString(ConvertToString(a, System.Globalization.CultureInfo.InvariantCulture)));
Expand Down Expand Up @@ -327,7 +325,7 @@ namespace MyNamespace
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl);
// Operation Path: "id:{id}"
urlBuilder_.Append("id:");
urlBuilder_.Append(System.Uri.EscapeDataString(ConvertToString(id, System.Globalization.CultureInfo.InvariantCulture)));
Expand Down Expand Up @@ -496,13 +494,12 @@ namespace MyNamespace
}
}

[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "")]
public partial class ExampleClient
{
#pragma warning disable 8618
#pragma warning disable 8618 // Set by constructor via BaseUrl property
private string _baseUrl;
#pragma warning restore 8618

#pragma warning restore 8618 // Set by constructor via BaseUrl property
private System.Net.Http.HttpClient _httpClient;
private static System.Lazy<Newtonsoft.Json.JsonSerializerSettings> _settings = new System.Lazy<Newtonsoft.Json.JsonSerializerSettings>(CreateSerializerSettings, true);

Expand All @@ -522,7 +519,6 @@ namespace MyNamespace
public string BaseUrl
{
get { return _baseUrl; }
[System.Diagnostics.CodeAnalysis.MemberNotNull(nameof(_baseUrl))]
set
{
_baseUrl = value;
Expand Down Expand Up @@ -559,7 +555,7 @@ namespace MyNamespace
request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/octet-stream"));

var urlBuilder_ = new System.Text.StringBuilder();
if (!string.IsNullOrEmpty(_baseUrl)) urlBuilder_.Append(_baseUrl);
if (!string.IsNullOrEmpty(BaseUrl)) urlBuilder_.Append(BaseUrl);
// Operation Path: "examples"
urlBuilder_.Append("examples");

Expand Down Expand Up @@ -727,7 +723,7 @@ namespace MyNamespace



[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "")]
public partial class FileResponse : System.IDisposable
{
private System.IDisposable _client;
Expand Down Expand Up @@ -764,7 +760,7 @@ namespace MyNamespace
}


[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "")]
public partial class ApiException : System.Exception
{
public int StatusCode { get; private set; }
Expand All @@ -787,7 +783,7 @@ namespace MyNamespace
}
}

[System.CodeDom.Compiler.GeneratedCode("NSwag", "14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0))")]
[System.CodeDom.Compiler.GeneratedCode("NSwag", "")]
public partial class ApiException<TResult> : ApiException
{
public TResult Result { get; private set; }
Expand Down
2 changes: 1 addition & 1 deletion src/NSwag.Sample.NET70Minimal/GeneratedClientsTs.gen
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//----------------------
// <auto-generated>
// Generated using the NSwag toolchain v14.0.3.0 (NJsonSchema v11.0.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)
// Generated using the NSwag toolchain v (http://NSwag.org)
// </auto-generated>
//----------------------

Expand Down
Loading

0 comments on commit 2add8c6

Please sign in to comment.