From 7ccea69638480a2ada3fb70b0ae35fdb57b4affa Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Thu, 2 Apr 2026 05:47:08 +0000 Subject: [PATCH 01/17] fix: use .csproj project references in TypeScript apphost aspire.config.json Replace empty/version string package references with relative .csproj paths so the Aspire CLI builds integrations from local source instead of trying to pull from NuGet. This follows the local development with project references pattern documented at aspire.dev. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 4 ++-- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- .../aspire.config.json | 2 +- .../aspire.config.json | 4 ++-- 39 files changed, 55 insertions(+), 55 deletions(-) diff --git a/examples/activemq/CommunityToolkit.Aspire.Hosting.ActiveMQ.AppHost.TypeScript/aspire.config.json b/examples/activemq/CommunityToolkit.Aspire.Hosting.ActiveMQ.AppHost.TypeScript/aspire.config.json index 612bd8bf9..9ae33abe8 100644 --- a/examples/activemq/CommunityToolkit.Aspire.Hosting.ActiveMQ.AppHost.TypeScript/aspire.config.json +++ b/examples/activemq/CommunityToolkit.Aspire.Hosting.ActiveMQ.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.ActiveMQ": "" + "CommunityToolkit.Aspire.Hosting.ActiveMQ": "../../../src/CommunityToolkit.Aspire.Hosting.ActiveMQ/CommunityToolkit.Aspire.Hosting.ActiveMQ.csproj" } -} \ No newline at end of file +} diff --git a/examples/adminer/CommunityToolkit.Aspire.Hosting.Adminer.AppHost.TypeScript/aspire.config.json b/examples/adminer/CommunityToolkit.Aspire.Hosting.Adminer.AppHost.TypeScript/aspire.config.json index 062536776..4d2593612 100644 --- a/examples/adminer/CommunityToolkit.Aspire.Hosting.Adminer.AppHost.TypeScript/aspire.config.json +++ b/examples/adminer/CommunityToolkit.Aspire.Hosting.Adminer.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Adminer": "" + "CommunityToolkit.Aspire.Hosting.Adminer": "../../../src/CommunityToolkit.Aspire.Hosting.Adminer/CommunityToolkit.Aspire.Hosting.Adminer.csproj" } } diff --git a/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json b/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json index 7451196bb..ed6985a62 100644 --- a/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json +++ b/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Bun": "" + "CommunityToolkit.Aspire.Hosting.Bun": "../../../src/CommunityToolkit.Aspire.Hosting.Bun/CommunityToolkit.Aspire.Hosting.Bun.csproj" } } diff --git a/examples/data-api-builder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.AppHost.TypeScript/aspire.config.json b/examples/data-api-builder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.AppHost.TypeScript/aspire.config.json index 5e02b2b00..a28071193 100644 --- a/examples/data-api-builder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.AppHost.TypeScript/aspire.config.json +++ b/examples/data-api-builder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder": "" + "CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder": "../../../src/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder/CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.csproj" } -} \ No newline at end of file +} diff --git a/examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost.TypeScript/aspire.config.json b/examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost.TypeScript/aspire.config.json index 32e005ff5..daeb71a18 100644 --- a/examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost.TypeScript/aspire.config.json +++ b/examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.DbGate": "" + "CommunityToolkit.Aspire.Hosting.DbGate": "../../../src/CommunityToolkit.Aspire.Hosting.DbGate/CommunityToolkit.Aspire.Hosting.DbGate.csproj" } } diff --git a/examples/deno/CommunityToolkit.Aspire.Hosting.Deno.AppHost.TypeScript/aspire.config.json b/examples/deno/CommunityToolkit.Aspire.Hosting.Deno.AppHost.TypeScript/aspire.config.json index 675f8c3da..94493adf1 100644 --- a/examples/deno/CommunityToolkit.Aspire.Hosting.Deno.AppHost.TypeScript/aspire.config.json +++ b/examples/deno/CommunityToolkit.Aspire.Hosting.Deno.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Deno": "" + "CommunityToolkit.Aspire.Hosting.Deno": "../../../src/CommunityToolkit.Aspire.Hosting.Deno/CommunityToolkit.Aspire.Hosting.Deno.csproj" } -} \ No newline at end of file +} diff --git a/examples/elasticsearch-ext/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions.AppHost.TypeScript/aspire.config.json b/examples/elasticsearch-ext/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions.AppHost.TypeScript/aspire.config.json index ad8c44b42..35fd0c483 100644 --- a/examples/elasticsearch-ext/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/elasticsearch-ext/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions": "" + "CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions/CommunityToolkit.Aspire.Hosting.Elasticsearch.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/flagd/CommunityToolkit.Aspire.Hosting.Flagd.AppHost.TypeScript/aspire.config.json b/examples/flagd/CommunityToolkit.Aspire.Hosting.Flagd.AppHost.TypeScript/aspire.config.json index 0876a15ef..38025bd0e 100644 --- a/examples/flagd/CommunityToolkit.Aspire.Hosting.Flagd.AppHost.TypeScript/aspire.config.json +++ b/examples/flagd/CommunityToolkit.Aspire.Hosting.Flagd.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Flagd": "" + "CommunityToolkit.Aspire.Hosting.Flagd": "../../../src/CommunityToolkit.Aspire.Hosting.Flagd/CommunityToolkit.Aspire.Hosting.Flagd.csproj" } } diff --git a/examples/flyway/CommunityToolkit.Aspire.Hosting.Flyway.AppHost.TypeScript/aspire.config.json b/examples/flyway/CommunityToolkit.Aspire.Hosting.Flyway.AppHost.TypeScript/aspire.config.json index 824f8ff5c..21db43158 100644 --- a/examples/flyway/CommunityToolkit.Aspire.Hosting.Flyway.AppHost.TypeScript/aspire.config.json +++ b/examples/flyway/CommunityToolkit.Aspire.Hosting.Flyway.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Flyway": "" + "CommunityToolkit.Aspire.Hosting.Flyway": "../../../src/CommunityToolkit.Aspire.Hosting.Flyway/CommunityToolkit.Aspire.Hosting.Flyway.csproj" } } diff --git a/examples/goff/CommunityToolkit.Aspire.Hosting.GoFeatureFlag.AppHost.TypeScript/aspire.config.json b/examples/goff/CommunityToolkit.Aspire.Hosting.GoFeatureFlag.AppHost.TypeScript/aspire.config.json index 5db0afa9a..0bc3bbcdc 100644 --- a/examples/goff/CommunityToolkit.Aspire.Hosting.GoFeatureFlag.AppHost.TypeScript/aspire.config.json +++ b/examples/goff/CommunityToolkit.Aspire.Hosting.GoFeatureFlag.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.GoFeatureFlag": "" + "CommunityToolkit.Aspire.Hosting.GoFeatureFlag": "../../../src/CommunityToolkit.Aspire.Hosting.GoFeatureFlag/CommunityToolkit.Aspire.Hosting.GoFeatureFlag.csproj" } } diff --git a/examples/golang/CommunityToolkit.Aspire.Hosting.Golang.AppHost.TypeScript/aspire.config.json b/examples/golang/CommunityToolkit.Aspire.Hosting.Golang.AppHost.TypeScript/aspire.config.json index 1160abdf9..9de0d163d 100644 --- a/examples/golang/CommunityToolkit.Aspire.Hosting.Golang.AppHost.TypeScript/aspire.config.json +++ b/examples/golang/CommunityToolkit.Aspire.Hosting.Golang.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Golang": "" + "CommunityToolkit.Aspire.Hosting.Golang": "../../../src/CommunityToolkit.Aspire.Hosting.Golang/CommunityToolkit.Aspire.Hosting.Golang.csproj" } -} \ No newline at end of file +} diff --git a/examples/java/CommunityToolkit.Aspire.Hosting.Java.AppHost.TypeScript/aspire.config.json b/examples/java/CommunityToolkit.Aspire.Hosting.Java.AppHost.TypeScript/aspire.config.json index ace8a88a1..44584326e 100644 --- a/examples/java/CommunityToolkit.Aspire.Hosting.Java.AppHost.TypeScript/aspire.config.json +++ b/examples/java/CommunityToolkit.Aspire.Hosting.Java.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Java": "" + "CommunityToolkit.Aspire.Hosting.Java": "../../../src/CommunityToolkit.Aspire.Hosting.Java/CommunityToolkit.Aspire.Hosting.Java.csproj" } -} \ No newline at end of file +} diff --git a/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.TypeScript/aspire.config.json b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.TypeScript/aspire.config.json index e2f525642..100e79893 100644 --- a/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.JavaScript.Extensions": "" + "CommunityToolkit.Aspire.Hosting.JavaScript.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/k6/CommunityToolkit.Aspire.Hosting.k6.AppHost.TypeScript/aspire.config.json b/examples/k6/CommunityToolkit.Aspire.Hosting.k6.AppHost.TypeScript/aspire.config.json index af29b6af4..b8f14388e 100644 --- a/examples/k6/CommunityToolkit.Aspire.Hosting.k6.AppHost.TypeScript/aspire.config.json +++ b/examples/k6/CommunityToolkit.Aspire.Hosting.k6.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.k6": "" + "CommunityToolkit.Aspire.Hosting.k6": "../../../src/CommunityToolkit.Aspire.Hosting.k6/CommunityToolkit.Aspire.Hosting.k6.csproj" } } diff --git a/examples/keycloak-postgres/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.TypeScript/aspire.config.json b/examples/keycloak-postgres/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.TypeScript/aspire.config.json index c4c489607..7a3dd97f5 100644 --- a/examples/keycloak-postgres/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/keycloak-postgres/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Keycloak.Extensions": "" + "CommunityToolkit.Aspire.Hosting.Keycloak.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions/CommunityToolkit.Aspire.Hosting.Keycloak.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/kurrentdb/CommunityToolkit.Aspire.Hosting.KurrentDB.AppHost.TypeScript/aspire.config.json b/examples/kurrentdb/CommunityToolkit.Aspire.Hosting.KurrentDB.AppHost.TypeScript/aspire.config.json index bc1f6ca32..8606b8b22 100644 --- a/examples/kurrentdb/CommunityToolkit.Aspire.Hosting.KurrentDB.AppHost.TypeScript/aspire.config.json +++ b/examples/kurrentdb/CommunityToolkit.Aspire.Hosting.KurrentDB.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.KurrentDB": "" + "CommunityToolkit.Aspire.Hosting.KurrentDB": "../../../src/CommunityToolkit.Aspire.Hosting.KurrentDB/CommunityToolkit.Aspire.Hosting.KurrentDB.csproj" } } diff --git a/examples/lavinmq/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost.TypeScript/aspire.config.json b/examples/lavinmq/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost.TypeScript/aspire.config.json index 4225ba1d7..cce9b8509 100644 --- a/examples/lavinmq/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost.TypeScript/aspire.config.json +++ b/examples/lavinmq/CommunityToolkit.Aspire.Hosting.LavinMQ.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.LavinMQ": "" + "CommunityToolkit.Aspire.Hosting.LavinMQ": "../../../src/CommunityToolkit.Aspire.Hosting.LavinMQ/CommunityToolkit.Aspire.Hosting.LavinMQ.csproj" } } diff --git a/examples/mailpit/CommunityToolkit.Aspire.Hosting.MailPit.AppHost.TypeScript/aspire.config.json b/examples/mailpit/CommunityToolkit.Aspire.Hosting.MailPit.AppHost.TypeScript/aspire.config.json index 40f71b819..2467eb973 100644 --- a/examples/mailpit/CommunityToolkit.Aspire.Hosting.MailPit.AppHost.TypeScript/aspire.config.json +++ b/examples/mailpit/CommunityToolkit.Aspire.Hosting.MailPit.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.MailPit": "" + "CommunityToolkit.Aspire.Hosting.MailPit": "../../../src/CommunityToolkit.Aspire.Hosting.MailPit/CommunityToolkit.Aspire.Hosting.MailPit.csproj" } } diff --git a/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/aspire.config.json b/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/aspire.config.json index 7f403a27f..2feb3b822 100644 --- a/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/aspire.config.json +++ b/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.McpInspector": "" + "CommunityToolkit.Aspire.Hosting.McpInspector": "../../../src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj" } } diff --git a/examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost.TypeScript/aspire.config.json b/examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost.TypeScript/aspire.config.json index c757477b9..d0c9fc521 100644 --- a/examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost.TypeScript/aspire.config.json +++ b/examples/meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Meilisearch": "" + "CommunityToolkit.Aspire.Hosting.Meilisearch": "../../../src/CommunityToolkit.Aspire.Hosting.Meilisearch/CommunityToolkit.Aspire.Hosting.Meilisearch.csproj" } } diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json index f8491c815..6750abcb0 100644 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json +++ b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Minio": "" + "CommunityToolkit.Aspire.Hosting.Minio": "../../../src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj" } } diff --git a/examples/mongodb-ext/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.AppHost.TypeScript/aspire.config.json b/examples/mongodb-ext/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.AppHost.TypeScript/aspire.config.json index f3b3b79ca..ea85f1321 100644 --- a/examples/mongodb-ext/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/mongodb-ext/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.MongoDB.Extensions": "13.2.1-polyglot.local" + "CommunityToolkit.Aspire.Hosting.MongoDB.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/mysql-ext/CommunityToolkit.Aspire.Hosting.MySql.Extensions.AppHost.TypeScript/aspire.config.json b/examples/mysql-ext/CommunityToolkit.Aspire.Hosting.MySql.Extensions.AppHost.TypeScript/aspire.config.json index aca62cd4c..f2704f28a 100644 --- a/examples/mysql-ext/CommunityToolkit.Aspire.Hosting.MySql.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/mysql-ext/CommunityToolkit.Aspire.Hosting.MySql.Extensions.AppHost.TypeScript/aspire.config.json @@ -14,6 +14,6 @@ }, "packages": { "Aspire.Hosting.MySql": "", - "CommunityToolkit.Aspire.Hosting.MySql.Extensions": "" + "CommunityToolkit.Aspire.Hosting.MySql.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.MySql.Extensions/CommunityToolkit.Aspire.Hosting.MySql.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/ngrok/CommunityToolkit.Aspire.Hosting.Ngrok.AppHost.TypeScript/aspire.config.json b/examples/ngrok/CommunityToolkit.Aspire.Hosting.Ngrok.AppHost.TypeScript/aspire.config.json index a6fb41be4..5647b3acf 100644 --- a/examples/ngrok/CommunityToolkit.Aspire.Hosting.Ngrok.AppHost.TypeScript/aspire.config.json +++ b/examples/ngrok/CommunityToolkit.Aspire.Hosting.Ngrok.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Ngrok": "" + "CommunityToolkit.Aspire.Hosting.Ngrok": "../../../src/CommunityToolkit.Aspire.Hosting.Ngrok/CommunityToolkit.Aspire.Hosting.Ngrok.csproj" } } diff --git a/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/aspire.config.json b/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/aspire.config.json index a56a4ad64..6cc922e9d 100644 --- a/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/aspire.config.json +++ b/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector": "" + "CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector": "../../../src/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.csproj" } } diff --git a/examples/papercut/CommunityToolkit.Aspire.Hosting.PapercutSmtp.AppHost.TypeScript/aspire.config.json b/examples/papercut/CommunityToolkit.Aspire.Hosting.PapercutSmtp.AppHost.TypeScript/aspire.config.json index fb102598e..506405be8 100644 --- a/examples/papercut/CommunityToolkit.Aspire.Hosting.PapercutSmtp.AppHost.TypeScript/aspire.config.json +++ b/examples/papercut/CommunityToolkit.Aspire.Hosting.PapercutSmtp.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.PapercutSmtp": "" + "CommunityToolkit.Aspire.Hosting.PapercutSmtp": "../../../src/CommunityToolkit.Aspire.Hosting.PapercutSmtp/CommunityToolkit.Aspire.Hosting.PapercutSmtp.csproj" } } diff --git a/examples/postgres-ext/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.AppHost.TypeScript/aspire.config.json b/examples/postgres-ext/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.AppHost.TypeScript/aspire.config.json index 0178c6870..eeb447907 100644 --- a/examples/postgres-ext/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/postgres-ext/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions": "" + "CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.csproj" } } diff --git a/examples/python/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost.TypeScript/aspire.config.json b/examples/python/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost.TypeScript/aspire.config.json index b5c304659..58adf9fea 100644 --- a/examples/python/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/python/CommunityToolkit.Aspire.Hosting.Python.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Python.Extensions": "" + "CommunityToolkit.Aspire.Hosting.Python.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.Python.Extensions/CommunityToolkit.Aspire.Hosting.Python.Extensions.csproj" } -} \ No newline at end of file +} diff --git a/examples/redis-ext/CommunityToolkit.Aspire.Hosting.Redis.Extensions.AppHost.TypeScript/aspire.config.json b/examples/redis-ext/CommunityToolkit.Aspire.Hosting.Redis.Extensions.AppHost.TypeScript/aspire.config.json index 29c681a02..4a6aa1ac0 100644 --- a/examples/redis-ext/CommunityToolkit.Aspire.Hosting.Redis.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/redis-ext/CommunityToolkit.Aspire.Hosting.Redis.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Redis.Extensions": "" + "CommunityToolkit.Aspire.Hosting.Redis.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/CommunityToolkit.Aspire.Hosting.Redis.Extensions.csproj" } } diff --git a/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/aspire.config.json b/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/aspire.config.json index da85e3e71..3238e164d 100644 --- a/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/aspire.config.json +++ b/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Rust": "" + "CommunityToolkit.Aspire.Hosting.Rust": "../../../src/CommunityToolkit.Aspire.Hosting.Rust/CommunityToolkit.Aspire.Hosting.Rust.csproj" } } diff --git a/examples/sftp/CommunityToolkit.Aspire.Hosting.Sftp.AppHost.TypeScript/aspire.config.json b/examples/sftp/CommunityToolkit.Aspire.Hosting.Sftp.AppHost.TypeScript/aspire.config.json index bbf97bf32..33ec5199c 100644 --- a/examples/sftp/CommunityToolkit.Aspire.Hosting.Sftp.AppHost.TypeScript/aspire.config.json +++ b/examples/sftp/CommunityToolkit.Aspire.Hosting.Sftp.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Sftp": "" + "CommunityToolkit.Aspire.Hosting.Sftp": "../../../src/CommunityToolkit.Aspire.Hosting.Sftp/CommunityToolkit.Aspire.Hosting.Sftp.csproj" } -} \ No newline at end of file +} diff --git a/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/aspire.config.json b/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/aspire.config.json index cb011427e..ff66ff9b6 100644 --- a/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/aspire.config.json +++ b/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Solr": "" + "CommunityToolkit.Aspire.Hosting.Solr": "../../../src/CommunityToolkit.Aspire.Hosting.Solr/CommunityToolkit.Aspire.Hosting.Solr.csproj" } } diff --git a/examples/sql-database-projects/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.AppHost.TypeScript/aspire.config.json b/examples/sql-database-projects/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.AppHost.TypeScript/aspire.config.json index 9c781d96d..2cab0502d 100644 --- a/examples/sql-database-projects/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.AppHost.TypeScript/aspire.config.json +++ b/examples/sql-database-projects/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.AppHost.TypeScript/aspire.config.json @@ -14,6 +14,6 @@ }, "packages": { "Aspire.Hosting.SqlServer": "", - "CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects": "13.2.1-polyglot.local" + "CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects": "../../../src/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects/CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects.csproj" } -} \ No newline at end of file +} diff --git a/examples/sqlite/CommunityToolkit.Aspire.Hosting.Sqlite.AppHost.TypeScript/aspire.config.json b/examples/sqlite/CommunityToolkit.Aspire.Hosting.Sqlite.AppHost.TypeScript/aspire.config.json index 633594ece..98fc0ca9c 100644 --- a/examples/sqlite/CommunityToolkit.Aspire.Hosting.Sqlite.AppHost.TypeScript/aspire.config.json +++ b/examples/sqlite/CommunityToolkit.Aspire.Hosting.Sqlite.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Sqlite": "" + "CommunityToolkit.Aspire.Hosting.Sqlite": "../../../src/CommunityToolkit.Aspire.Hosting.Sqlite/CommunityToolkit.Aspire.Hosting.Sqlite.csproj" } -} \ No newline at end of file +} diff --git a/examples/sqlserver-ext/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost.TypeScript/aspire.config.json b/examples/sqlserver-ext/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost.TypeScript/aspire.config.json index 298903de9..8b3e46eaa 100644 --- a/examples/sqlserver-ext/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost.TypeScript/aspire.config.json +++ b/examples/sqlserver-ext/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions": "" + "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions": "../../../src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj" } } diff --git a/examples/stripe/CommunityToolkit.Aspire.Hosting.Stripe.AppHost.TypeScript/aspire.config.json b/examples/stripe/CommunityToolkit.Aspire.Hosting.Stripe.AppHost.TypeScript/aspire.config.json index 62b113c3c..10feabeef 100644 --- a/examples/stripe/CommunityToolkit.Aspire.Hosting.Stripe.AppHost.TypeScript/aspire.config.json +++ b/examples/stripe/CommunityToolkit.Aspire.Hosting.Stripe.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Stripe": "" + "CommunityToolkit.Aspire.Hosting.Stripe": "../../../src/CommunityToolkit.Aspire.Hosting.Stripe/CommunityToolkit.Aspire.Hosting.Stripe.csproj" } } diff --git a/examples/surrealdb/CommunityToolkit.Aspire.Hosting.SurrealDb.AppHost.TypeScript/aspire.config.json b/examples/surrealdb/CommunityToolkit.Aspire.Hosting.SurrealDb.AppHost.TypeScript/aspire.config.json index 89d2536fa..c0d5aeacb 100644 --- a/examples/surrealdb/CommunityToolkit.Aspire.Hosting.SurrealDb.AppHost.TypeScript/aspire.config.json +++ b/examples/surrealdb/CommunityToolkit.Aspire.Hosting.SurrealDb.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.SurrealDb": "" + "CommunityToolkit.Aspire.Hosting.SurrealDb": "../../../src/CommunityToolkit.Aspire.Hosting.SurrealDb/CommunityToolkit.Aspire.Hosting.SurrealDb.csproj" } -} \ No newline at end of file +} diff --git a/examples/umami/CommunityToolkit.Aspire.Hosting.Umami.AppHost.TypeScript/aspire.config.json b/examples/umami/CommunityToolkit.Aspire.Hosting.Umami.AppHost.TypeScript/aspire.config.json index d1b56bc58..1c0270a85 100644 --- a/examples/umami/CommunityToolkit.Aspire.Hosting.Umami.AppHost.TypeScript/aspire.config.json +++ b/examples/umami/CommunityToolkit.Aspire.Hosting.Umami.AppHost.TypeScript/aspire.config.json @@ -13,6 +13,6 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Umami": "" + "CommunityToolkit.Aspire.Hosting.Umami": "../../../src/CommunityToolkit.Aspire.Hosting.Umami/CommunityToolkit.Aspire.Hosting.Umami.csproj" } } diff --git a/examples/zitadel/CommunityToolkit.Aspire.Hosting.Zitadel.AppHost.TypeScript/aspire.config.json b/examples/zitadel/CommunityToolkit.Aspire.Hosting.Zitadel.AppHost.TypeScript/aspire.config.json index 0947a2ceb..e0d556620 100644 --- a/examples/zitadel/CommunityToolkit.Aspire.Hosting.Zitadel.AppHost.TypeScript/aspire.config.json +++ b/examples/zitadel/CommunityToolkit.Aspire.Hosting.Zitadel.AppHost.TypeScript/aspire.config.json @@ -13,7 +13,7 @@ } }, "packages": { - "CommunityToolkit.Aspire.Hosting.Zitadel": "13.2.1-polyglot.local", + "CommunityToolkit.Aspire.Hosting.Zitadel": "../../../src/CommunityToolkit.Aspire.Hosting.Zitadel/CommunityToolkit.Aspire.Hosting.Zitadel.csproj", "Aspire.Hosting.PostgreSQL": "" } -} \ No newline at end of file +} From c999748a493843e5a0c9902c8bafaaa32e35cf07 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Thu, 2 Apr 2026 06:56:28 +0000 Subject: [PATCH 02/17] fixing mcp inspector not having a default server --- .../apphost.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/apphost.ts b/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/apphost.ts index 926775e5d..f26ac0b17 100644 --- a/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/apphost.ts +++ b/examples/mcp-inspector/CommunityToolkit.Aspire.Hosting.McpInspector.AppHost.TypeScript/apphost.ts @@ -1,4 +1,4 @@ -import { createBuilder, McpTransportType } from './.modules/aspire.js'; +import { createBuilder, McpTransportType } from "./.modules/aspire.js"; const builder = await createBuilder(); @@ -15,34 +15,38 @@ const secondaryServer = await builder const inspectorDefault = await builder.addMcpInspector("inspector-default"); await inspectorDefault.withInspectedMcpServer(inspectedServer); -const inspectorConfigured = await builder.addMcpInspector("inspector-configured", { - clientPort: 6284, - serverPort: 6287, - inspectorVersion: "0.17.2", - proxyToken -}); +const inspectorConfigured = await builder.addMcpInspector( + "inspector-configured", + { + clientPort: 6284, + serverPort: 6287, + inspectorVersion: "0.17.2", + proxyToken, + }, +); await inspectorConfigured.withInspectedMcpServer(secondaryServer, { - isDefault: false, + isDefault: true, transportType: McpTransportType.StreamableHttp, - path: "/custom-mcp" + path: "/custom-mcp", }); const inspectorYarn = await builder.addMcpInspector("inspector-yarn", { clientPort: 6294, - serverPort: 6297 + serverPort: 6297, }); await inspectorYarn.withYarn(); const inspectorPnpm = await builder.addMcpInspector("inspector-pnpm", { clientPort: 6304, - serverPort: 6307 + serverPort: 6307, }); await inspectorPnpm.withPnpm(); const inspectorBun = await builder.addMcpInspector("inspector-bun", { clientPort: 6314, - serverPort: 6317 + serverPort: 6317, }); await inspectorBun.withBun(); await builder.build().run(); + From cd16ba0d2a4b67184fe3ea6bc3aab4e60d78ab63 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Thu, 2 Apr 2026 07:26:38 +0000 Subject: [PATCH 03/17] updating ignores --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index ccf1022b7..0c0e7be9b 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,8 @@ target node_modules **/.modules/ **/*.AppHost.TypeScript/nuget.config +tsconfig.apphost.json +.ngrok +bun.lock +pnpm-lock.yaml +yarn.lock From 0a62e5b9054421a466e94b69d7ced4cbe1e476f1 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Thu, 2 Apr 2026 07:31:46 +0000 Subject: [PATCH 04/17] feat: add secrets support to TypeScript apphost validation Add a -Secrets parameter to validate-typescript-apphost.ps1 that accepts key=value pairs. The script calls 'aspire secret set' for each pair before starting the apphost, and cleans them up via 'aspire secret delete' in the finally block. Update TypeScriptAppHostTest.Run() with an optional secrets dictionary parameter that forwards to the PowerShell script. Update the McpInspector TypeScript test to pass the required proxy-token secret parameter. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/testing/validate-typescript-apphost.ps1 | 45 ++++++++++++++++++- .../TypeScriptAppHostTests.cs | 4 ++ .../TypeScriptAppHostTest.cs | 8 ++++ 3 files changed, 56 insertions(+), 1 deletion(-) diff --git a/eng/testing/validate-typescript-apphost.ps1 b/eng/testing/validate-typescript-apphost.ps1 index 53414139e..ee347f2f8 100644 --- a/eng/testing/validate-typescript-apphost.ps1 +++ b/eng/testing/validate-typescript-apphost.ps1 @@ -19,7 +19,9 @@ param( [ValidateSet("healthy", "up", "down")] [string]$WaitStatus = "healthy", - [int]$WaitTimeoutSeconds = 180 + [int]$WaitTimeoutSeconds = 180, + + [string[]]$Secrets = @() ) $ErrorActionPreference = "Stop" @@ -102,6 +104,27 @@ foreach ($commandName in $RequiredCommands) { } } +if ($Secrets.Count -eq 1 -and -not [string]::IsNullOrWhiteSpace($Secrets[0])) { + $splitOptions = [System.StringSplitOptions]::RemoveEmptyEntries -bor [System.StringSplitOptions]::TrimEntries + $Secrets = $Secrets[0].Split(",", $splitOptions) +} + +$parsedSecrets = [System.Collections.Generic.List[string[]]]::new() +foreach ($secret in $Secrets) { + if ([string]::IsNullOrWhiteSpace($secret)) { + continue + } + + $eqIndex = $secret.IndexOf('=') + if ($eqIndex -le 0) { + throw "Invalid secret format '$secret'. Expected 'key=value'." + } + + $key = $secret.Substring(0, $eqIndex) + $value = $secret.Substring($eqIndex + 1) + $parsedSecrets.Add(@($key, $value)) +} + try { $originalConfig = Get-Content -Path $configPath -Raw New-Item -ItemType Directory -Path $localSource -Force | Out-Null @@ -145,6 +168,15 @@ try { Pop-Location } + foreach ($secretPair in $parsedSecrets) { + Invoke-ExternalCommand "aspire" @( + "secret", "set", + $secretPair[0], $secretPair[1], + "--apphost", $resolvedAppHostPath, + "--non-interactive" + ) + } + Push-Location $appHostDirectory try { Invoke-ExternalCommand "aspire" @( @@ -212,6 +244,17 @@ finally { } } } -Failures $cleanupFailures + + Invoke-CleanupStep -Description "remove secrets" -Action { + foreach ($secretPair in $parsedSecrets) { + Invoke-ExternalCommand "aspire" @( + "secret", "delete", + $secretPair[0], + "--apphost", $resolvedAppHostPath, + "--non-interactive" + ) + } + } -Failures $cleanupFailures } if ($cleanupFailures.Count -gt 0) { diff --git a/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/TypeScriptAppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/TypeScriptAppHostTests.cs index 2385aaa6a..a6406da56 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/TypeScriptAppHostTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/TypeScriptAppHostTests.cs @@ -14,6 +14,10 @@ await TypeScriptAppHostTest.Run( exampleName: "mcp-inspector", waitForResources: ["inspector-default", "inspector-configured", "inspector-yarn", "inspector-pnpm", "inspector-bun"], requiredCommands: ["yarn", "pnpm", "bun"], + secrets: new Dictionary + { + ["Parameters:proxy-token"] = "test-proxy-token" + }, cancellationToken: TestContext.Current.CancellationToken); } } diff --git a/tests/CommunityToolkit.Aspire.Testing/TypeScriptAppHostTest.cs b/tests/CommunityToolkit.Aspire.Testing/TypeScriptAppHostTest.cs index 879ead6cc..dedc17042 100644 --- a/tests/CommunityToolkit.Aspire.Testing/TypeScriptAppHostTest.cs +++ b/tests/CommunityToolkit.Aspire.Testing/TypeScriptAppHostTest.cs @@ -14,6 +14,7 @@ public static class TypeScriptAppHostTest /// The resources that must reach the expected Aspire state, if any. /// The Aspire resource status to wait for. /// Optional commands that must exist on PATH before validation runs. + /// Optional dictionary of secret key-value pairs to set via aspire secret set before starting the app host. /// The cancellation token. public static async Task Run( string appHostProject, @@ -22,6 +23,7 @@ public static async Task Run( IEnumerable waitForResources, string waitStatus = "healthy", IEnumerable? requiredCommands = null, + Dictionary? secrets = null, CancellationToken cancellationToken = default) { ArgumentException.ThrowIfNullOrWhiteSpace(appHostProject); @@ -76,6 +78,12 @@ public static async Task Run( arguments.Add(string.Join(',', commands)); } + if (secrets is { Count: > 0 }) + { + arguments.Add("-Secrets"); + arguments.Add(string.Join(',', secrets.Select(kvp => $"{kvp.Key}={kvp.Value}"))); + } + await ProcessTestUtilities.RunProcessAsync(shell, arguments, repoRoot, cancellationToken); } } \ No newline at end of file From fad77fdac8aaad0f86521876fa356295c901e363 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 04:19:40 +0000 Subject: [PATCH 05/17] feat: auto-detect and pack local project dependencies in TS apphost validation The validate-typescript-apphost.ps1 script now uses dotnet msbuild -getItem:ProjectReference to discover CommunityToolkit.* project references from the integration being tested. Each discovered dependency is packed into the temp NuGet source and added to aspire.config.json alongside the main package. This fixes TypeScript apphost validation for integrations like MongoDB.Extensions, MySql.Extensions, PostgreSQL.Extensions, Redis.Extensions, and SqlServer.Extensions which depend on local packages like DbGate, Adminer, and Flyway. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/testing/validate-typescript-apphost.ps1 | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/eng/testing/validate-typescript-apphost.ps1 b/eng/testing/validate-typescript-apphost.ps1 index ee347f2f8..3ac18d89e 100644 --- a/eng/testing/validate-typescript-apphost.ps1 +++ b/eng/testing/validate-typescript-apphost.ps1 @@ -88,6 +88,25 @@ if ([string]::IsNullOrWhiteSpace($PackageVersion)) { $PackageVersion = "$versionPrefix-polyglot.local" } +# Discover local CommunityToolkit project references that also need packing +$localDependencies = @() +$projRefJson = (& dotnet msbuild $resolvedPackageProjectPath -nologo -v:q -getItem:ProjectReference) | Out-String +$projRefData = $projRefJson | ConvertFrom-Json +$projRefs = @($projRefData.Items.ProjectReference) +foreach ($ref in $projRefs) { + if ($ref.Filename -like "CommunityToolkit.*") { + $localDependencies += @{ + Name = $ref.Filename + FullPath = $ref.FullPath + } + } +} + +if ($localDependencies.Count -gt 0) { + $depNames = ($localDependencies | ForEach-Object { $_.Name }) -join ", " + Write-Host "Discovered local dependencies to pack: $depNames" +} + if ($WaitForResources.Count -eq 1 -and -not [string]::IsNullOrWhiteSpace($WaitForResources[0])) { $splitOptions = [System.StringSplitOptions]::RemoveEmptyEntries -bor [System.StringSplitOptions]::TrimEntries $WaitForResources = $WaitForResources[0].Split(",", $splitOptions) @@ -137,12 +156,25 @@ try { "-o", $localSource ) + foreach ($dep in $localDependencies) { + Invoke-ExternalCommand "dotnet" @( + "pack", + $dep.FullPath, + "-c", "Debug", + "-p:PackageVersion=$PackageVersion", + "-o", $localSource + ) + } + $config = $originalConfig | ConvertFrom-Json -AsHashtable if ($null -eq $config["packages"]) { $config["packages"] = [ordered]@{} } $config["packages"][$PackageName] = $PackageVersion + foreach ($dep in $localDependencies) { + $config["packages"][$dep.Name] = $PackageVersion + } $config | ConvertTo-Json -Depth 10 | Set-Content -Path $configPath -NoNewline @" From 71fa53f709f1a72ebe0437fae2d18ee0529c41a4 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 05:10:32 +0000 Subject: [PATCH 06/17] Disabling ngrok TS apphost test on CIThis requires an authenticated ngrok account to be setup, which can be done locally but not for CI --- .../TypeScriptAppHostTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/TypeScriptAppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/TypeScriptAppHostTests.cs index c26b5e45b..79e2a0b6c 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/TypeScriptAppHostTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.Ngrok.Tests/TypeScriptAppHostTests.cs @@ -3,6 +3,7 @@ namespace CommunityToolkit.Aspire.Hosting.Ngrok.Tests; [RequiresDocker] +[RequiresAuthenticatedTool("ngrok")] public class TypeScriptAppHostTests { [Fact] From 78dfcd6e83b85b067929537c3821024f67338da0 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 05:27:43 +0000 Subject: [PATCH 07/17] Simplfying the TS apphostThe routing stuff isn't meant to work the way it was defined and would cause the apphost to fail --- .../apphost.ts | 28 +------------------ .../TypeScriptAppHostTests.cs | 2 +- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/apphost.ts b/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/apphost.ts index 62c68ed82..a2e8a783e 100644 --- a/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/apphost.ts +++ b/examples/opentelemetry-collector/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript/apphost.ts @@ -1,4 +1,4 @@ -import { createBuilder } from './.modules/aspire.js'; +import { createBuilder } from "./.modules/aspire.js"; const builder = await createBuilder(); @@ -7,26 +7,6 @@ const collector = await builder.addOpenTelemetryCollector("collector"); await collector.withConfig("./otel-config.yaml"); await collector.withAppForwarding(); -// addOpenTelemetryCollector — settings callback overload -const routedCollector = await builder.addOpenTelemetryCollector("collector-routed", { - configureSettings: async (settings) => { - await settings.forceNonSecureReceiver.set(true); - await settings.enableGrpcEndpoint.set(true); - await settings.enableHttpEndpoint.set(true); - await settings.disableHealthcheck.set(false); - await settings.registry.set("ghcr.io"); - await settings.image.set("open-telemetry/opentelemetry-collector-releases/opentelemetry-collector-contrib"); - await settings.collectorTag.set("latest"); - - const _forceNonSecureReceiver: boolean = await settings.forceNonSecureReceiver.get(); - const _collectorTag: string = await settings.collectorTag.get(); - const _collectorImage: string = await settings.collectorImage.get(); - } -}); - -await routedCollector.withConfig("./otel-config.yaml"); -await routedCollector.withOpenTelemetryCollectorRouting(collector); - // ---- Property access on OpenTelemetryCollectorResource (ExposeProperties = true) ---- const collectorResource = await collector; const _grpcEndpoint = await collectorResource.grpcEndpoint.get(); @@ -34,10 +14,4 @@ const _httpEndpoint = await collectorResource.httpEndpoint.get(); const _grpcEndpointName = await _grpcEndpoint.endpointName.get(); const _httpEndpointName = await _httpEndpoint.endpointName.get(); -const routedCollectorResource = await routedCollector; -const _routedGrpcEndpoint = await routedCollectorResource.grpcEndpoint.get(); -const _routedHttpEndpoint = await routedCollectorResource.httpEndpoint.get(); -const _routedGrpcEndpointName = await _routedGrpcEndpoint.endpointName.get(); -const _routedHttpEndpointName = await _routedHttpEndpoint.endpointName.get(); - await builder.build().run(); diff --git a/tests/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.Tests/TypeScriptAppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.Tests/TypeScriptAppHostTests.cs index 4430a2138..78da54e48 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.Tests/TypeScriptAppHostTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.Tests/TypeScriptAppHostTests.cs @@ -12,7 +12,7 @@ await TypeScriptAppHostTest.Run( appHostProject: "CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector.AppHost.TypeScript", packageName: "CommunityToolkit.Aspire.Hosting.OpenTelemetryCollector", exampleName: "opentelemetry-collector", - waitForResources: ["collector", "collector-routed"], + waitForResources: ["collector"], cancellationToken: TestContext.Current.CancellationToken); } } From f7d41a92b86d594b7a15ded0567f0f295e56dbcf Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 06:27:11 +0000 Subject: [PATCH 08/17] Fixing path to the rust API --- .../apphost.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/apphost.ts b/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/apphost.ts index 6279fb6ce..22fd11ddb 100644 --- a/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/apphost.ts +++ b/examples/rust/CommunityToolkit.Aspire.Hosting.Rust.AppHost.TypeScript/apphost.ts @@ -1,7 +1,7 @@ import { createBuilder } from './.modules/aspire.js'; const builder = await createBuilder(); -const rustAppPath = "../../../../../examples/rust/actix_api"; +const rustAppPath = "../actix_api"; // addRustApp — minimal call const rustApp = await builder.addRustApp("rust-app", rustAppPath); From fd1b0d5c71044c99bde8ce6d79e6d4cd5afec1f6 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 07:12:20 +0000 Subject: [PATCH 09/17] ignoring solr data folder --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0c0e7be9b..875e9fc42 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ tsconfig.apphost.json bun.lock pnpm-lock.yaml yarn.lock +solr-data From 1affa00d8799c56ab7a0346f5de4c5b544ee8676 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 07:12:49 +0000 Subject: [PATCH 10/17] Fixing solr ts apphost by forcing permissions --- .../apphost.ts | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/apphost.ts b/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/apphost.ts index 7b9740323..0ee6a98d5 100644 --- a/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/apphost.ts +++ b/examples/solr/CommunityToolkit.Aspire.Hosting.Solr.AppHost.TypeScript/apphost.ts @@ -1,18 +1,22 @@ -import { mkdir } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; -import { fileURLToPath } from 'node:url'; -import { createBuilder } from './.modules/aspire.js'; +import { mkdir, chmod } from "node:fs/promises"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { createBuilder } from "./.modules/aspire.js"; const builder = await createBuilder(); const appHostDirectory = dirname(fileURLToPath(import.meta.url)); -const dataDirectory = join(appHostDirectory, 'data'); +const dataDirectory = join(appHostDirectory, "solr-data"); -await mkdir(dataDirectory, { recursive: true }); +await mkdir(dataDirectory, { recursive: true, mode: 0o777 }); -const solr = await builder.addSolr('solr'); +// force 777 permissions for the data directory to ensure Solr can write to it as the Docker container needs to have +// write permissions on the folder, or you have to change the folder owner to the UID in the container +await chmod(dataDirectory, 0o777); + +const solr = await builder.addSolr("solr"); const builderCoreName: string = await solr.coreName.get(); await solr.coreName.set(builderCoreName); -await solr.withDataVolume({ name: 'solr-data' }); +await solr.withDataVolume({ name: "solr-data" }); const resolvedSolr = await solr; const _primaryEndpoint = await resolvedSolr.primaryEndpoint.get(); @@ -22,14 +26,22 @@ const _coreName: string = await resolvedSolr.coreName.get(); const _connectionString = await resolvedSolr.connectionStringExpression.get(); const _uriExpression = await resolvedSolr.uriExpression.get(); -const bindMountedSolr = await builder.addSolr('solr-bind', { port: 8984, coreName: 'bindcore' }); +const bindMountedSolr = await builder.addSolr("solr-bind", { + port: 8984, + coreName: "bindcore", +}); const bindCoreName: string = await bindMountedSolr.coreName.get(); await bindMountedSolr.coreName.set(bindCoreName); await bindMountedSolr.withDataBindMount(dataDirectory); if (false) { - const configsetSolr = await builder.addSolr('solr-configset', { coreName: 'configset-core' }); - await configsetSolr.withConfigset('sample-configset', './configsets/sample-configset'); + const configsetSolr = await builder.addSolr("solr-configset", { + coreName: "configset-core", + }); + await configsetSolr.withConfigset( + "sample-configset", + "./configsets/sample-configset", + ); } await builder.build().run(); From 1cc1ba48b9365296f7345533b883599cc551686a Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Mon, 13 Apr 2026 07:23:51 +0000 Subject: [PATCH 11/17] ignore the possible failure due to solr data folder ownership --- .github/workflows/tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b6b40e24f..d91bd9c67 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -136,6 +136,7 @@ jobs: with: name: binlog-${{ matrix.name }}-${{ matrix.os }} path: "**/*.binlog" + continue-on-error: true - name: Upload test results artifact if: always() From 6f103eb25b2df75f3e0f54a56465970f191c9a84 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 1 May 2026 12:23:19 +1000 Subject: [PATCH 12/17] Fixing typescript validation script On Windows, it would try to run the npm.ps1 script, which then freaks out about arguments, so have to do some hacky stuff --- eng/testing/validate-typescript-apphost.ps1 | 30 +++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/eng/testing/validate-typescript-apphost.ps1 b/eng/testing/validate-typescript-apphost.ps1 index 3ac18d89e..84c0fb7d3 100644 --- a/eng/testing/validate-typescript-apphost.ps1 +++ b/eng/testing/validate-typescript-apphost.ps1 @@ -26,6 +26,30 @@ param( $ErrorActionPreference = "Stop" +function Resolve-ExternalCommandPath { + param( + [Parameter(Mandatory = $true)] + [string]$FilePath + ) + + if ([System.IO.Path]::IsPathRooted($FilePath) -or + $FilePath.Contains([System.IO.Path]::DirectorySeparatorChar) -or + $FilePath.Contains([System.IO.Path]::AltDirectorySeparatorChar)) { + return $FilePath + } + + $commandCandidates = @(Get-Command $FilePath -All -ErrorAction Stop) + $preferredCandidate = $commandCandidates | + Where-Object { $_.CommandType -eq [System.Management.Automation.CommandTypes]::Application } | + Select-Object -First 1 + + if ($null -ne $preferredCandidate) { + return $preferredCandidate.Source + } + + return $commandCandidates[0].Source +} + function Invoke-ExternalCommand { param( [Parameter(Mandatory = $true)] @@ -35,7 +59,9 @@ function Invoke-ExternalCommand { [string[]]$Arguments ) - & $FilePath @Arguments + $resolvedFilePath = Resolve-ExternalCommandPath $FilePath + + & $resolvedFilePath @Arguments if ($LASTEXITCODE -ne 0) { $joinedArguments = [string]::Join(" ", $Arguments) throw "Command failed with exit code ${LASTEXITCODE}: $FilePath $joinedArguments" @@ -301,4 +327,4 @@ if ($cleanupFailures.Count -gt 0) { if ($null -ne $primaryError) { throw $primaryError -} \ No newline at end of file +} From 3ffcf33f9279476f689444126107aa8a2b2c2861 Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 1 May 2026 12:23:43 +1000 Subject: [PATCH 13/17] Bumping package due to CVE --- Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 3712834b7..f7335a490 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -16,7 +16,7 @@ -preview.1.26170.3 9.0.0 10.0.5 - 1.12.0 + 1.15.3 4.8.1 10.0.0 10.0.0 From e5922e61e9457116e2e970ce734934ddde373a5e Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 1 May 2026 12:24:26 +1000 Subject: [PATCH 14/17] Ignoring the lscache files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 875e9fc42..2ab88c06c 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ bun.lock pnpm-lock.yaml yarn.lock solr-data +*.lscache From bc5111a99c0db5cff71b70a3931004fb5b0fd0df Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 1 May 2026 12:24:53 +1000 Subject: [PATCH 15/17] run bun, bump bun --- .../aspire.config.json | 6 +++++- examples/bun/api/bun.lockb | Bin 3125 -> 3205 bytes 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json b/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json index ed6985a62..f39c57ddd 100644 --- a/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json +++ b/examples/bun/CommunityToolkit.Aspire.Hosting.Bun.AppHost.TypeScript/aspire.config.json @@ -3,6 +3,10 @@ "path": "apphost.ts", "language": "typescript/nodejs" }, + "sdk": { + "version": "13.2.2" + }, + "channel": "stable", "profiles": { "https": { "applicationUrl": "https://localhost:29750;http://localhost:28931", @@ -15,4 +19,4 @@ "packages": { "CommunityToolkit.Aspire.Hosting.Bun": "../../../src/CommunityToolkit.Aspire.Hosting.Bun/CommunityToolkit.Aspire.Hosting.Bun.csproj" } -} +} \ No newline at end of file diff --git a/examples/bun/api/bun.lockb b/examples/bun/api/bun.lockb index b576e89518e5bf642d011f5c7b5477579d329fb6..d21c6f9f030c8cec44d7cb53eb824cc001ab308f 100755 GIT binary patch delta 338 zcmdlg(JDDXi;;Pvwld?_iT>)0izk-voW#g6*?>`mmjMVEK?D%+PW-4oxd2U22_(1y zD#!y-$iN2@`~Ve{f(o*N1Pz!VX0k#BA!b4a*`R{V6F+JLZD*PMfyrp|E2c&kp%?5B zsXtJf%Vu&TyYb`=>>`{R91tmo$$}ipiZHh_0R>rrm>Gycb`?NX^#D~la~^>5$|lEh zJXAly2~+?C99$5Z%ceLrw=A_t&$Xf?wJ0w!C%B|2GcSE|5~mu(*^@gs9XKtZs_$;T V$a#g4BiS#_y)3BMZ*m~p3;)0*%QlmPHtf2nC!sF!^+6Oz`#3sA*24}4n`hE#>sOT z?OAz%VtimR2__y!smZ!b_N=UMbt`~kY@7EoJ!28uzz!4zf+J9x%ci&}S#R=Ic4NtZ z{~-V*%?89Dph`F Date: Fri, 1 May 2026 14:03:05 +1000 Subject: [PATCH 16/17] still dealing with CVE packages. Why isn't OTEL verioning consistent --- Directory.Build.props | 1 - Directory.Packages.props | 16 +++++++++------- ...munityToolkit.Aspire.Hosting.KurrentDB.csproj | 1 + ...unityToolkit.Aspire.Hosting.PowerShell.csproj | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index f7335a490..55ec86eb8 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -16,7 +16,6 @@ -preview.1.26170.3 9.0.0 10.0.5 - 1.15.3 4.8.1 10.0.0 10.0.0 diff --git a/Directory.Packages.props b/Directory.Packages.props index 668a4938a..94d0ec33a 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -53,13 +53,13 @@ - - - - - - - + + + + + + + @@ -129,5 +129,7 @@ + + diff --git a/src/CommunityToolkit.Aspire.Hosting.KurrentDB/CommunityToolkit.Aspire.Hosting.KurrentDB.csproj b/src/CommunityToolkit.Aspire.Hosting.KurrentDB/CommunityToolkit.Aspire.Hosting.KurrentDB.csproj index c5544f43d..1c369db03 100644 --- a/src/CommunityToolkit.Aspire.Hosting.KurrentDB/CommunityToolkit.Aspire.Hosting.KurrentDB.csproj +++ b/src/CommunityToolkit.Aspire.Hosting.KurrentDB/CommunityToolkit.Aspire.Hosting.KurrentDB.csproj @@ -8,6 +8,7 @@ + diff --git a/src/CommunityToolkit.Aspire.Hosting.PowerShell/CommunityToolkit.Aspire.Hosting.PowerShell.csproj b/src/CommunityToolkit.Aspire.Hosting.PowerShell/CommunityToolkit.Aspire.Hosting.PowerShell.csproj index 9513fc8e1..a5acd0a43 100644 --- a/src/CommunityToolkit.Aspire.Hosting.PowerShell/CommunityToolkit.Aspire.Hosting.PowerShell.csproj +++ b/src/CommunityToolkit.Aspire.Hosting.PowerShell/CommunityToolkit.Aspire.Hosting.PowerShell.csproj @@ -8,6 +8,7 @@ + From fc9375a4d673e4728116c0c72ebbfc6f8a578d8d Mon Sep 17 00:00:00 2001 From: Aaron Powell Date: Fri, 1 May 2026 14:15:01 +1000 Subject: [PATCH 17/17] Aspire commands get debug flags --- eng/testing/validate-typescript-apphost.ps1 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/eng/testing/validate-typescript-apphost.ps1 b/eng/testing/validate-typescript-apphost.ps1 index 84c0fb7d3..5438e8203 100644 --- a/eng/testing/validate-typescript-apphost.ps1 +++ b/eng/testing/validate-typescript-apphost.ps1 @@ -242,7 +242,8 @@ try { "--apphost", $resolvedAppHostPath, "--isolated", "--format", "Json", - "--non-interactive" + "--non-interactive", + "--debug" ) $appStarted = $true @@ -252,14 +253,16 @@ try { $resource, "--status", $WaitStatus, "--apphost", $resolvedAppHostPath, - "--timeout", $WaitTimeoutSeconds + "--timeout", $WaitTimeoutSeconds, + "--debug" ) } Invoke-ExternalCommand "aspire" @( "describe", "--apphost", $resolvedAppHostPath, - "--format", "Json" + "--format", "Json", + "--debug" ) } finally {