Skip to content

Correct Community Toolkit add-on and migration docs#1378

Open
IEvangelist wants to merge 5 commits into
mainfrom
dapine/community-docs-addons-migrations
Open

Correct Community Toolkit add-on and migration docs#1378
IEvangelist wants to merge 5 commits into
mainfrom
dapine/community-docs-addons-migrations

Conversation

@IEvangelist

Copy link
Copy Markdown
Member

Important

This PR is ready for review, but it should be rebased and merged after #1377 because it performs the series' final package-mapping and sidebar reconciliation.

Summary

  • Correct the Community Toolkit add-on guidance for Redis, MongoDB, MySQL, PostgreSQL, SQL Server, Keycloak, JavaScript monorepos, and MassTransit RabbitMQ against the actual decorator and configuration APIs.
  • Correct Bun, Go, and Python graduation guidance, including removal of the deprecated Python extensions package and the source-backed TypeScript exception for virtual-environment opt-out.
  • Model the complete Flyway ordering chain, explain the generated TypeScript helper's ordering limitation, and add runnable synchronized C#/TypeScript examples for exported Bun and Keycloak operations.
  • Reconcile package destinations and sidebar labels, and preserve complete hero artwork.

Validation

  • Verified APIs and behavior against CommunityToolkit/Aspire commit b9d40479805b74ea20b7dc57cb659d46e6f11c43.
  • External Toolkit AppHost, generated TypeScript bindings, MassTransit client, and official Bun/Go/Python scratch samples compiled or type-checked successfully.
  • Focused page metadata, SEO, twoslash, structured-data, integration-update, and locale/sidebar suites pass; mapping assertions and affected browser routes pass.
  • Combined landing rehearsal passes 8 focused suites/153 tests, 132 unique mappings, 248 logo renders, and 199 synchronized AppHost tab groups with zero browser failures or console errors.

No local pnpm build was run.

Document active Community Toolkit decorators for official resources and align Bun, Go, and Python guidance with graduated hosting packages.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Use contain fitting for plain Astro integration logos so their full artwork remains visible across themes and viewport sizes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Clarify the deprecated Python package name and document the explicit Flyway startup and completion dependencies, including the TypeScript binding limitation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: b620d5b1-e665-4478-974d-cb5d2b825c28
Copilot AI review requested due to automatic review settings July 17, 2026 19:01

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

This PR updates multiple Aspire integration docs to reflect the current Community Toolkit and official hosting/client API surfaces, and reconciles package→doc mappings + sidebar labels to match the new/updated pages.

Changes:

  • Updates integration package mappings (integration-docs.json) to point Community Toolkit “Extensions” packages at their extensions/connect pages.
  • Refreshes several integration pages (Keycloak, RabbitMQ, Python, Bun, Go, Redis/MongoDB/MySQL/PostgreSQL/SQL Server extensions, JS monorepos) with corrected API usage and expanded examples.
  • Renames “Node.js extensions” to “JavaScript monorepo extensions” across docs and sidebar navigation.

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/frontend/src/data/integration-docs.json Updates Community Toolkit package→doc href mappings (extensions/connect pages).
src/frontend/src/content/docs/integrations/security/keycloak.mdx Updates TS addKeycloak usage; adds Toolkit WithPostgres/withPostgres section and connection-string TS example.
src/frontend/src/content/docs/integrations/messaging/rabbitmq/rabbitmq-connect.mdx Clarifies config/env-var behavior; adds MassTransit Toolkit client guidance; formatting/SEO tweaks.
src/frontend/src/content/docs/integrations/frameworks/python.mdx Updates migration guidance + parameter naming; replaces Toolkit messaging; adds clearer TS samples.
src/frontend/src/content/docs/integrations/frameworks/nodejs-extensions.mdx Reframes page to Nx/Turborepo monorepos; adds C#/TS examples and install guidance.
src/frontend/src/content/docs/integrations/frameworks/javascript.mdx Updates “See also” link label for the renamed monorepo extensions page.
src/frontend/src/content/docs/integrations/frameworks/go/go-host.mdx Adds Toolkit→official migration guidance and normalizes frontmatter quoting.
src/frontend/src/content/docs/integrations/frameworks/bun-apps.mdx Adds Toolkit deprecation + migration examples; adds TS samples and tabs.
src/frontend/src/content/docs/integrations/databases/sql-server/sql-server-extensions.mdx Improves descriptions and examples; adds dbx section; normalizes TS samples.
src/frontend/src/content/docs/integrations/databases/postgres/postgresql-extensions.mdx Improves descriptions and examples; adds dbx + Flyway section and TS notes.
src/frontend/src/content/docs/integrations/databases/mysql/mysql-extensions.mdx Improves descriptions and examples; adds dbx section; normalizes TS samples.
src/frontend/src/content/docs/integrations/databases/mongodb/mongodb-extensions.mdx Improves descriptions and examples; adds dbx section; normalizes TS samples.
src/frontend/src/content/docs/integrations/caching/redis-extensions.mdx Normalizes examples; adds dbx section; clarifies build/run snippet.
src/frontend/src/content/docs/deployment/javascript-apps.mdx Updates “See also” link label for renamed monorepo extensions page.
src/frontend/config/sidebar/integrations.topics.ts Updates sidebar label for the renamed monorepo extensions page.

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

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Frontend HTML artifact ready

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

