Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
7efe0a9
baseline branch for the next major release
aaronpowell Oct 22, 2025
2ebfea3
Updating nightly
aaronpowell Oct 23, 2025
06d5985
Remove deprecated IDistributedApplicationLifecycleHook interface (#915)
Copilot Oct 24, 2025
3998714
Merge branch 'main' into aspire-13
aaronpowell Oct 24, 2025
8854f05
Adjusting the version of keycloak
aaronpowell Oct 24, 2025
8ed05c2
Updating aspire nightly
aaronpowell Oct 24, 2025
021a7ae
Merge branch 'main' into aspire-13
aaronpowell Oct 27, 2025
573fa53
New nightly
aaronpowell Oct 27, 2025
18787c3
Remove npm functionality moved to Aspire 13 (#928)
Copilot Nov 3, 2025
eef3b5c
Merge branch 'main' into aspire-13
aaronpowell Nov 3, 2025
0be207f
Initial plan
Copilot Nov 4, 2025
8d2b44b
Mark Python Extensions APIs as obsolete for Aspire 13
Copilot Nov 4, 2025
7c3b2aa
Merge branch 'aspire-13' of https://github.com/CommunityToolkit/Aspir…
aaronpowell Nov 4, 2025
cbccc34
Merge branch 'aspire-13' into copilot/review-python-extensions
aaronpowell Nov 4, 2025
c0e0d77
Add EditorBrowsable(Never) to obsolete extension methods
Copilot Nov 4, 2025
76cfd8e
Fixing failing test
aaronpowell Nov 4, 2025
b6801e6
Merge branch 'aspire-13' into copilot/review-python-extensions
aaronpowell Nov 4, 2025
4e1a797
Remove deprecated Python tests and examples
Copilot Nov 4, 2025
aae2060
Fixing compiler issues
aaronpowell Nov 5, 2025
0c31c45
Removing Python tests from the list
aaronpowell Nov 5, 2025
ee45cff
Dropping a namespace
aaronpowell Nov 5, 2025
4380b16
Merge branch 'main' into copilot/review-python-extensions
aaronpowell Nov 7, 2025
91875c6
Revert deletion of Python examples and tests
Copilot Nov 7, 2025
81a3b4b
Merge branch 'copilot/review-python-extensions' of https://github.com…
aaronpowell Nov 7, 2025
6c00912
Merge branch 'main' into copilot/review-python-extensions
aaronpowell Nov 7, 2025
d1731e8
Fixing test list
aaronpowell Nov 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,14 @@ jobs:
Hosting.GoFeatureFlag.Tests,
Hosting.Golang.Tests,
Hosting.Java.Tests,
Hosting.Keycloak.Extensions.Tests,
Hosting.k6.Tests,
Hosting.Keycloak.Extensions.Tests,
Hosting.KurrentDB.Tests,
Hosting.LavinMQ.Tests,
Hosting.MailPit.Tests,
Hosting.McpInspector.Tests,
Hosting.Meilisearch.Tests,
Hosting.Minio.Tests,
Hosting.MongoDB.Extensions.Tests,
Hosting.MySql.Extensions.Tests,
Hosting.Ngrok.Tests,
Expand All @@ -55,9 +56,8 @@ jobs:
Hosting.Rust.Tests,
Hosting.Solr.Tests,
Hosting.SqlDatabaseProjects.Tests,
Hosting.SqlServer.Extensions.Tests,
Hosting.Sqlite.Tests,
Hosting.Minio.Tests,
Hosting.SqlServer.Extensions.Tests,
Hosting.SurrealDb.Tests,

# Client integration tests
Expand All @@ -67,9 +67,9 @@ jobs:
Meilisearch.Tests,
Microsoft.Data.Sqlite.Tests,
Microsoft.EntityFrameworkCore.Sqlite.Tests,
Minio.Client.Tests,
OllamaSharp.Tests,
RavenDB.Client.Tests,
Minio.Client.Tests,
SurrealDb.Tests,
]

Expand Down
16 changes: 6 additions & 10 deletions CommunityToolkit.Aspire.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@
<Project Path="examples/k6/CommunityToolkit.Aspire.Hosting.k6.ServiceDefaults/CommunityToolkit.Aspire.Hosting.k6.ServiceDefaults.csproj" />
</Folder>
<Folder Name="/examples/keycloak-postgres/">
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.csproj" Type="C#" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Dev\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Dev.csproj" Type="C#" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Prod\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Prod.csproj" Type="C#" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.ServiceDefaults\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.ServiceDefaults.csproj" Type="C#" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.csproj" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Dev\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Dev.csproj" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Prod\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Prod.csproj" />
<Project Path="examples\keycloak-postgres\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.ServiceDefaults\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.ServiceDefaults.csproj" />
</Folder>
<Folder Name="/examples/lavinmq/">
<Project Path="examples/lavinmq/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost.csproj" />
Expand Down Expand Up @@ -130,9 +130,6 @@
<Folder Name="/examples/powershell/">
<Project Path="examples/powershell/CommunityToolkit.Aspire.PowerShell.AppHost/CommunityToolkit.Aspire.PowerShell.AppHost.csproj" />
</Folder>
<Folder Name="/examples/python/">
<Project Path="examples/python/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost.csproj" />
</Folder>
<Folder Name="/examples/ravendb/">
<Project Path="examples/ravendb/CommunityToolkit.Aspire.Hosting.RavenDB.ApiService/CommunityToolkit.Aspire.Hosting.RavenDB.ApiService.csproj" />
<Project Path="examples/ravendb/CommunityToolkit.Aspire.Hosting.RavenDB.ServiceDefaults/CommunityToolkit.Aspire.Hosting.RavenDB.ServiceDefaults.csproj" />
Expand Down Expand Up @@ -211,7 +208,7 @@
<Project Path="src/CommunityToolkit.Aspire.OllamaSharp/CommunityToolkit.Aspire.OllamaSharp.csproj" />
<Project Path="src/CommunityToolkit.Aspire.RavenDB.Client/CommunityToolkit.Aspire.RavenDB.Client.csproj" />
<Project Path="src/CommunityToolkit.Aspire.SurrealDb/CommunityToolkit.Aspire.SurrealDb.csproj" />
<Project Path="src\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.csproj" Type="C#" />
<Project Path="src\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions\CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.csproj" />
</Folder>
<Folder Name="/src/Dapr/">
<Project Path="src/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis/CommunityToolkit.Aspire.Hosting.Azure.Dapr.Redis.csproj" />
Expand Down Expand Up @@ -246,7 +243,6 @@
<Project Path="tests/CommunityToolkit.Aspire.Hosting.PapercutSmtp.Tests/CommunityToolkit.Aspire.Hosting.PapercutSmtp.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.Tests/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.PowerShell.Tests/CommunityToolkit.Aspire.Hosting.PowerShell.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests/CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.RavenDB.Tests/CommunityToolkit.Aspire.Hosting.RavenDB.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Rust.Tests/CommunityToolkit.Aspire.Hosting.Rust.Tests.csproj" />
Expand All @@ -256,7 +252,7 @@
<Project Path="tests/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests/CommunityToolkit.Aspire.Hosting.SurrealDb.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.KurrentDB.Tests/CommunityToolkit.Aspire.KurrentDB.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Tests/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Tests.csproj" Type="C#" />
<Project Path="tests/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Tests/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.MassTransit.RabbitMQ.Tests/CommunityToolkit.Aspire.MassTransit.RabbitMQ.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Meilisearch.Tests/CommunityToolkit.Aspire.Meilisearch.Tests.csproj" />
<Project Path="tests/CommunityToolkit.Aspire.Microsoft.Data.Sqlite.Tests/CommunityToolkit.Aspire.Microsoft.Data.Sqlite.Tests.csproj" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#pragma warning disable CS0612
#pragma warning disable CS0612 // Type or member is obsolete
#pragma warning disable CS0618 // Type or member is obsolete
var builder = DistributedApplication.CreateBuilder(args);

builder.AddUvicornApp("uvicornapp", "../uvicornapp-api", "main:app");
Expand Down
10 changes: 10 additions & 0 deletions src/CommunityToolkit.Aspire.Hosting.Python.Extensions/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
# CommunityToolkit.Aspire.Hosting.Python.Extensions library

> **⚠️ DEPRECATION NOTICE**
> This package is deprecated as of Aspire 13.0. The functionality provided by this package is now part of the core `Aspire.Hosting.Python` package.
>
> **Migration Guide:**
> - Replace `AddUvicornApp()` calls with `Aspire.Hosting.Python.PythonAppResourceBuilderExtensions.AddUvicornApp()`
> - Replace `AddUvApp()` calls with `AddPythonApp().WithUvEnvironment()`
> - Update resource type references from `CommunityToolkit.Aspire.Hosting.Python.Extensions.UvicornAppResource` to `Aspire.Hosting.ApplicationModel.UvicornAppResource`
>
> This package will be removed in a future release. Please migrate your applications to use the core `Aspire.Hosting.Python` package.

Provides extensions methods and resource definitions for the .NET Aspire AppHost to extend the support for Python applications. Current support includes:
- Uvicorn
- Uv
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System.ComponentModel;
using Aspire.Hosting.ApplicationModel;
using CommunityToolkit.Aspire.Utils;

Expand All @@ -18,6 +19,8 @@ public static class UvAppHostingExtension
/// <param name="scriptArgs">Optional arguments to pass to the script.</param>
/// <returns>An <see cref="IResourceBuilder{UvAppResource}"/> for the Uv application resource.</returns>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="builder"/> is null.</exception>
[Obsolete("AddUvApp is now part of Aspire.Hosting.Python. Use Aspire.Hosting.Python.PythonAppResourceBuilderExtensions.AddPythonApp with WithUvEnvironment instead. This method will be removed in a future release.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static IResourceBuilder<UvAppResource> AddUvApp(
this IDistributedApplicationBuilder builder,
string name,
Expand All @@ -30,6 +33,7 @@ public static IResourceBuilder<UvAppResource> AddUvApp(
return builder.AddUvApp(name, scriptPath, projectDirectory, ".venv", scriptArgs);
}

[Obsolete]
private static IResourceBuilder<UvAppResource> AddUvApp(this IDistributedApplicationBuilder builder,
string name,
string scriptPath,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ namespace Aspire.Hosting.ApplicationModel;
/// <param name="name">The name of the resource.</param>
/// <param name="executablePath">The path to the executable used to run the python app.</param>
/// <param name="workingDirectory">The working directory for uv.</param>
[Obsolete("UvAppResource is now superseded by functionality in Aspire.Hosting.Python. Use Aspire.Hosting.Python.PythonAppResourceBuilderExtensions.AddPythonApp with WithUvEnvironment instead. This class will be removed in a future release.")]
public class UvAppResource(string name, string executablePath, string workingDirectory)
: PythonAppResource(name, executablePath, workingDirectory), IResourceWithServiceDiscovery
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Aspire.Hosting.ApplicationModel;
using Aspire.Hosting.Python;
using System.ComponentModel;
using Aspire.Hosting.ApplicationModel;
using CommunityToolkit.Aspire.Utils;
using UvicornAppResource = Aspire.Hosting.ApplicationModel.UvicornAppResource;

Expand All @@ -20,6 +20,8 @@ public static class UvicornAppHostingExtension
/// <param name="args">Optional arguments to pass to the script.</param>
/// <returns>An <see cref="IResourceBuilder{UvicornAppResource}"/> for the Uvicorn application resource.</returns>
/// <exception cref="ArgumentNullException">Thrown if <paramref name="builder"/> is null.</exception>
[Obsolete("AddUvicornApp is now part of Aspire.Hosting.Python. Use the Aspire.Hosting.Python.PythonAppResourceBuilderExtensions.AddUvicornApp method instead. This method will be removed in a future release.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public static IResourceBuilder<UvicornAppResource> AddUvicornApp(
Comment thread
aaronpowell marked this conversation as resolved.
this IDistributedApplicationBuilder builder,
[ResourceName] string name,
Expand All @@ -32,6 +34,7 @@ public static IResourceBuilder<UvicornAppResource> AddUvicornApp(
return builder.AddUvicornApp(name, projectDirectory, appName, ".venv", args);
}

[Obsolete]
private static IResourceBuilder<UvicornAppResource> AddUvicornApp(this IDistributedApplicationBuilder builder,
string name,
string projectDirectory,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@ namespace Aspire.Hosting.ApplicationModel;
/// <param name="name">The name of the resource.</param>
/// <param name="executablePath">The path to the executable used to run the python app.</param>
/// <param name="workingDirectory">The working directory for uvicorn.</param>
[Obsolete("UvicornAppResource is now part of Aspire.Hosting.Python. Use Aspire.Hosting.ApplicationModel.UvicornAppResource instead. This class will be removed in a future release.")]
public class UvicornAppResource(string name, string executablePath, string workingDirectory)
: PythonAppResource(name, executablePath, workingDirectory), IResourceWithServiceDiscovery;
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace Aspire.Hosting.ApplicationModel;

[Obsolete("VirtualEnvironment is now part of Aspire.Hosting.Python internal implementation. Use Aspire.Hosting.Python.PythonAppResourceBuilderExtensions.WithVirtualEnvironment or WithUvEnvironment instead. This class will be removed in a future release.")]
internal sealed class VirtualEnvironment(string virtualEnvironmentPath)
{
/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
namespace CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests;

#pragma warning disable CTASPIRE001
#pragma warning disable CS0612 // Type or member is obsolete
#pragma warning disable CS0618 // Type or member is obsolete
public class AppHostTests(AspireIntegrationTestFixture<Projects.CommunityToolkit_Aspire_Hosting_Python_Extensions_AppHost> fixture) : IClassFixture<AspireIntegrationTestFixture<Projects.CommunityToolkit_Aspire_Hosting_Python_Extensions_AppHost>>
{
[Theory(Skip = "To be reviewed with https://github.com/CommunityToolkit/Aspire/issues/917")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

namespace CommunityToolkit.Aspire.Hosting.Python.Extensions.Tests;

#pragma warning disable CS0612
#pragma warning disable CS0612 // Type or member is obsolete
#pragma warning disable CS0618 // Type or member is obsolete
public class ResourceCreationTests
{
[Fact(Skip = "Being removed with https://github.com/CommunityToolkit/Aspire/issues/917")]
Expand Down
Loading