-
Notifications
You must be signed in to change notification settings - Fork 57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
#196 Publish a global dotnet tool (AsyncAPI.Saunter.Generator.Cli) #217
base: main
Are you sure you want to change the base?
Changes from 28 commits
6318f80
2162d72
55895a2
6ba3409
74c9cff
cc5d952
569a30a
0419101
b29a1ab
12593dc
93dc17e
e701660
d9b558c
f0af6d1
1ebb77c
ba1e856
90dcff1
a746e4d
8e7a01f
240c9ed
715a62d
e181850
ab5b375
183a4e8
8d2fd49
a9d544a
72dc742
7b22ce0
ba8dd8e
3d6c0ea
8a4f5c6
07b4273
e846dd9
fc7cccd
4f1064e
74260a8
5fe8c6e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
* text eol=lf |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,4 +7,6 @@ runs: | |
id: setup-dotnet | ||
uses: actions/setup-dotnet@v1 | ||
with: | ||
dotnet-version: "6.0.x" | ||
dotnet-version: | | ||
6.0.x | ||
8.0.x |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
<Project> | ||
<ItemGroup> | ||
<!-- Make it possible for NSubstitube to make substitues of internal classes --> | ||
<InternalsVisibleTo Include="DynamicProxyGenAssembly2" /> | ||
|
||
<!-- Make project internals visible to their respective .Tests project --> | ||
<InternalsVisibleTo Include="$(AssemblyName).Tests" /> | ||
</ItemGroup> | ||
</Project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
specs/ | ||
streetlights.json | ||
streetlights.yml | ||
streetlights.yaml |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
using System.Linq; | ||
using Microsoft.AspNetCore.Builder; | ||
using Microsoft.AspNetCore.Http; | ||
using Microsoft.Extensions.DependencyInjection; | ||
using Microsoft.Extensions.Hosting; | ||
using Microsoft.Extensions.Logging; | ||
using Microsoft.Extensions.Options; | ||
using NLog; | ||
using NLog.Web; | ||
using Saunter; | ||
using Saunter.AsyncApiSchema.v2; | ||
using StreetlightsAPI; | ||
|
||
LogManager.Setup().LoadConfigurationFromAppSettings(); | ||
|
||
var builder = WebApplication.CreateBuilder(args); | ||
builder.Host.ConfigureLogging(logging => logging.AddSimpleConsole(console => console.SingleLine = true)); | ||
Check warning on line 17 in examples/StreetlightsAPI.TopLevelStatement/Program.cs GitHub Actions / fmt
Check warning on line 17 in examples/StreetlightsAPI.TopLevelStatement/Program.cs GitHub Actions / build
|
||
builder.Host.UseNLog(); | ||
|
||
// Add Saunter to the application services. | ||
builder.Services.AddAsyncApiSchemaGeneration(options => | ||
{ | ||
options.AssemblyMarkerTypes = [typeof(StreetlightMessageBus)]; | ||
|
||
options.Middleware.UiTitle = "Streetlights API"; | ||
|
||
options.AsyncApi = new AsyncApiDocument | ||
{ | ||
Info = new Info("Streetlights API", "1.0.0") | ||
{ | ||
Description = "The Smartylighting Streetlights API allows you to remotely manage the city lights.", | ||
License = new License("Apache 2.0") | ||
{ | ||
Url = "https://www.apache.org/licenses/LICENSE-2.0" | ||
} | ||
}, | ||
Servers = | ||
{ | ||
["mosquitto"] = new Server("test.mosquitto.org", "mqtt"), | ||
["webapi"] = new Server("localhost:5000", "http"), | ||
}, | ||
}; | ||
}); | ||
|
||
builder.Services.AddScoped<IStreetlightMessageBus, StreetlightMessageBus>(); | ||
builder.Services.AddControllers(); | ||
|
||
var app = builder.Build(); | ||
|
||
app.UseDeveloperExceptionPage(); | ||
|
||
app.UseRouting(); | ||
app.UseCors(configure => configure.AllowAnyOrigin().AllowAnyMethod()); | ||
|
||
app.UseEndpoints(endpoints => | ||
Check warning on line 55 in examples/StreetlightsAPI.TopLevelStatement/Program.cs GitHub Actions / fmt
Check warning on line 55 in examples/StreetlightsAPI.TopLevelStatement/Program.cs GitHub Actions / build
|
||
{ | ||
endpoints.MapAsyncApiDocuments(); | ||
endpoints.MapAsyncApiUi(); | ||
|
||
endpoints.MapControllers(); | ||
}); | ||
|
||
await app.StartAsync(); | ||
|
||
// Print the AsyncAPI doc location | ||
var logger = app.Services.GetService<ILoggerFactory>().CreateLogger<Program>(); | ||
var options = app.Services.GetService<IOptions<AsyncApiOptions>>(); | ||
var addresses = app.Urls; | ||
logger.LogInformation("AsyncAPI doc available at: {URL}", $"{addresses.FirstOrDefault()}{options.Value.Middleware.Route}"); | ||
logger.LogInformation("AsyncAPI UI available at: {URL}", $"{addresses.FirstOrDefault()}{options.Value.Middleware.UiBaseRoute}"); | ||
|
||
// Redirect base url to AsyncAPI UI | ||
app.Map("/", () => Results.Redirect("index.html")); | ||
app.Map("/index.html", () => Results.Redirect(options.Value.Middleware.UiBaseRoute)); | ||
|
||
await app.WaitForShutdownAsync(); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
<Project Sdk="Microsoft.NET.Sdk.Web"> | ||
|
||
<PropertyGroup> | ||
<!-- This project is targeting .NET8 intentionally (The 'old school' Startup-class project is .NET6), to prove that | ||
the AsyncAPI.Saunter.Generator.Cli tool can generate specs for projects targetting .NET6 and .NET8. --> | ||
<TargetFramework>net8.0</TargetFramework> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added 2nd example project (also to be used in integration test) because Top Level Statement projects initially didn't work with the Generator.Cli tool. Now it does work too. And proves using integration test that both NET6 & NET8 targets work. |
||
<IsPackable>false</IsPackable> | ||
|
||
<!-- Example settings for "AsyncAPI.Saunter.Generator.Build", they are all option though --> | ||
<AsyncAPIGenerateDocumentsOnBuild>true</AsyncAPIGenerateDocumentsOnBuild> | ||
<AsyncAPIDocumentFormats>json,yml</AsyncAPIDocumentFormats> | ||
<AsyncAPIDocumentFilename>streetlights.{extension}</AsyncAPIDocumentFilename> | ||
<AsyncAPIDocumentOutputPath>specs</AsyncAPIDocumentOutputPath> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> | ||
<DocumentationFile>bin\Debug\StreetlightsAPI.TopLevelStatement.xml</DocumentationFile> | ||
<NoWarn>1701;1702;1591</NoWarn> | ||
</PropertyGroup> | ||
|
||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> | ||
<DocumentationFile>bin\Release\StreetlightsAPI.TopLevelStatement.xml</DocumentationFile> | ||
<NoWarn>1701;1702;1591</NoWarn> | ||
</PropertyGroup> | ||
|
||
<ItemGroup> | ||
<ProjectReference Include="..\..\src\Saunter\Saunter.csproj" /> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<Folder Include="specs\" /> | ||
|
||
<Compile Include="../StreetlightsAPI/API.cs" /> | ||
<Compile Include="../StreetlightsAPI/Messaging.cs" /> | ||
|
||
<None Include="../StreetlightsAPI/nlog.config"> | ||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | ||
</None> | ||
</ItemGroup> | ||
|
||
<ItemGroup> | ||
<PackageReference Include="NLog" Version="5.3.2" /> | ||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.11" /> | ||
</ItemGroup> | ||
|
||
</Project> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
{ | ||
"Logging": { | ||
"LogLevel": { | ||
"Default": "Information", | ||
"Microsoft": "Warning", | ||
"Microsoft.Hosting.Lifetime": "Information" | ||
} | ||
}, | ||
|
||
"AllowedHosts": "*", | ||
|
||
"Kestrel": { | ||
"EndPoints": { | ||
"Http": { | ||
"Url": "http://localhost:5001" | ||
} | ||
} | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" | ||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
autoReload="true"> | ||
|
||
<variable name="BaseDir" value="./" /> | ||
|
||
<!-- the targets to write to --> | ||
<targets> | ||
<!-- File Target for all log messages with basic details --> | ||
<target xsi:type="File" name="allfile" fileName="${BaseDir}/streetlights.nlog" | ||
layout="${longdate}|${level:uppercase=true}|${activity:property=TraceId}|${logger}|${message} ${exception:format=tostring}" | ||
maxArchiveFiles="5" archiveAboveSize="104857600" archiveNumbering="DateAndSequence" archiveDateFormat="yyyy-MM-dd" archiveFileName="${BaseDir}/streetlights-{#}.nlog" /> | ||
|
||
<!--Console Target for hosting lifetime messages to improve Docker / Visual Studio startup detection --> | ||
<target xsi:type="Console" name="lifetimeConsole" layout="${MicrosoftConsoleLayout}" /> | ||
</targets> | ||
|
||
<!-- rules to map from logger name to target --> | ||
<rules> | ||
<logger name="*" minlevel="Debug" writeTo="allfile" /> | ||
</rules> | ||
</nlog> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
current files were using a size of 2 and lf line endings, so I changed it (because my VS defaults are different)