VS Code: Open PR #1378 artifacts

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

@IEvangelist IEvangelist left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

🤖 Automated doc-PR review (doc-pr-reviewer skill)

Posted as COMMENT, not REQUEST_CHANGES. Per the review rubric this run's verdict is REQUEST_CHANGES (Phase A found one contradicted claim), but GitHub does not allow the PR author to formally request changes on their own PR, so this is submitted as a comment. Please treat the inline Contradicted finding below as a change request.

Summary

Phase A source of truth microsoft/aspire @ main 4f7be800af4aaf9541d2c4d52d675ab5369aa2be (verified == live main HEAD at review time) · CommunityToolkit/Aspire @ b9d40479805b74ea20b7dc57cb659d46e6f11c43 (the commit cited in the PR body)
Claims evaluated ~14 claim groups (30+ individual API assertions): 1 contradicted, 1 verified-with-nuance, 12 verified
Phase B (doc-tester, blind to source) 13 changed routes exercised, all HTTP 200 · 0 critical issues · 5 minor warnings · 0 console errors

Phase A (reads source) and Phase B (doc-tester, forbidden from reading source) were run independently and merged here.


Phase A — Claim verification

⛔ Contradicted (1)

integrations/frameworks/python.mdx → "Disable virtual environment" — see the inline comment on the <Aside>. In short: WithoutVirtualEnvironment does not exist in microsoft/aspire at main 4f7be80 (only WithVirtualEnvironment does). The Aside's claim that the opt-out is "available only to C# AppHosts" is false — the C# method is absent too, and the pre-existing .WithoutVirtualEnvironment() C# sample would not compile. The C# block is plain ```csharp (not twoslash), so the docs build won't catch it.

✅ Verified & verified-with-nuance claims (evidence — click to expand)

Community Toolkit (CommunityToolkit/Aspire @ b9d4047)

  • dbx (WithDbx/withDbx, Redis/MongoDB/MySQL/PostgreSQL/SQL Server): two overloads — public [AspireExportIgnore] (Action<IResourceBuilder<DbxContainerResource>>? configureContainer = null, string? containerName = null) and internal [AspireExport] (string? containerName = null, string? imageTag = null) generating the TS binding. Matches "C# takes a container-config callback + containerName; TS binding takes containerName + imageTag." (Note: WithDbx is absent from the committed api/*.cs public surfaces because the exported overload is internal; source is authoritative — possible product-side API-tracking gap, docs are accurate.)
  • WithDbGate/WithAdminer target types (corrected by PR): Redis→RedisResource, MongoDB→MongoDBServerResource, MySQL→MySqlServerResource, PostgreSQL→PostgresServerResource, SQL Server→SqlServerServerResource (double "Server" is correct). ✔
  • Flyway (PostgreSQL.Extensions + Flyway): AddFlyway(name, migrationScriptsPath); WithFlywayMigration/WithFlywayRepair extend PostgresDatabaseResource (not the server); TS polyglot overloads create the Flyway resource internally, return the DB builder, add no waitFor; WithFlywayCommand adds -url/-user/-password + migrate/repair. ✔
  • JS monorepo extensions (Hosting.JavaScript.Extensions): AddNxApp/AddTurborepoApp(name, workingDirectory); AddApp Nx(name, appName)/Turborepo(name, filter) with internal [AspireExport] overloads; WithNpm/WithYarn/WithPnpm/WithBun on workspace resources; WithPackageManagerLaunch (MethodName="withPackageManagerLaunch"); WithMappedEndpointPort<T:JavaScriptAppResource>. ✔
  • Keycloak WithPostgres (Keycloak.Extensions): WithPostgres(KeycloakResource, PostgresDatabaseResource database, ParameterResource? username = null, password = null, bool xaEnabled = false) [AspireExport]; sets KC_DB=postgres, JDBC KC_DB_URL, defaults creds to database.Resource.Parent.UserName/PasswordParameter, calls .WaitFor(database). ✔
  • MassTransit (MassTransit.RabbitMQ): AddMassTransitRabbitMq(name, configureOptions?, massTransitConfiguration?) + generic <TBus:IBus>; reads ConnectionStrings:{name}, throws InvalidOperationException if missing/empty; does not read MESSAGING_URI or bind Aspire:RabbitMQ; DisableTelemetry gates OTel. ✔

Core Aspire (microsoft/aspire @ 4f7be80)

  • Bun: AddBunApp(name, appDirectory, scriptPath) [AspireExport]addBunApp(name, appDirectory, scriptPath). ✔
  • Go: AddGoApp(name, appDirectory, packagePath = ".", string[]? buildTags, string? ldFlags, string? gcFlags, bool raceDetector = false) [AspireExport]. ✔
  • Python: AddPythonApp(name, appDirectory, scriptPath) (param renamed projectDirectoryappDirectory); AddPythonExecutable(name, appDirectory, executableName); AddPythonModule(name, appDirectory, moduleName); AddUvicornApp(name, appDirectory, app) (renamed appNameapp); WithVirtualEnvironment<T>(path, createIfNotExists = true)withVirtualEnvironment; older AddPythonApp(…scriptArgs) overloads are [Obsolete] (supports "use WithArgs"). ✔
  • Keycloak: AddKeycloak(name, int? port = null, IResourceBuilder<ParameterResource>? adminUsername = null, adminPassword = null) [AspireExport] → TS options object addKeycloak("keycloak", { port, adminUsername, adminPassword }) (PR corrected from positional args). ✔
  • RabbitMQ connection variables: RabbitMQServerResource [AspireExport(ExposeProperties = true)] : IResourceWithConnectionString; GetConnectionProperties() yields Host, Port, Username, Password, Uri → MESSAGING_HOST/PORT/USERNAME/PASSWORD/URI (README: [RESOURCE]_[PROPERTY]); ConnectionStringExpression => UriExpressionConnectionStrings:messaging / ConnectionStrings__messaging. AddConnectionString yields only the ConnectionStrings value. All PR-added claims verified. ✔
  • Node package managers: AddNodeApp/AddViteApp/AddNextJsApp/AddBunApp + generic WithNpm/WithYarn/WithPnpm/WithBun<TResource> all in Aspire.Hosting.JavaScript. ✔

⚠️ Verified-with-nuance (1, optional / out of strict scope): the RabbitMQ connection-variables page lists MESSAGING_VIRTUALHOST = virtual host path (if set) on an unchanged context line. On current main, GetConnectionProperties() yields only Host/Port/Username/Password/Uri — no VirtualHost — so MESSAGING_VIRTUALHOST is not actually emitted at 4f7be80. Not introduced by this PR (the only added line is ConnectionStrings__messaging), so it's out of strict scope, but worth a gentle fix since this PR is a correctness pass on that file.


Phase B — Doc-tester results (blind to source)

Verbatim report from the doc-tester run against the locally served PR head (http://localhost:4325/, HEAD 8333a162).

Routes exercised (all HTTP 200): /integrations/frameworks/nodejs-extensions/, /integrations/frameworks/javascript/, /deployment/javascript-apps/, /integrations/caching/redis-extensions/, /integrations/databases/mongodb/mongodb-extensions/, /integrations/databases/mysql/mysql-extensions/, /integrations/databases/postgres/postgresql-extensions/, /integrations/databases/sql-server/sql-server-extensions/, /integrations/frameworks/bun-apps/, /integrations/frameworks/go/go-host/, /integrations/frameworks/python/, /integrations/messaging/rabbitmq/rabbitmq-connect/, /integrations/security/keycloak/.

Critical issues

None found. No route rendered 404; no MDX render failures; browser console reported 0 errors / 0 warnings; changed "See also" links resolved; the "JavaScript monorepo extensions" sidebar label points to /integrations/frameworks/nodejs-extensions/.

Warnings

  1. Python scriptPath wording may confuse users (/integrations/frameworks/python/): the page correctly uses appDirectory but later says "scriptPath — the Python script to run, relative to the project directory." A new user may wonder whether it's relative to the AppHost project or the Python appDirectory. Recommendation: say "relative to appDirectory".
  2. dbx sections need a short concept intro (Redis/MongoDB/MySQL/PostgreSQL/SQL Server): the docs don't explain what dbx is or how it differs from DbGate/Adminer, and they say TypeScript accepts containerName and imageTag but samples only show containerName. Recommendation: add one sentence defining dbx and a small options example/table.
  3. Flyway section assumes migration-script knowledge (/integrations/databases/postgres/postgresql-extensions/): ordering is explained well, but a new user isn't shown what must exist in ./migrations. Recommendation: add a minimal filename like V1__init.sql or link Flyway naming conventions.
  4. JavaScript monorepo page assumes Nx/Turborepo familiarity (/integrations/frameworks/nodejs-extensions/): terms like workspace path, child app, and Turborepo filter are lightly introduced. Recommendation: add a prerequisites note (user already has an Nx/Turborepo workspace; pass the workspace directory + app/package name).
  5. RabbitMQ link convention (/integrations/messaging/rabbitmq/rabbitmq-connect/): three links resolve but use relative paths (../rabbitmq-host/, …#add-rabbitmq-server-resource, …#pass-custom-environment-variables). If this PR requires site-relative links, prefer /integrations/messaging/rabbitmq/rabbitmq-host/.

Passed checks

Retitled page renders as "JavaScript monorepo hosting extensions" at the existing route; sidebar relabeled to "JavaScript monorepo extensions" and links correctly; JavaScript/deployment "See also" links relabeled and resolve; C#/TypeScript tabs render; deprecated-Toolkit asides render on Bun/Python; InstallPackage tabs render; Keycloak TS sample uses the options object addKeycloak('keycloak', { port: 8080 }); RabbitMQ MassTransit section renders and explains ConnectionStrings:messaging; all checked content links resolved; images/logos loaded.

Knowledge gaps (blind-user perspective)

A new user would still need external/prior knowledge for: Nx/Turborepo workspace structure; dbx purpose and image options; Flyway migration file naming; MassTransit consumer setup beyond the minimal sample; Keycloak production connection-string configuration.


Phase A read source at the SHAs above; Phase B was blind to source and tested the rendered site. Build/lint/spelling/style and unchanged-file content are out of scope (CI owns those).

Comment thread src/frontend/src/content/docs/integrations/frameworks/python.mdx Outdated
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 81ca82bd-f22c-4aa0-9a24-11989fd63704
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants