diff --git a/.editorconfig b/.editorconfig index 0dba85e7..c3952afb 100644 --- a/.editorconfig +++ b/.editorconfig @@ -38,6 +38,7 @@ indent_size = 2 # C# files [*.cs] +dotnet_public_api_analyzer.require_api_files = true #### .NET Coding Conventions #### # Organize usings diff --git a/Directory.Build.props b/Directory.Build.props index 2b686253..b4e9df32 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,4 +1,7 @@ + + + net8.0 @@ -12,5 +15,7 @@ 1.9.0 false + true + true diff --git a/Directory.Packages.props b/Directory.Packages.props index 2ec36416..6d46db56 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -31,5 +31,8 @@ + + + \ No newline at end of file diff --git a/docs/images/public-api-warning-example.png b/docs/images/public-api-warning-example.png new file mode 100644 index 00000000..853eab02 Binary files /dev/null and b/docs/images/public-api-warning-example.png differ diff --git a/docs/public-api.md b/docs/public-api.md new file mode 100644 index 00000000..5f92885f --- /dev/null +++ b/docs/public-api.md @@ -0,0 +1,62 @@ +# Public API Management with Microsoft.CodeAnalysis.PublicApiAnalyzers + +We use `Microsoft.CodeAnalysis.PublicApiAnalyzers` in this repository. By using this analyzer, we can keep track of changes to the public API. + +## Integration Packages + +We have several packages called integration. For each of these packages, we add a public API. Each package should have the following files: +- `PublicAPI.Shipped.txt` +- `PublicAPI.Unshipped.txt` + +## Creating/Updating Public API Files + +### Steps for Contributors + + +1. **Create these two files**: + +- `PublicAPI.Shipped.txt` +- `PublicAPI.Unshipped.txt` + +If you're using nullable reference types, then add the following line at the top of each `PublicAPI.*.txt` file: +``` +#nullable enable +``` + +2. **Add New Public API**: + + - In `PublicAPI.Shipped.txt`, list all the public APIs you've given out. + - In `PublicAPI.Unshipped.txt`, list any preview or soon-to-change APIs. For example, if an API will soon be removed (marked with `[Obsolete]`), add it here so you remember to take it out later. + + - Consider the following representative C# public class: + ```csharp + namespace Demo; + + public class MyClass + { + public Task DoSomethingAsync(Uri uri, CancellationToken cancellationToken) + { + return Task.CompletedTask; + } + } + + ``` + + Warnings issued by the Microsoft.CodeAnalysis.PublicApiAnalyzers package: + + ![Example warning from analyzer](/images/public-api-warning-example.png) + + You can use `. + Ctrl` to open the code actions and see the available options. In this case, the warning is suggesting that we should add the `MyClass` type to the `PublicAPI.*.txt` files. +3. **Update Existing Public API**: + - If you modify existing public API members, update the `PublicAPI.Unshipped.txt` file accordingly. + - Ensure that the changes reflect the new API surface. + +4. **Shipping Public API**: + - Once a version is released,We move the entries from `PublicAPI.Unshipped.txt` to `PublicAPI.Shipped.txt`. + - This indicates that the API changes are now part of a shipped version. + +By following these steps, we can maintain a consistent and accurate record of our public API changes. + +Additional resources: +- [Microsoft.CodeAnalysis.PublicApiAnalyzers documentation.](https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/PublicApiAnalyzers.Help.md) +- [Microsoft.CodeAnalysis.PublicApiAnalyzers list of analysis rules.](https://github.com/dotnet/roslyn-analyzers/blob/main/src/PublicApiAnalyzers/Microsoft.CodeAnalysis.PublicApiAnalyzers.md) \ No newline at end of file diff --git a/eng/apicompat/PublicApiAnalyzer.props b/eng/apicompat/PublicApiAnalyzer.props new file mode 100644 index 00000000..48e25308 --- /dev/null +++ b/eng/apicompat/PublicApiAnalyzer.props @@ -0,0 +1,8 @@ + + + + + $(WarningsAsErrors);RS0016;RS0017;RS0022;RS0024;RS0025;RS0026;RS0027;RS0036;RS0037 + + + \ No newline at end of file diff --git a/eng/apicompat/PublicApiAnalyzer.targets b/eng/apicompat/PublicApiAnalyzer.targets new file mode 100644 index 00000000..c3649d16 --- /dev/null +++ b/eng/apicompat/PublicApiAnalyzer.targets @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/eng/apicompat/mark-shipped.cmd b/eng/apicompat/mark-shipped.cmd new file mode 100644 index 00000000..ed286804 --- /dev/null +++ b/eng/apicompat/mark-shipped.cmd @@ -0,0 +1,2 @@ +@echo off +powershell -noprofile -executionPolicy RemoteSigned -file "%~dp0mark-shipped.ps1" \ No newline at end of file diff --git a/eng/apicompat/mark-shipped.ps1 b/eng/apicompat/mark-shipped.ps1 new file mode 100644 index 00000000..71d90979 --- /dev/null +++ b/eng/apicompat/mark-shipped.ps1 @@ -0,0 +1,49 @@ +[CmdletBinding(PositionalBinding=$false)] +param () + +Set-StrictMode -version 2.0 +$ErrorActionPreference = "Stop" + +function MarkShipped([string]$dir) { + $shippedFilePath = Join-Path $dir "PublicAPI.Shipped.txt" + $shipped = @() + $shipped += Get-Content $shippedFilePath + + $unshippedFilePath = Join-Path $dir "PublicAPI.Unshipped.txt" + $unshipped = Get-Content $unshippedFilePath + $removed = @() + $removedPrefix = "*REMOVED*"; + Write-Host "Processing $dir" + + foreach ($item in $unshipped) { + if ($item.Length -gt 0) { + if ($item.StartsWith($removedPrefix)) { + $item = $item.Substring($removedPrefix.Length) + $removed += $item + } + else { + $shipped += $item + } + } + } + + $shipped | Sort-Object -Unique |Where-Object { -not $removed.Contains($_) } | Out-File $shippedFilePath -Encoding Ascii + "#nullable enable`r`n" | Out-File $unshippedFilePath -Encoding Ascii +} + +try { + Push-Location $PSScriptRoot\..\.. + + foreach ($file in Get-ChildItem -re -in "PublicApi.Shipped.txt") { + $dir = Split-Path -parent $file + MarkShipped $dir + } +} +catch { + Write-Host $_ + Write-Host $_.Exception + exit 1 +} +finally { + Pop-Location +} \ No newline at end of file diff --git a/eng/apicompat/readme.md b/eng/apicompat/readme.md new file mode 100644 index 00000000..5f780139 --- /dev/null +++ b/eng/apicompat/readme.md @@ -0,0 +1,12 @@ +# Mark-Shipped Tool +======== + +This tool should be run after every supported release that has API changes. It will +merge the collection of PublicApi.Shipped.txt files with the PublicApi.Unshipped.txt +versions. This will take into account `*REMOVED*` elements when updating the files. + +Usage: + +``` cmd +mark-shipped.cmd +``` \ No newline at end of file diff --git a/examples/Directory.Build.props b/examples/Directory.Build.props new file mode 100644 index 00000000..803b4f14 --- /dev/null +++ b/examples/Directory.Build.props @@ -0,0 +1,8 @@ + + + + + false + + + \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Shipped.txt new file mode 100644 index 00000000..ab058de6 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..f087e543 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Azure.StaticWebApps/PublicAPI.Unshipped.txt @@ -0,0 +1,19 @@ +Aspire.Hosting.ApplicationModel.SwaApiEndpointAnnotation +Aspire.Hosting.ApplicationModel.SwaApiEndpointAnnotation.Endpoint.get -> string! +Aspire.Hosting.ApplicationModel.SwaApiEndpointAnnotation.SwaApiEndpointAnnotation(Aspire.Hosting.ApplicationModel.IResourceBuilder! resource) -> void +Aspire.Hosting.ApplicationModel.SwaAppEndpointAnnotation +Aspire.Hosting.ApplicationModel.SwaAppEndpointAnnotation.Endpoint.get -> string! +Aspire.Hosting.ApplicationModel.SwaAppEndpointAnnotation.SwaAppEndpointAnnotation(Aspire.Hosting.ApplicationModel.IResourceBuilder! resource) -> void +Aspire.Hosting.ApplicationModel.SwaResource +Aspire.Hosting.ApplicationModel.SwaResource.SwaResource(string! name, string! workingDirectory) -> void +Aspire.Hosting.SwaAppHostingExtension +Aspire.Hosting.SwaResourceOptions +Aspire.Hosting.SwaResourceOptions.DevServerTimeout.get -> int +Aspire.Hosting.SwaResourceOptions.DevServerTimeout.set -> void +Aspire.Hosting.SwaResourceOptions.Port.get -> int +Aspire.Hosting.SwaResourceOptions.Port.set -> void +Aspire.Hosting.SwaResourceOptions.SwaResourceOptions() -> void +static Aspire.Hosting.SwaAppHostingExtension.AddSwaEmulator(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.SwaAppHostingExtension.AddSwaEmulator(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, Aspire.Hosting.SwaResourceOptions! options) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.SwaAppHostingExtension.WithApiResource(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, Aspire.Hosting.ApplicationModel.IResourceBuilder! apiResource) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.SwaAppHostingExtension.WithAppResource(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, Aspire.Hosting.ApplicationModel.IResourceBuilder! appResource) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Shipped.txt new file mode 100644 index 00000000..7dc5c581 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..57f57500 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Golang/PublicAPI.Unshipped.txt @@ -0,0 +1,4 @@ +Aspire.Hosting.ApplicationModel.GolangAppExecutableResource +Aspire.Hosting.ApplicationModel.GolangAppExecutableResource.GolangAppExecutableResource(string! name, string! workingDirectory) -> void +Aspire.Hosting.GolangAppHostingExtension +static Aspire.Hosting.GolangAppHostingExtension.AddGolangApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string! workingDirectory, int port = 8080, string![]? args = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Shipped.txt new file mode 100644 index 00000000..ab058de6 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..2483caa0 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Java/PublicAPI.Unshipped.txt @@ -0,0 +1,35 @@ +Aspire.Hosting.ApplicationModel.JavaAppContainerResource +Aspire.Hosting.ApplicationModel.JavaAppContainerResource.JavaAppContainerResource(string! name, string? entrypoint = null) -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.Args.get -> string![]? +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.Args.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerImageName.get -> string? +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerImageName.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerImageTag.get -> string! +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerImageTag.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerRegistry.get -> string? +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.ContainerRegistry.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.JavaAppContainerResourceOptions() -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.OtelAgentPath.get -> string? +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.OtelAgentPath.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.Port.get -> int +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.Port.set -> void +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.TargetPort.get -> int +Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions.TargetPort.set -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResource +Aspire.Hosting.ApplicationModel.JavaAppExecutableResource.JavaAppExecutableResource(string! name, string! command, string! workingDirectory) -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.ApplicationName.get -> string? +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.ApplicationName.set -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.Args.get -> string![]? +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.Args.set -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.JavaAppExecutableResourceOptions() -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.OtelAgentPath.get -> string? +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.OtelAgentPath.set -> void +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.Port.get -> int +Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions.Port.set -> void +Aspire.Hosting.JavaAppHostingExtension +static Aspire.Hosting.JavaAppHostingExtension.AddJavaApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions! options) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.JavaAppHostingExtension.AddJavaApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string! workingDirectory, Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions! options) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.JavaAppHostingExtension.AddSpringApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, Aspire.Hosting.ApplicationModel.JavaAppContainerResourceOptions! options) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.JavaAppHostingExtension.AddSpringApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string! workingDirectory, Aspire.Hosting.ApplicationModel.JavaAppExecutableResourceOptions! options) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Shipped.txt new file mode 100644 index 00000000..ab058de6 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..45a54671 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.NodeJS.Extensions/PublicAPI.Unshipped.txt @@ -0,0 +1,7 @@ +Aspire.Hosting.NodeJSHostingExtensions +static Aspire.Hosting.NodeJSHostingExtensions.AddPnpmApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string! workingDirectory, string! scriptName = "start", string![]? args = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.NodeJSHostingExtensions.AddViteApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string? workingDirectory = null, string! packageManager = "npm") -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.NodeJSHostingExtensions.AddYarnApp(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, string! workingDirectory, string! scriptName = "start", string![]? args = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.NodeJSHostingExtensions.WithNpmPackageInstallation(this Aspire.Hosting.ApplicationModel.IResourceBuilder! resource) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.NodeJSHostingExtensions.WithPnpmPackageInstallation(this Aspire.Hosting.ApplicationModel.IResourceBuilder! resource) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.NodeJSHostingExtensions.WithYarnPackageInstallation(this Aspire.Hosting.ApplicationModel.IResourceBuilder! resource) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.Hosting.Ollama/OllamaResourceBuilderExtensions.cs b/src/Aspire.CommunityToolkit.Hosting.Ollama/OllamaResourceBuilderExtensions.cs index 472ae32f..0ee47215 100644 --- a/src/Aspire.CommunityToolkit.Hosting.Ollama/OllamaResourceBuilderExtensions.cs +++ b/src/Aspire.CommunityToolkit.Hosting.Ollama/OllamaResourceBuilderExtensions.cs @@ -43,6 +43,7 @@ public static IResourceBuilder AddOllama(this IDistributedApplic /// A reference to the . /// This is to maintain compatibility with the Raygun.Aspire.Hosting.Ollama package and will be removed in the next major release. [Obsolete("Use AddOllama without a model name, and then the AddModel extension method to add models.")] + [System.Diagnostics.CodeAnalysis.SuppressMessage("ApiDesign", "RS0026:Do not add multiple public overloads with optional parameters", Justification = "")] public static IResourceBuilder AddOllama(this IDistributedApplicationBuilder builder, string name = "Ollama", int? port = null, string modelName = "llama3") { diff --git a/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Shipped.txt new file mode 100644 index 00000000..ab058de6 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..c13099f3 --- /dev/null +++ b/src/Aspire.CommunityToolkit.Hosting.Ollama/PublicAPI.Unshipped.txt @@ -0,0 +1,20 @@ +Aspire.Hosting.ApplicationModel.OllamaResource +Aspire.Hosting.ApplicationModel.OllamaResource.AddModel(string! modelName) -> void +Aspire.Hosting.ApplicationModel.OllamaResource.ConnectionStringExpression.get -> Aspire.Hosting.ApplicationModel.ReferenceExpression! +Aspire.Hosting.ApplicationModel.OllamaResource.DefaultModel.get -> string? +Aspire.Hosting.ApplicationModel.OllamaResource.Models.get -> System.Collections.Generic.IReadOnlyList! +Aspire.Hosting.ApplicationModel.OllamaResource.OllamaResource(string! name) -> void +Aspire.Hosting.ApplicationModel.OllamaResource.PrimaryEndpoint.get -> Aspire.Hosting.ApplicationModel.EndpointReference! +Aspire.Hosting.ApplicationModel.OllamaResource.SetDefaultModel(string! modelName) -> void +Aspire.Hosting.ApplicationModel.OpenWebUIResource +Aspire.Hosting.ApplicationModel.OpenWebUIResource.ConnectionStringExpression.get -> Aspire.Hosting.ApplicationModel.ReferenceExpression! +Aspire.Hosting.ApplicationModel.OpenWebUIResource.OpenWebUIResource(string! name) -> void +Aspire.Hosting.ApplicationModel.OpenWebUIResource.PrimaryEndpoint.get -> Aspire.Hosting.ApplicationModel.EndpointReference! +Aspire.Hosting.OllamaResourceBuilderExtensions +static Aspire.Hosting.OllamaResourceBuilderExtensions.AddModel(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, string! modelName) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.AddOllama(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name = "Ollama", int? port = null, string! modelName = "llama3") -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.AddOllama(this Aspire.Hosting.IDistributedApplicationBuilder! builder, string! name, int? port = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.WithDataVolume(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, string? name = null, bool isReadOnly = false) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.WithDefaultModel(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, string! modelName) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.WithOpenWebUI(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, System.Action!>? configureContainer = null, string? containerName = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.OllamaResourceBuilderExtensions.WithReference(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, Aspire.Hosting.ApplicationModel.IResourceBuilder! ollama) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! \ No newline at end of file diff --git a/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Shipped.txt b/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Shipped.txt new file mode 100644 index 00000000..ab058de6 --- /dev/null +++ b/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Unshipped.txt b/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Unshipped.txt new file mode 100644 index 00000000..ae1c48cd --- /dev/null +++ b/src/Aspire.CommunityToolkit.OllamaSharp/PublicAPI.Unshipped.txt @@ -0,0 +1,11 @@ +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.ConnectionString.get -> string? +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.ConnectionString.set -> void +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.Models.get -> System.Collections.Generic.IReadOnlyList! +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.Models.set -> void +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.OllamaSharpSettings() -> void +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.SelectedModel.get -> string? +Aspire.CommunityToolkit.OllamaSharp.OllamaSharpSettings.SelectedModel.set -> void +Microsoft.Extensions.Hosting.AspireOllamaSharpExtensions +static Microsoft.Extensions.Hosting.AspireOllamaSharpExtensions.AddKeyedOllamaApiClient(this Microsoft.Extensions.Hosting.IHostApplicationBuilder! builder, string! connectionName, System.Action? configureSettings = null) -> void +static Microsoft.Extensions.Hosting.AspireOllamaSharpExtensions.AddOllamaApiClient(this Microsoft.Extensions.Hosting.IHostApplicationBuilder! builder, string! connectionName, System.Action? configureSettings = null) -> void \ No newline at end of file diff --git a/tests/Aspire.CommunityToolkit.Hosting.Golang.Tests/AppHostTests.cs b/tests/Aspire.CommunityToolkit.Hosting.Golang.Tests/AppHostTests.cs index 424ad700..faa7c331 100644 --- a/tests/Aspire.CommunityToolkit.Hosting.Golang.Tests/AppHostTests.cs +++ b/tests/Aspire.CommunityToolkit.Hosting.Golang.Tests/AppHostTests.cs @@ -6,7 +6,7 @@ namespace Aspire.CommunityToolkit.Hosting.Golang.Tests; #pragma warning disable CTASPIRE001 public class AppHostTests(AspireIntegrationTestFixture fixture) : IClassFixture> { - [Theory] + [Theory(Skip = "https://github.com/CommunityToolkit/Aspire/issues/85")] [InlineData("golang")] public async Task ResourceStartsAndRespondsOk(string appName) { diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props index a20e51fc..8cef0811 100644 --- a/tests/Directory.Build.props +++ b/tests/Directory.Build.props @@ -1,6 +1,10 @@ + + false + +