Skip to content
Open
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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agents/skills/whatsnew/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ infer from context — e.g. a fresh release with no page → `draft`).
| What | Path |
|------|------|
| What's-new pages | `src/frontend/src/content/docs/whats-new/aspire-N-N.mdx` (JA under `.../ja/whats-new/`) |
| Version constants | `src/frontend/config/aspire-versions.mjs` (`currentAspireMajorMinorVersion`, `currentAspireVersion`, `currentAspirePreviewVersion`) |
| Version constants | `src/frontend/config/aspire-versions.mjs` (`currentAspireMajorMinorVersion`, `currentAspireVersion`, `currentAspireReleaseDate`, `currentAspirePreviewVersion`) |
| Sidebar | `src/frontend/config/sidebar/docs.topics.ts` (What's-new `items`) |
| Announcement banner | `banner:` frontmatter on `src/frontend/src/content/docs/index.mdx`, `src/frontend/src/content/docs/docs.mdx`, `src/frontend/src/content/docs/community/index.mdx`, and each `src/frontend/src/content/docs/{locale}/index.mdx` (+ `.../ja/docs.mdx`); rendered by `src/frontend/src/components/starlight/Banner.astro` |
| Assets | `src/frontend/src/assets/whats-new/aspire-<version>/` |
Expand Down
3 changes: 2 additions & 1 deletion .agents/skills/whatsnew/references/01-draft-scaffold.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ duplicating.
If the file already exists, reconcile structure without clobbering existing content.
3. **Version constants.** Update `src/frontend/config/aspire-versions.mjs`:
`currentAspireMajorMinorVersion = 'N.N'`, `currentAspireVersion` to the latest
stable `N.N.PATCH`, and `currentAspirePreviewVersion` to the matching full
stable `N.N.PATCH`, `currentAspireReleaseDate` to that patch's NuGet publish
date (`YYYY-MM-DD`, shown in the Install CLI dialog), and `currentAspirePreviewVersion` to the matching full
`N.N.PATCH-preview.*` package version. Set both package versions to the initial
release patch when N.N becomes current, then keep them aligned with the site
AppHost during servicing updates. These drive the Aspire version remark
Expand Down
1 change: 1 addition & 0 deletions .github/agents/release-verifier.agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,7 @@ version constants match the release being verified:
|--------|----------------|
| `currentAspireMajorMinorVersion` | `{VERSION}` (for example, `13.2`) |
| `currentAspireVersion` | Latest stable `{VERSION}.PATCH` package version |
| `currentAspireReleaseDate` | Publish date (`YYYY-MM-DD`) of `currentAspireVersion` on NuGet |
| `currentAspirePreviewVersion` | Matching full `{VERSION}.PATCH-preview.*` package version |

These constants drive the `%ASPIRE_VERSION_MAJOR_MINOR%`, `%ASPIRE_VERSION%`,
Expand Down
12 changes: 6 additions & 6 deletions src/apphost/Aspire.Dev.AppHost/Aspire.Dev.AppHost.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Aspire.AppHost.Sdk/13.5.3">
<Project Sdk="Aspire.AppHost.Sdk/13.6.0">

<PropertyGroup>
<OutputType>Exe</OutputType>
Expand All @@ -10,11 +10,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.Azure.AppService" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.Azure.FrontDoor" Version="13.5.3-preview.1.26425.3" />
<PackageReference Include="Aspire.Hosting.Azure.KeyVault" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.Azure.Redis" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.JavaScript" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.Azure.AppService" Version="13.6.0" />
<PackageReference Include="Aspire.Hosting.Azure.FrontDoor" Version="13.6.0-preview.1.26479.8" />
<PackageReference Include="Aspire.Hosting.Azure.KeyVault" Version="13.6.0" />
<PackageReference Include="Aspire.Hosting.Azure.Redis" Version="13.6.0" />
<PackageReference Include="Aspire.Hosting.JavaScript" Version="13.6.0" />
</ItemGroup>

<ItemGroup>
Expand Down
8 changes: 5 additions & 3 deletions src/frontend/config/aspire-versions.mjs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
export const currentAspireMajorMinorVersion = '13.5';
export const currentAspireVersion = '13.5.3';
export const currentAspirePreviewVersion = '13.5.3-preview.1.26425.3';
export const currentAspireMajorMinorVersion = '13.6';
export const currentAspireVersion = '13.6.0';
// Release date (YYYY-MM-DD) of currentAspireVersion; update together with the version.
export const currentAspireReleaseDate = '2026-09-29';
export const currentAspirePreviewVersion = '13.6.0-preview.1.26479.8';

export const aspireVersionPlaceholders = Object.freeze({
'%ASPIRE_VERSION_MAJOR_MINOR%': currentAspireMajorMinorVersion,
Expand Down
60 changes: 60 additions & 0 deletions src/frontend/src/components/InstallCliModal.astro
Original file line number Diff line number Diff line change
@@ -1,12 +1,25 @@
---
import { Code, Icon, Aside } from '@astrojs/starlight/components';
import CustomSelect, { type CustomSelectOption } from '@components/CustomSelect.astro';
import {
currentAspireMajorMinorVersion,
currentAspireReleaseDate,
currentAspireVersion,
} from '../../config/aspire-versions.mjs';

interface Props {
id?: string;
}

const { id = 'install-cli-modal' } = Astro.props;

// Major releases omit the minor suffix (for example, /whats-new/aspire-13/).
const [major, minor] = currentAspireMajorMinorVersion.split('.');
const releaseNotesHref = `/whats-new/aspire-${major}${minor === '0' ? '' : `-${minor}`}/`;
const releaseDateLabel = new Date(`${currentAspireReleaseDate}T00:00:00Z`).toLocaleDateString(
'en-US',
{ year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC' }
);
const channelOptions: CustomSelectOption[] = [
{
value: 'release',
Expand Down Expand Up @@ -37,6 +50,18 @@ const channelOptions: CustomSelectOption[] = [
</div>

<div class="modal-body">
<div class="release-info" data-quality="release">
<span class="release-version">
Installs Aspire <strong data-testid="install-cli-version">{currentAspireVersion}</strong>{' '}
<span class="release-date">
·{' '}Released <time datetime={currentAspireReleaseDate}>{releaseDateLabel}</time>
</span>
</span>
<a href={releaseNotesHref} class="release-notes-link">
Release notes
<Icon name="right-arrow" />
</a>
</div>
<div class="install-option">
<div class="option-header">
<Icon name="apple" />
Expand Down Expand Up @@ -154,6 +179,9 @@ const channelOptions: CustomSelectOption[] = [
const version = element.getAttribute('data-version') || element.getAttribute('data-quality');
element.style.display = version === quality ? 'block' : 'none';
});
modal.querySelectorAll<HTMLElement>('.release-info').forEach((element) => {
element.hidden = element.getAttribute('data-quality') !== quality;
});
Comment thread
sebastienros marked this conversation as resolved.

// Save to localStorage
try {
Expand Down Expand Up @@ -399,6 +427,38 @@ const channelOptions: CustomSelectOption[] = [
margin-top: 0.5rem;
}

.release-info {
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 0.5rem 1rem;
font-size: var(--sl-text-sm);
color: var(--sl-color-gray-2);
}

.release-info[hidden] {
display: none;
}

.release-version strong {
color: var(--sl-color-text);
font-weight: 600;
}

.release-notes-link {
display: inline-flex;
align-items: center;
gap: 0.25rem;
color: var(--sl-color-text-accent);
text-decoration: none;
font-weight: 500;
}

.release-notes-link:hover {
text-decoration: underline;
}

.modal-footer {
padding: 1rem;
border-top: 1px solid var(--sl-color-gray-5);
Expand Down
6 changes: 6 additions & 0 deletions src/frontend/tests/e2e/ui-regressions.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,14 @@ test('install CLI entry adapts to viewport and remembers the selected channel',

const installModal = page.locator('#install-cli-modal');
const versionSelect = installModal.locator('#version-select');
const releaseInfo = installModal.locator('.release-info');
const channelTrigger = installModal.getByRole('combobox', {
name: 'Select release channel',
});

await expect(installModal).toBeVisible();
await expect(versionSelect).toHaveValue('release');
await expect(releaseInfo).toBeVisible();
await channelTrigger.click();
await expect(channelTrigger).toHaveAttribute('aria-expanded', 'true');
const channelListbox = page.getByRole('listbox', { name: 'Select release channel' });
Expand All @@ -81,6 +84,7 @@ test('install CLI entry adapts to viewport and remembers the selected channel',
await expect(channelTrigger).toHaveAttribute('aria-expanded', 'false');
await expect(installModal.locator('.quality-aside[data-quality="dev"]')).toBeVisible();
await expect(installModal.locator('.code-wrapper[data-version="dev"]').first()).toBeVisible();
await expect(releaseInfo).toBeHidden();
await expect
.poll(() => page.evaluate(() => localStorage.getItem('aspire-install-channel')))
.toBe('dev');
Expand All @@ -89,8 +93,10 @@ test('install CLI entry adapts to viewport and remembers the selected channel',
await expect(installModal).not.toBeVisible();

await openInstallButton.click();
await expect(installModal).toBeVisible();
await expect(versionSelect).toHaveValue('dev');
await expect(channelTrigger).toContainText('Dev');
await expect(releaseInfo).toBeHidden();
});

test('homepage header matches the compact mobile action geometry at reflow widths', async ({
Expand Down
9 changes: 9 additions & 0 deletions src/frontend/tests/unit/custom-components.vitest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,11 @@ import trTranslations from '../../src/content/i18n/tr.json';
import ukTranslations from '../../src/content/i18n/uk.json';
import zhCnTranslations from '../../src/content/i18n/zh-CN.json';
import { normalizeHtml, renderComponent, type StarlightRoute } from './astro-test-utils';
import {
currentAspireMajorMinorVersion,
currentAspireReleaseDate,
currentAspireVersion,
} from '../../config/aspire-versions.mjs';

type BasicRenderCase = {
name: string;
Expand Down Expand Up @@ -630,6 +635,10 @@ const basicRenderCases: BasicRenderCase[] = [
'id="version-select"',
'data-version="staging"',
'More installation options',
'data-quality="release"',
`>${currentAspireVersion}</strong>`,
`datetime="${currentAspireReleaseDate}"`,
`href="/whats-new/aspire-${currentAspireMajorMinorVersion.replace('.', '-').replace(/-0$/, '')}/"`,
],
},
{
Expand Down
4 changes: 2 additions & 2 deletions src/statichost/StaticHost/StaticHost.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@

<ItemGroup>
<PackageReference Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.4.0" />
<PackageReference Include="Aspire.Azure.Security.KeyVault" Version="13.5.3" />
<PackageReference Include="Aspire.Microsoft.Azure.StackExchangeRedis" Version="13.5.3" />
<PackageReference Include="Aspire.Azure.Security.KeyVault" Version="13.6.0" />
<PackageReference Include="Aspire.Microsoft.Azure.StackExchangeRedis" Version="13.6.0" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="10.5.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="10.0.12" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.18.0" />
Expand Down
6 changes: 3 additions & 3 deletions tests/StaticHost.Tests/StaticHost.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<!-- Supply orchestration metadata for the fixture's standalone testing builder. -->
<Sdk Name="Aspire.AppHost.Sdk" Version="13.5.3" />
<Sdk Name="Aspire.AppHost.Sdk" Version="13.6.0" />

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
Expand All @@ -14,8 +14,8 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Aspire.Hosting.Azure.Redis" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.Testing" Version="13.5.3" />
<PackageReference Include="Aspire.Hosting.Azure.Redis" Version="13.6.0" />
<PackageReference Include="Aspire.Hosting.Testing" Version="13.6.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.10.0" />
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="10.0.12" />
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.5.0" />
Expand Down
Loading