Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
21 changes: 17 additions & 4 deletions src/frontend/scripts/update-integrations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ const COMMUNITY_TOOLKIT_QUERIES = ['CommunityToolkit.Aspire'];
// Third-party packages whose IDs don't start with `Aspire.` or `CommunityToolkit.Aspire`.
// They are fetched by exact package ID and must still be verified and non-deprecated.
export const THIRD_PARTY_PACKAGES = ['Particular.Aspire.Hosting.ServicePlatform'];
// Packages whose docs target a prerelease that is newer than the latest stable release, so
// the newest prerelease is selected instead of the older stable version.
const PRERELEASE_PREFERRED_PACKAGES = new Set([
'communitytoolkit.aspire.microsoft.entityframeworkcore.sqlite',
]);
const THIRD_PARTY_QUERIES = THIRD_PARTY_PACKAGES.map((id) => `packageid:${id}`);
const EXCLUDED_PACKAGES = [
'Aspire.Cli',
Expand Down Expand Up @@ -536,7 +541,11 @@ async function getPreferredNonDeprecatedVersion(
): Promise<RegistrationLeaf | null> {
try {
const leaves = await getAllRegistrationLeaves(registrationBase, id, Boolean(pinnedVersion));
const version = selectPreferredPackageVersion(leaves, pinnedVersion);
const version = selectPreferredPackageVersion(
leaves,
pinnedVersion,
PRERELEASE_PREFERRED_PACKAGES.has(id.toLowerCase())
);
return leaves.find((leaf) => leaf.version === version) ?? null;
} catch (error: unknown) {
if (pinnedVersion) {
Expand All @@ -551,7 +560,8 @@ async function getPreferredNonDeprecatedVersion(

export function selectPreferredPackageVersion(
leaves: RegistrationLeaf[],
pinnedVersion?: string
pinnedVersion?: string,
preferLatestPrerelease = false
): string | null {
if (pinnedVersion) {
const match = leaves.find((leaf) => leaf.version.toLowerCase() === pinnedVersion.toLowerCase());
Expand All @@ -569,7 +579,8 @@ export function selectPreferredPackageVersion(
return null;
}

const pickFrom = nonDeprecatedStable.length > 0 ? nonDeprecatedStable : nonDeprecated;
const pickFrom =
nonDeprecatedStable.length > 0 && !preferLatestPrerelease ? nonDeprecatedStable : nonDeprecated;
pickFrom.sort((a, b) => cmpSemVer(a.version, b.version));
return pickFrom.at(-1)?.version ?? null;
}
Expand Down Expand Up @@ -784,7 +795,9 @@ async function applyNuGetPageDownloads(output: IntegrationOutput[]): Promise<Int
}

try {
const res = await fetch(`https://www.nuget.org/packages/${encodeURIComponent(entry.title)}`);
const res = await fetch(
`https://www.nuget.org/packages/${encodeURIComponent(entry.title)}`
);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
Expand Down
21 changes: 20 additions & 1 deletion src/frontend/src/data/api-generation-failures.json
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
[]
[
{
"name": "CommunityToolkit.Aspire.Hosting.Chroma",
"version": "17.0.0-beta.994",
"stage": "C#",
"reason": "error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-ef327acafa6f4bfca8db0e2498f686c0/Restore.csproj : error NU1102: - Found 66 version(s) in source..."
},
{
"name": "CommunityToolkit.Aspire.Hosting.Keycloak.Extensions",
"version": "17.0.0-beta.994",
"stage": "C#",
"reason": "error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-8460f063038d4996adf0b7293102931c/Restore.csproj : error NU1102: - Found 66 version(s) in source..."
},
{
"name": "CommunityToolkit.Aspire.Hosting.Kind",
"version": "17.0.0-beta.994",
"stage": "C#",
"reason": "error NU1102: Unable to find package Aspire.Hosting with version (>= 17.0.0-preview.1.26552.6) /home/runner/work/aspire.dev/aspire.dev/src/tools/PackageJsonGenerator/.package-json-generator-work/restore-6d1c8ae042a141838b4d23e737ffbca6/Restore.csproj : error NU1102: - Found 66 version(s) in source..."
}
]
28 changes: 28 additions & 0 deletions src/frontend/src/data/aspire-blog-posts.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,32 @@
[
{
"title": "Adding persistence to the Aspire dashboard",
"description": "Aspire 13.6 adds dashboard persistence and run history. Revisit telemetry after a restart, retain more data, and explore the SQLite and Dapper implementation behind it.",
"href": "https://devblogs.microsoft.com/aspire/aspire-dashboard-persistence/",
"date": "2026-10-08",
"image": "https://devblogs.microsoft.com/aspire/wp-content/uploads/sites/90/2026/10/aspire-dashboard-persistence-data-flow.webp"
},
{
"title": "Bringing Native AOT to the Aspire dashboard",
"description": "Aspire 13.6 brings Native AOT to the dashboard. Explore the startup and deployment benefits, plus the Blazor, Fluent UI, JSON, and Dapper changes that made it possible.",
"href": "https://devblogs.microsoft.com/aspire/aspire-dashboard-native-aot/",
"date": "2026-10-06",
"image": "https://devblogs.microsoft.com/aspire/wp-content/uploads/sites/90/2026/10/aspire-dashboard-native-aot-featured.webp"
},
{
"title": "Bringing rich terminal experiences to Aspire",
"description": "Aspire 13.5 introduced WithTerminal() for interactive terminal sessions on app resources. Aspire 13.6 builds on it with richer terminal emulation and docked terminals for REPLs. See how to enable, attach to, and automate terminal experiences in your app.",
"href": "https://devblogs.microsoft.com/aspire/aspire-terminal-support/",
"date": "2026-10-01",
"image": "https://devblogs.microsoft.com/aspire/wp-content/uploads/sites/90/2026/10/noderepl-scaled.webp"
},
{
"title": "Aspire 13.6: Your dashboard gets memory",
"description": "Aspire 13.6 keeps dashboard telemetry across runs, opens container exec shells right in the dashboard, adds first-party Java and Rust hosting, introduces portable volume paths, and previews Azure Container Apps Sandboxes.",
"href": "https://devblogs.microsoft.com/aspire/whats-new-aspire-13-6/",
"date": "2026-09-29",
"image": "https://devblogs.microsoft.com/aspire/wp-content/uploads/sites/90/2026/09/13.6-featured-image.webp"
},
{
"title": "Aspire 13.5: Fresh pixels and better workflows",
"description": "Aspire 13.5 refreshes the dashboard and aspire.dev, expands the Interaction Service, adds cross-scope Azure references and Kubernetes persistent volumes, and brings live terminals into the AppHost.",
Expand Down
Loading
Loading