Skip to content

chore: Update integration data and GitHub stats (7/23/26)#1393

Open
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
chore/update-integration-data
Open

chore: Update integration data and GitHub stats (7/23/26)#1393
aspire-repo-bot[bot] wants to merge 1 commit into
mainfrom
chore/update-integration-data

Conversation

@aspire-repo-bot

@aspire-repo-bot aspire-repo-bot Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Automated integration data update — 7/23/26

Generated deterministically by src/frontend/scripts/update-integration-data.ps1 (no agent inference).

What's updated

  • src/frontend/src/data/aspire-integrations.json — latest package information
  • src/frontend/src/data/github-stats.json — repository statistics
  • src/frontend/src/data/samples.json — sample metadata, when changed
  • src/frontend/src/assets/samples/ — sample thumbnails, when changed

API reference regeneration

Versions changed for the following packages, so the C# and TypeScript API reference data and the twoslash bundle were regenerated:

  • Aspire.Hosting.AgentFramework.DevUI 1.14.0-preview.260721.11.15.0-preview.260722.1
Area Added Modified Removed
src/frontend/src/data/pkgs/** 0 34 1
src/frontend/src/data/ts-modules/** 0 4 0
src/frontend/src/data/twoslash/aspire.d.ts yes

Generator summary:

  • C# API JSON (generate-package-json.ps1pkgs/): Success: 176 | Failed: 0 | Skipped: 1
  • TS API JSON (update:ts-apits-modules/): 107 succeeded, 0 failed, 8 skipped
  • Twoslash bundle (twoslash/aspire.d.ts): succeeded

Review checklist

  • Integration data looks reasonable (no suspicious anomalies)
  • Package counts and versions updated appropriately
  • Official Aspire package icons still use package-specific NuGet icon URLs
  • New/removed pkgs/ and ts-modules/ files match the version changes
  • src/frontend/src/data/twoslash/aspire.d.ts is included in the diff

Copilot AI review requested due to automatic review settings July 22, 2026 21:36
@aspire-repo-bot
aspire-repo-bot Bot requested a review from IEvangelist as a code owner July 22, 2026 21:37
@aspire-repo-bot aspire-repo-bot Bot added the :octocat: auto-merge Pull requests that are auto merged by policy label Jul 22, 2026

@aspire-repo-bot aspire-repo-bot Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Automated wording suggestions from the forbidden-words check. Apply the suggestions to resolve them.

"name": "aspire-with-azure-functions",
"title": "Image Gallery",
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.",
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use "AppHost" instead of "app host".

Suggested change
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.",
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.",

"href": "https://github.com/microsoft/aspire-samples/tree/main/samples/aspire-with-azure-functions",
"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readmeRaw": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](./images/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use "AppHost" instead of "app host".

Suggested change
"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",

"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readmeRaw": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](./images/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readme": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](~/assets/samples/aspire-with-azure-functions/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readmeRaw": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](./images/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use "AppHost" instead of "app host".

Suggested change
"readmeRaw": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](./images/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",
"readmeRaw": "# Image Gallery\n\n![Screenshot of the web frontend the Aspire with Azure Functions sample](./images/aspire-with-functions.png)\n\nThe app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.\n\n## Pre-requisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n- [Azure Functions tools](https://learn.microsoft.com/azure/azure-functions/functions-run-local?tabs=windows%2Cisolated-process%2Cnode-v4%2Cpython-v2%2Chttp-trigger%2Ccontainer-apps&pivots=programming-language-csharp)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `ImageGallery.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `ImageGallery.slnx` and launch/debug the `ImageGallery.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `ImageGallery.AppHost` directory.\n",

"appHost": "csproj",
"appHostPath": "DatabaseContainers.AppHost/AppHost.cs",
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use "AppHost" instead of "app host".

Suggested change
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot could not run the full agentic suite for this review because it was automatically requested on a bot-authored pull request. Request a review from Copilot under Reviewers to retry with the full agentic suite. Improved support for bot-authored pull requests is coming soon.

Updates frontend data assets to refresh repository/package metrics and tweak sample copy for display in the UI.

Changes:

  • Updated sample metadata/readme text for a couple samples in samples.json.
  • Refreshed GitHub star counts in github-stats.json.
  • Refreshed NuGet download counts in aspire-integrations.json.

Reviewed changes

Copilot reviewed 3 out of 7 changed files in this pull request and generated 3 comments.

File Description
src/frontend/src/data/samples.json Adjusts sample descriptions/readmes and embedded AppHost code snippet text.
src/frontend/src/data/github-stats.json Updates displayed GitHub star counts for tracked repos.
src/frontend/src/data/aspire-integrations.json Updates displayed NuGet download totals for integrations.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

"name": "aspire-with-azure-functions",
"title": "Image Gallery",
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire AppHost project.",
"description": "The app consists of two services:\n\n- **ImageGallery.Frontend**: This is a Blazor app that displays a for uploading of images, showing thumbnails of images in a grid.\n- **ImageGallery.Functions**: This is an Azure Function triggered by the arrival of a new blob using a Functions Blob Trigger.\n\nThe app also includes a class library project, **ImageGallery.ServiceDefaults**, that contains the service defaults used by the service projects, and the **ImageGallery.AppHost** Aspire App Host project.",
"appHost": "csproj",
"appHostPath": "DatabaseContainers.AppHost/AppHost.cs",
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between AppHost sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"
"appHostCode": "var builder = DistributedApplication.CreateBuilder(args);\n\n// PostgreSQL container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar todosDbName = \"Todos\";\n\nvar postgres = builder.AddPostgres(\"postgres\")\n // Set the name of the default database to auto-create on container startup.\n .WithEnvironment(\"POSTGRES_DB\", todosDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/postgres\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n .WithPgWeb()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the default database to the application model so that it can be referenced by other resources.\nvar todosDb = postgres.AddDatabase(todosDbName);\n\n// MySql container is configured with an auto-generated password by default\n// and supports setting the default database name via an environment variable & running *.sql/*.sh scripts in a bind mount.\nvar catalogDbName = \"catalog\"; // MySql database & table names are case-sensitive on non-Windows.\n\nvar mysql = builder.AddMySql(\"mysql\")\n // Set the name of the database to auto-create on container startup.\n .WithEnvironment(\"MYSQL_DATABASE\", catalogDbName)\n // Mount the SQL scripts directory into the container so that the init scripts run.\n .WithBindMount(\"../DatabaseContainers.ApiService/data/mysql\", \"/docker-entrypoint-initdb.d\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar catalogDb = mysql.AddDatabase(catalogDbName);\n\n// SQL Server container is configured with an auto-generated password by default\n// but doesn't support any auto-creation of databases or running scripts on startup so we have to do it manually.\nvar sqlserver = builder.AddSqlServer(\"sqlserver\")\n // Configure the container to store data in a volume so that it persists across instances.\n .WithDataVolume()\n // Keep the container running between app host sessions.\n .WithLifetime(ContainerLifetime.Persistent);\n\n// Add the database to the application model so that it can be referenced by other resources.\nvar initScriptPath = Path.Join(Path.GetDirectoryName(typeof(Program).Assembly.Location), \"init.sql\");\nvar addressBookDb = sqlserver.AddDatabase(\"AddressBook\")\n .WithCreationScript(File.ReadAllText(initScriptPath));\n\nbuilder.AddProject<Projects.DatabaseContainers_ApiService>(\"apiservice\")\n .WithReference(todosDb)\n .WaitFor(todosDb)\n .WithReference(catalogDb)\n .WaitFor(catalogDb)\n .WithReference(addressBookDb)\n .WaitFor(addressBookDb)\n .WithHttpHealthCheck(\"/alive\")\n .WithHttpHealthCheck(\"/health\");\n\nbuilder.Build().Run();"
"href": "https://github.com/microsoft/aspire-samples/tree/main/samples/health-checks-ui",
"readme": "# Configuring health checks & running the ASP.NET Core HealthChecksUI container with Aspire\n\nThis sample demonstrates configuring [ASP.NET Core Health Checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks) and running the [ASP.NET Core HealthChecksUI container](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/doc/ui-docker.md) with Aspire.\n\n![Screenshot of the HealthChecksUI](~/assets/samples/health-checks-ui/healthchecksui.png)\n\nThe sample is based on the Aspire Starter App project template and thus consists of a frontend web app that communicates with a backend ASP.NET Core API service and a Redis cache.\n\nThe frontend web app shows the health of the sample's services: a status overview, per-service uptime and latency tiles, a page that runs an on-demand health probe, and a live forecast streamed from the API service. It supports both light and dark themes:\n\n![Screenshot of the Aspire Status web frontend](~/assets/samples/health-checks-ui/webfrontend-light.png#gh-light-mode-only)\n![Screenshot of the Aspire Status web frontend](~/assets/samples/health-checks-ui/webfrontend-dark.png#gh-dark-mode-only)\n\n## Prerequisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `HealthChecksUI.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `HealthChecksUI.slnx` and launch/debug the `HealthChecksUI.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `HealthChecksUI.AppHost` directory.\n\nFrom the Aspire dashboard, click on the endpoint URL for the `healthchecksui` resource to launch the HealthChecksUI.\n\n## Details about the health checks endpoint configuration\n\nAspire Service Defaults projects configure [health checks and add health checks endpoints by default](https://aspire.dev/fundamentals/health-checks/). However, the endpoints are not exposed in [non-development environments](https://aspire.dev/fundamentals/health-checks/#non-development-environments) by default as doing so has security implications. This sample demonstrates how the default health checks endpoints can be customized to ensure they timeout if execution takes longer than expected, and that the results are cached so that repeated requests do not cause excessive load on the system.\n\nThe `AddDefaultHealthChecks` method in the `HealthChecksUI.ServiceDefaults` project adds and configures the [Output Caching](https://learn.microsoft.com/aspnet/core/performance/caching/output) and [Request Timeouts](https://learn.microsoft.com/aspnet/core/performance/timeouts) features of ASP.NET Core via named policies that are then applied to the health checks endpoints in the `MapDefaultEndpoints` method:\n\n```csharp\npublic static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)\n{\n var healthChecksConfiguration = builder.Configuration.GetSection(\"HealthChecks\");\n\n // All health checks endpoints must return within the configured timeout value (defaults to 5 seconds)\n var healthChecksRequestTimeout = healthChecksConfiguration.GetValue<TimeSpan?>(\"RequestTimeout\") ?? TimeSpan.FromSeconds(5);\n builder.Services.AddRequestTimeouts(timeouts => timeouts.AddPolicy(\"HealthChecks\", healthChecksRequestTimeout));\n\n // Cache health checks responses for the configured duration (defaults to 10 seconds)\n var healthChecksExpireAfter = healthChecksConfiguration.GetValue<TimeSpan?>(\"ExpireAfter\") ?? TimeSpan.FromSeconds(10);\n builder.Services.AddOutputCache(caching => caching.AddPolicy(\"HealthChecks\", policy => policy.Expire(healthChecksExpireAfter)));\n\n builder.Services.AddHealthChecks()\n // Add a default liveness check to ensure app is responsive\n .AddCheck(\"self\", () => HealthCheckResult.Healthy(), [\"live\"]);\n\n return builder;\n}\n```\n\nIn addition to the default health checks endpoints at `/health` and `/alive`, this sample configures an additional health checks endpoint that returns more detailed information regarding the indiviaul configured health checks (rather than just a \"Healthy\" or \"Unhealthy\" status). This endpoint is consumed by the HealthChecksUI container to display a more detailed view of the health of the application. Because it contains more detailed information, it is configured to only be available when requested via a dedicated additional address that the application listens on, i.e. if the app serves regular HTTP traffic via `http://localhost:5000`, the detailed health checks endpoint will only be available via `http://localhost:5001/` (note the different port). Separating the detailed health checks endpoint onto a different port allows for it to be routed differently and, for example, only exposed to internal services. The app uses the [`RequireHost`](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks#require-host) method to ensure the detailed health checks endpoint is only served to requests coming via the additional address:\n\n```csharp\n// Add the health checks endpoint for the HealthChecksUI\nvar healthChecksUrls = app.Configuration[\"HEALTHCHECKSUI_URLS\"];\nif (!string.IsNullOrWhiteSpace(healthChecksUrls))\n{\n var pathToHostsMap = GetPathToHostsMap(healthChecksUrls);\n\n foreach (var path in pathToHostsMap.Keys)\n {\n // Ensure that the HealthChecksUI endpoint is only accessible from configured hosts, e.g. localhost:12345, hub.docker.internal, etc.\n // as it contains more detailed information about the health of the app including the types of dependencies it has.\n\n healthChecks.MapHealthChecks(path, new() { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse })\n // This ensures that the HealthChecksUI endpoint is only accessible from the configured health checks URLs.\n // See this documentation to learn more about restricting access to health checks endpoints via routing:\n // https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-8.0#use-health-checks-routing\n .RequireHost(pathToHostsMap[path]);\n }\n}\n```\n\nWhen [deployed to Azure Container Apps (ACA) using the Aspire CLI](https://aspire.dev/integrations/cloud/azure/overview/#publish-as-azure-container-app), the additional endpoint will be automatically configured to be only accessible from the internal network of the ACA environment (as an [additional ingress TCP port](https://learn.microsoft.com/azure/container-apps/ingress-overview#additional-tcp-ports)), while the main HTTP endpoint will be configured for [external access](https://learn.microsoft.com/azure/container-apps/ingress-overview#external-and-internal-ingress) via the ACA app ingress rules. This ensures that the detailed health checks endpoint isn't exposed to the public internet, while the main HTTP(S) endpoint is (due to the call to `WithExternalHttpEndpoints()` on the app's resource in the AppHost project).\n\nThe diagram below illustrates the deployment of the sample app to Azure Container Apps with the HealthChecksUI container. You can see that there are **two** arraws pointing in to the `webfrontend` container, indicating the two separate ingress endpoints it's configured with, the main external HTTP(S) endpoint, and the addition internal TCP endpoint that the `healthchecksui` container is using to access the `/healthz` endpoint:\n\n![Diagram of deployed sampled in Azure Container Apps](~/assets/samples/health-checks-ui/aca-diagram.svg)\n\nNote that the HealthChecksUI dashboard is configured for external access in this sample for simplicity's sake, but in a real-world scenario, you likely want to require authentication to access the dashboard, e.g. via a custom reverse-proxy that enforces authentication and authorization rules.\n\n## Details about the hosting extension for the HealthChecksUI container\n\nThe HealthChecksUI container is integrated into this sample by way of a custom hosting extension, i.e. some C# that adds new types and extension methods to the core object model exposed by `Aspire.Hosting`. The extension is defined in the `HealthChecksUI.AppHost` project in the `HealthChecksUIResource.cs` and `HealthChecksUIExtensions.cs` files. The extensions demonstrate how existing containers can be integrated into the Aspire hosting model, allowing them to be managed and deployed alongside other resources in the same way as built-in resources like ASP.NET Core projects, Redis instances, database containers, and cloud services.\n\nA key aspect of this sample is that the extensions demonstrate how custom overloads of the `WithReference` method can be used to configure both the source and the target resources of the reference. In this case, calling `WithReference` on a HealthChecksUI resource and passing in a project resource results in both resources being configured to enable the scenario:\n\n- The project resource is configured to expose an additional endpoint to host the detailed health checks endpoint on as well as receiving the path that endpoint should be available at (`/healthz` by default)\n- The HealthChecksUI resource is configured to add the project resource's detailed health check endpoint as an one to include in the set it monitors for health check status.\n",
"readmeRaw": "# Configuring health checks & running the ASP.NET Core HealthChecksUI container with Aspire\n\nThis sample demonstrates configuring [ASP.NET Core Health Checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks) and running the [ASP.NET Core HealthChecksUI container](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/doc/ui-docker.md) with Aspire.\n\n![Screenshot of the HealthChecksUI](./images/healthchecksui.png)\n\nThe sample is based on the Aspire Starter App project template and thus consists of a frontend web app that communicates with a backend ASP.NET Core API service and a Redis cache.\n\nThe frontend web app shows the health of the sample's services: a status overview, per-service uptime and latency tiles, a page that runs an on-demand health probe, and a live forecast streamed from the API service. It supports both light and dark themes:\n\n![Screenshot of the Aspire Status web frontend](./images/webfrontend-light.png#gh-light-mode-only)\n![Screenshot of the Aspire Status web frontend](./images/webfrontend-dark.png#gh-dark-mode-only)\n\n## Prerequisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `HealthChecksUI.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `HealthChecksUI.slnx` and launch/debug the `HealthChecksUI.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `HealthChecksUI.AppHost` directory.\n\nFrom the Aspire dashboard, click on the endpoint URL for the `healthchecksui` resource to launch the HealthChecksUI.\n\n## Details about the health checks endpoint configuration\n\nAspire Service Defaults projects configure [health checks and add health checks endpoints by default](https://aspire.dev/fundamentals/health-checks/). However, the endpoints are not exposed in [non-development environments](https://aspire.dev/fundamentals/health-checks/#non-development-environments) by default as doing so has security implications. This sample demonstrates how the default health checks endpoints can be customized to ensure they timeout if execution takes longer than expected, and that the results are cached so that repeated requests do not cause excessive load on the system.\n\nThe `AddDefaultHealthChecks` method in the `HealthChecksUI.ServiceDefaults` project adds and configures the [Output Caching](https://learn.microsoft.com/aspnet/core/performance/caching/output) and [Request Timeouts](https://learn.microsoft.com/aspnet/core/performance/timeouts) features of ASP.NET Core via named policies that are then applied to the health checks endpoints in the `MapDefaultEndpoints` method:\n\n```csharp\npublic static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)\n{\n var healthChecksConfiguration = builder.Configuration.GetSection(\"HealthChecks\");\n\n // All health checks endpoints must return within the configured timeout value (defaults to 5 seconds)\n var healthChecksRequestTimeout = healthChecksConfiguration.GetValue<TimeSpan?>(\"RequestTimeout\") ?? TimeSpan.FromSeconds(5);\n builder.Services.AddRequestTimeouts(timeouts => timeouts.AddPolicy(\"HealthChecks\", healthChecksRequestTimeout));\n\n // Cache health checks responses for the configured duration (defaults to 10 seconds)\n var healthChecksExpireAfter = healthChecksConfiguration.GetValue<TimeSpan?>(\"ExpireAfter\") ?? TimeSpan.FromSeconds(10);\n builder.Services.AddOutputCache(caching => caching.AddPolicy(\"HealthChecks\", policy => policy.Expire(healthChecksExpireAfter)));\n\n builder.Services.AddHealthChecks()\n // Add a default liveness check to ensure app is responsive\n .AddCheck(\"self\", () => HealthCheckResult.Healthy(), [\"live\"]);\n\n return builder;\n}\n```\n\nIn addition to the default health checks endpoints at `/health` and `/alive`, this sample configures an additional health checks endpoint that returns more detailed information regarding the indiviaul configured health checks (rather than just a \"Healthy\" or \"Unhealthy\" status). This endpoint is consumed by the HealthChecksUI container to display a more detailed view of the health of the application. Because it contains more detailed information, it is configured to only be available when requested via a dedicated additional address that the application listens on, i.e. if the app serves regular HTTP traffic via `http://localhost:5000`, the detailed health checks endpoint will only be available via `http://localhost:5001/` (note the different port). Separating the detailed health checks endpoint onto a different port allows for it to be routed differently and, for example, only exposed to internal services. The app uses the [`RequireHost`](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks#require-host) method to ensure the detailed health checks endpoint is only served to requests coming via the additional address:\n\n```csharp\n// Add the health checks endpoint for the HealthChecksUI\nvar healthChecksUrls = app.Configuration[\"HEALTHCHECKSUI_URLS\"];\nif (!string.IsNullOrWhiteSpace(healthChecksUrls))\n{\n var pathToHostsMap = GetPathToHostsMap(healthChecksUrls);\n\n foreach (var path in pathToHostsMap.Keys)\n {\n // Ensure that the HealthChecksUI endpoint is only accessible from configured hosts, e.g. localhost:12345, hub.docker.internal, etc.\n // as it contains more detailed information about the health of the app including the types of dependencies it has.\n\n healthChecks.MapHealthChecks(path, new() { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse })\n // This ensures that the HealthChecksUI endpoint is only accessible from the configured health checks URLs.\n // See this documentation to learn more about restricting access to health checks endpoints via routing:\n // https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-8.0#use-health-checks-routing\n .RequireHost(pathToHostsMap[path]);\n }\n}\n```\n\nWhen [deployed to Azure Container Apps (ACA) using the Aspire CLI](https://aspire.dev/integrations/cloud/azure/overview/#publish-as-azure-container-app), the additional endpoint will be automatically configured to be only accessible from the internal network of the ACA environment (as an [additional ingress TCP port](https://learn.microsoft.com/azure/container-apps/ingress-overview#additional-tcp-ports)), while the main HTTP endpoint will be configured for [external access](https://learn.microsoft.com/azure/container-apps/ingress-overview#external-and-internal-ingress) via the ACA app ingress rules. This ensures that the detailed health checks endpoint isn't exposed to the public internet, while the main HTTP(S) endpoint is (due to the call to `WithExternalHttpEndpoints()` on the app's resource in the AppHost project).\n\nThe diagram below illustrates the deployment of the sample app to Azure Container Apps with the HealthChecksUI container. You can see that there are **two** arraws pointing in to the `webfrontend` container, indicating the two separate ingress endpoints it's configured with, the main external HTTP(S) endpoint, and the addition internal TCP endpoint that the `healthchecksui` container is using to access the `/healthz` endpoint:\n\n![Diagram of deployed sampled in Azure Container Apps](./images/aca-diagram.svg)\n\nNote that the HealthChecksUI dashboard is configured for external access in this sample for simplicity's sake, but in a real-world scenario, you likely want to require authentication to access the dashboard, e.g. via a custom reverse-proxy that enforces authentication and authorization rules.\n\n## Details about the hosting extension for the HealthChecksUI container\n\nThe HealthChecksUI container is integrated into this sample by way of a custom hosting extension, i.e. some C# that adds new types and extension methods to the core object model exposed by `Aspire.Hosting`. The extension is defined in the `HealthChecksUI.AppHost` project in the `HealthChecksUIResource.cs` and `HealthChecksUIExtensions.cs` files. The extensions demonstrate how existing containers can be integrated into the Aspire hosting model, allowing them to be managed and deployed alongside other resources in the same way as built-in resources like ASP.NET Core projects, Redis instances, database containers, and cloud services.\n\nA key aspect of this sample is that the extensions demonstrate how custom overloads of the `WithReference` method can be used to configure both the source and the target resources of the reference. In this case, calling `WithReference` on a HealthChecksUI resource and passing in a project resource results in both resources being configured to enable the scenario:\n\n- The project resource is configured to expose an additional endpoint to host the detailed health checks endpoint on as well as receiving the path that endpoint should be available at (`/healthz` by default)\n- The HealthChecksUI resource is configured to add the project resource's detailed health check endpoint as an one to include in the set it monitors for health check status.\n",
"readme": "# Configuring health checks & running the ASP.NET Core HealthChecksUI container with Aspire\n\nThis sample demonstrates configuring [ASP.NET Core Health Checks](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks) and running the [ASP.NET Core HealthChecksUI container](https://github.com/Xabaril/AspNetCore.Diagnostics.HealthChecks/blob/master/doc/ui-docker.md) with Aspire.\n\n![Screenshot of the HealthChecksUI](~/assets/samples/health-checks-ui/healthchecksui.png)\n\nThe sample is based on the Aspire Starter App project template and thus consists of a frontend web app that communicates with a backend ASP.NET Core API service and a Redis cache.\n\nThe frontend web app shows the health of the sample's services: a status overview, per-service uptime and latency tiles, a page that runs an on-demand health probe, and a live forecast streamed from the API service. It supports both light and dark themes:\n\n![Screenshot of the Aspire Status web frontend](~/assets/samples/health-checks-ui/webfrontend-light.png#gh-light-mode-only)\n![Screenshot of the Aspire Status web frontend](~/assets/samples/health-checks-ui/webfrontend-dark.png#gh-dark-mode-only)\n\n## Prerequisites\n\n- [Aspire development environment](https://aspire.dev/get-started/prerequisites/)\n- [.NET 10 SDK](https://dotnet.microsoft.com/download/dotnet/10.0)\n\n## Running the app\n\nIf using the Aspire CLI, run `aspire run` from this directory.\n\nIf using VS Code, open this directory as a workspace and launch the `HealthChecksUI.AppHost` project using either the Aspire or C# debuggers.\n\nIf using Visual Studio, open the solution file `HealthChecksUI.slnx` and launch/debug the `HealthChecksUI.AppHost` project.\n\nIf using the .NET CLI, run `dotnet run` from the `HealthChecksUI.AppHost` directory.\n\nFrom the Aspire dashboard, click on the endpoint URL for the `healthchecksui` resource to launch the HealthChecksUI.\n\n## Details about the health checks endpoint configuration\n\nAspire Service Defaults projects configure [health checks and add health checks endpoints by default](https://aspire.dev/fundamentals/health-checks/). However, the endpoints are not exposed in [non-development environments](https://aspire.dev/fundamentals/health-checks/#non-development-environments) by default as doing so has security implications. This sample demonstrates how the default health checks endpoints can be customized to ensure they timeout if execution takes longer than expected, and that the results are cached so that repeated requests do not cause excessive load on the system.\n\nThe `AddDefaultHealthChecks` method in the `HealthChecksUI.ServiceDefaults` project adds and configures the [Output Caching](https://learn.microsoft.com/aspnet/core/performance/caching/output) and [Request Timeouts](https://learn.microsoft.com/aspnet/core/performance/timeouts) features of ASP.NET Core via named policies that are then applied to the health checks endpoints in the `MapDefaultEndpoints` method:\n\n```csharp\npublic static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder)\n{\n var healthChecksConfiguration = builder.Configuration.GetSection(\"HealthChecks\");\n\n // All health checks endpoints must return within the configured timeout value (defaults to 5 seconds)\n var healthChecksRequestTimeout = healthChecksConfiguration.GetValue<TimeSpan?>(\"RequestTimeout\") ?? TimeSpan.FromSeconds(5);\n builder.Services.AddRequestTimeouts(timeouts => timeouts.AddPolicy(\"HealthChecks\", healthChecksRequestTimeout));\n\n // Cache health checks responses for the configured duration (defaults to 10 seconds)\n var healthChecksExpireAfter = healthChecksConfiguration.GetValue<TimeSpan?>(\"ExpireAfter\") ?? TimeSpan.FromSeconds(10);\n builder.Services.AddOutputCache(caching => caching.AddPolicy(\"HealthChecks\", policy => policy.Expire(healthChecksExpireAfter)));\n\n builder.Services.AddHealthChecks()\n // Add a default liveness check to ensure app is responsive\n .AddCheck(\"self\", () => HealthCheckResult.Healthy(), [\"live\"]);\n\n return builder;\n}\n```\n\nIn addition to the default health checks endpoints at `/health` and `/alive`, this sample configures an additional health checks endpoint that returns more detailed information regarding the indiviaul configured health checks (rather than just a \"Healthy\" or \"Unhealthy\" status). This endpoint is consumed by the HealthChecksUI container to display a more detailed view of the health of the application. Because it contains more detailed information, it is configured to only be available when requested via a dedicated additional address that the application listens on, i.e. if the app serves regular HTTP traffic via `http://localhost:5000`, the detailed health checks endpoint will only be available via `http://localhost:5001/` (note the different port). Separating the detailed health checks endpoint onto a different port allows for it to be routed differently and, for example, only exposed to internal services. The app uses the [`RequireHost`](https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks#require-host) method to ensure the detailed health checks endpoint is only served to requests coming via the additional address:\n\n```csharp\n// Add the health checks endpoint for the HealthChecksUI\nvar healthChecksUrls = app.Configuration[\"HEALTHCHECKSUI_URLS\"];\nif (!string.IsNullOrWhiteSpace(healthChecksUrls))\n{\n var pathToHostsMap = GetPathToHostsMap(healthChecksUrls);\n\n foreach (var path in pathToHostsMap.Keys)\n {\n // Ensure that the HealthChecksUI endpoint is only accessible from configured hosts, e.g. localhost:12345, hub.docker.internal, etc.\n // as it contains more detailed information about the health of the app including the types of dependencies it has.\n\n healthChecks.MapHealthChecks(path, new() { ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse })\n // This ensures that the HealthChecksUI endpoint is only accessible from the configured health checks URLs.\n // See this documentation to learn more about restricting access to health checks endpoints via routing:\n // https://learn.microsoft.com/aspnet/core/host-and-deploy/health-checks?view=aspnetcore-8.0#use-health-checks-routing\n .RequireHost(pathToHostsMap[path]);\n }\n}\n```\n\nWhen [deployed to Azure Container Apps (ACA) using the Aspire CLI](https://aspire.dev/integrations/cloud/azure/overview/#publish-as-azure-container-app), the additional endpoint will be automatically configured to be only accessible from the internal network of the ACA environment (as an [additional ingress TCP port](https://learn.microsoft.com/azure/container-apps/ingress-overview#additional-tcp-ports)), while the main HTTP endpoint will be configured for [external access](https://learn.microsoft.com/azure/container-apps/ingress-overview#external-and-internal-ingress) via the ACA app ingress rules. This ensures that the detailed health checks endpoint isn't exposed to the public internet, while the main HTTP(S) endpoint is (due to the call to `WithExternalHttpEndpoints()` on the app's resource in the app host project).\n\nThe diagram below illustrates the deployment of the sample app to Azure Container Apps with the HealthChecksUI container. You can see that there are **two** arraws pointing in to the `webfrontend` container, indicating the two separate ingress endpoints it's configured with, the main external HTTP(S) endpoint, and the addition internal TCP endpoint that the `healthchecksui` container is using to access the `/healthz` endpoint:\n\n![Diagram of deployed sampled in Azure Container Apps](~/assets/samples/health-checks-ui/aca-diagram.svg)\n\nNote that the HealthChecksUI dashboard is configured for external access in this sample for simplicity's sake, but in a real-world scenario, you likely want to require authentication to access the dashboard, e.g. via a custom reverse-proxy that enforces authentication and authorization rules.\n\n## Details about the hosting extension for the HealthChecksUI container\n\nThe HealthChecksUI container is integrated into this sample by way of a custom hosting extension, i.e. some C# that adds new types and extension methods to the core object model exposed by `Aspire.Hosting`. The extension is defined in the `HealthChecksUI.AppHost` project in the `HealthChecksUIResource.cs` and `HealthChecksUIExtensions.cs` files. The extensions demonstrate how existing containers can be integrated into the Aspire hosting model, allowing them to be managed and deployed alongside other resources in the same way as built-in resources like ASP.NET Core projects, Redis instances, database containers, and cloud services.\n\nA key aspect of this sample is that the extensions demonstrate how custom overloads of the `WithReference` method can be used to configure both the source and the target resources of the reference. In this case, calling `WithReference` on a HealthChecksUI resource and passing in a project resource results in both resources being configured to enable the scenario:\n\n- The project resource is configured to expose an additional endpoint to host the detailed health checks endpoint on as well as receiving the path that endpoint should be available at (`/healthz` by default)\n- The HealthChecksUI resource is configured to add the project resource's detailed health check endpoint as an one to include in the set it monitors for health check status.\n",
@aspire-repo-bot

Copy link
Copy Markdown
Contributor Author

Frontend HTML artifact ready

The latest frontend build uploaded the frontend-dist artifact for PR #1393. Use the VS Code button below to open this PR with GitHub Artifacts Explorer and browse the built HTML locally.

VS Code: Open PR #1393 artifacts

This comment updates automatically when a new frontend build artifact is uploaded.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@aspire-repo-bot
aspire-repo-bot Bot force-pushed the chore/update-integration-data branch from d34a4d3 to 52d8825 Compare July 23, 2026 21:48
@aspire-repo-bot aspire-repo-bot Bot changed the title chore: Update integration data and GitHub stats (7/22/26) chore: Update integration data and GitHub stats (7/23/26) Jul 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

:octocat: auto-merge Pull requests that are auto merged by policy

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant