Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
92ad1df
Add live-status header icon, SSE backend, redesigned videos page
IEvangelist Apr 28, 2026
aefcb76
Add tests for live-status feature
IEvangelist Apr 28, 2026
71dca13
Unwrap draft PR body
IEvangelist Apr 28, 2026
baa6755
Remove draft PR body file
IEvangelist Apr 28, 2026
26e5f06
Remove worktree cleanup scripts
IEvangelist Apr 28, 2026
76a7ca8
Add local live-status dev controls
IEvangelist Apr 28, 2026
42ec296
Secure live dev commands and native PiP
IEvangelist Apr 28, 2026
3393635
Keep live PiP open across navigation
IEvangelist Apr 28, 2026
b1a45de
Build frontend directly into StaticHost
IEvangelist Apr 28, 2026
debb74b
Keep live PiP alive across site navigation
IEvangelist Apr 28, 2026
ecff707
Let users choose live PiP source
IEvangelist Apr 28, 2026
8cd2ce2
Polish live stream chooser
IEvangelist Apr 28, 2026
2060a2d
Fix live UX navigation regressions
IEvangelist Apr 28, 2026
1f8191d
Add live stream action dialog
IEvangelist Apr 29, 2026
07107cc
Fix live dialog mobile layout
IEvangelist Apr 29, 2026
9983182
Polish live dialog responsive behavior
IEvangelist Apr 29, 2026
2df10f9
Move mobile live dialog below header
IEvangelist Apr 29, 2026
bf50513
Polish live actions and notification sessions
IEvangelist Apr 30, 2026
d65fa4f
Fix compact header regression expectation
IEvangelist May 1, 2026
be60b2b
Add StaticHost live unit coverage
IEvangelist May 4, 2026
78df51a
Address live status PR feedback
IEvangelist May 11, 2026
0cecc2f
* PR feedback
eerhardt May 11, 2026
40902fa
Fix API reference search controllers under view transitions
IEvangelist May 11, 2026
921eae4
Address PR review feedback for live-status
IEvangelist Aug 18, 2026
b7f30c1
Fix botched merge in Header.astro cookie consent
IEvangelist Aug 18, 2026
4d9afb0
Add seoTitle to videos page to satisfy SEO length guard
IEvangelist Aug 18, 2026
a9595fb
Remove obsolete cookie-preferences SPA-nav e2e test
IEvangelist Aug 18, 2026
ae2856c
Harden live status production readiness
IEvangelist Aug 27, 2026
91e7803
Ignore generated Aspire publish output
IEvangelist Aug 27, 2026
efd7d10
Prefer provider handoff for mobile live streams
IEvangelist Aug 27, 2026
85a83ea
Update live command tests for Aspire 13.5
IEvangelist Sep 1, 2026
97b9f33
Use read-only site secrets and reduce live-status overhead
IEvangelist Sep 8, 2026
7b25598
Use parameters for live configuration
IEvangelist Sep 10, 2026
1197bf8
Update ASP.NET Core OpenAPI package
IEvangelist Sep 10, 2026
f0d742e
Isolate live status scaling
IEvangelist Sep 10, 2026
777ebba
Use Redis for distributed live status
IEvangelist Sep 10, 2026
a652390
Rename live cache variable
IEvangelist Sep 10, 2026
80b2792
Load live secrets from Key Vault configuration
IEvangelist Sep 11, 2026
13d33f2
Merge upstream main into live status
IEvangelist Sep 11, 2026
3f13a98
Address live status review feedback
IEvangelist Sep 11, 2026
0e3a7f5
Remove Redis key versions
IEvangelist Sep 11, 2026
cc7b010
Address live status review feedback and coverage gaps
IEvangelist Sep 14, 2026
5e62ea2
Use Aspire to manage Redis integration test infrastructure
IEvangelist Sep 14, 2026
daf25ab
Fix live embeds on staging and show YouTube uploads offline
IEvangelist Sep 15, 2026
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
70 changes: 68 additions & 2 deletions .github/workflows/apphost-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
env:
DOTNET_NOLOGO: 1
DOTNET_CLI_TELEMETRY_OPTOUT: 1
TEST_RESULTS_DIR: ${{ github.workspace }}/testresults
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

Expand All @@ -21,10 +22,16 @@ jobs:
global-json-file: global.json

- name: Restore
run: cd src/apphost/Aspire.Dev.AppHost && dotnet restore
run: |
dotnet restore tests/Aspire.Dev.AppHost.Tests/Aspire.Dev.AppHost.Tests.csproj
dotnet restore tests/StaticHost.Tests/StaticHost.Tests.csproj

- name: Build
run: cd src/apphost/Aspire.Dev.AppHost && dotnet build --no-restore --configuration Release
id: build
run: |
mkdir -p "$TEST_RESULTS_DIR"
dotnet build tests/Aspire.Dev.AppHost.Tests/Aspire.Dev.AppHost.Tests.csproj --no-restore --configuration Release -bl:"$TEST_RESULTS_DIR/Aspire.Dev.AppHost.Tests.build.binlog"
dotnet build tests/StaticHost.Tests/StaticHost.Tests.csproj --no-restore --configuration Release -bl:"$TEST_RESULTS_DIR/StaticHost.Tests.build.binlog"

- name: Verify output
run: |
Expand All @@ -36,6 +43,65 @@ jobs:
fi
echo "Found $APPHOST_DLL"

- name: Run AppHost tests
if: ${{ !cancelled() && steps.build.outcome == 'success' }}
run: >
dotnet test tests/Aspire.Dev.AppHost.Tests/Aspire.Dev.AppHost.Tests.csproj
--configuration Release
--no-restore
--no-build
--verbosity normal
--results-directory "$TEST_RESULTS_DIR"
--logger "trx;LogFileName=Aspire.Dev.AppHost.Tests.trx"
-bl:"$TEST_RESULTS_DIR/Aspire.Dev.AppHost.Tests.binlog"

- name: Run StaticHost unit and HTTP tests
if: ${{ !cancelled() && steps.build.outcome == 'success' }}
run: >
dotnet test tests/StaticHost.Tests/StaticHost.Tests.csproj
--configuration Release
--no-restore
--no-build
--verbosity normal
--filter "Category!=RedisIntegration"
--results-directory "$TEST_RESULTS_DIR"
--logger "trx;LogFileName=StaticHost.Tests.trx"
-bl:"$TEST_RESULTS_DIR/StaticHost.Tests.binlog"

- name: Run StaticHost Redis integration tests
if: ${{ !cancelled() && steps.build.outcome == 'success' }}
run: >
dotnet test tests/StaticHost.Tests/StaticHost.Tests.csproj
--configuration Release
--no-restore
--no-build
--verbosity normal
--filter "Category=RedisIntegration"
--results-directory "$TEST_RESULTS_DIR"
--logger "trx;LogFileName=StaticHost.RedisIntegration.Tests.trx"
-bl:"$TEST_RESULTS_DIR/StaticHost.RedisIntegration.Tests.binlog"

- name: Upload test results
id: upload-test-results
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: logs-AppHost-ubuntu-latest
path: |
testresults/**/*.trx
testresults/**/*.binlog
retention-days: 7

- name: Generate test results summary
if: always()
shell: pwsh
run: |
& "${{ github.workspace }}/tests/scripts/Write-TestSummary.ps1" `
-TestResultsFolder $env:TEST_RESULTS_DIR `
-SummaryOutputPath $env:GITHUB_STEP_SUMMARY `
-ArtifactUrl "${{ steps.upload-test-results.outputs.artifact-url }}" `
-SummaryTitle "AppHost and StaticHost Tests"

- name: Upload artifact
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ jobs:
frontend=true
fi

if git diff --quiet "$base_sha" "$head_sha" -- src/apphost src/statichost global.json NuGet.config; then
if git diff --quiet "$base_sha" "$head_sha" -- src/apphost src/statichost tests/Aspire.Dev.AppHost.Tests tests/StaticHost.Tests Aspire.Dev.slnx global.json NuGet.config; then
apphost=false
else
apphost=true
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,7 @@ FodyWeavers.xsd

bin/
obj/
aspire-output/
tmp-ts-validation/
.playwright-mcp/

Expand Down
1 change: 1 addition & 0 deletions Aspire.Dev.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<Project Path="src/statichost/StaticHost/StaticHost.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/Aspire.Dev.AppHost.Tests/Aspire.Dev.AppHost.Tests.csproj" />
<Project Path="tests/AtsJsonGenerator.Tests/AtsJsonGenerator.Tests.csproj" />
<Project Path="tests/PackageJsonGenerator.Tests/PackageJsonGenerator.Tests.csproj" />
<Project Path="tests/StaticHost.Tests/StaticHost.Tests.csproj" />
Expand Down
21 changes: 18 additions & 3 deletions src/apphost/Aspire.Dev.AppHost/AppHost.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,33 @@
// For deployment: We want to pick AppService as the environment to publish to.
builder.AddAzureAppServiceEnvironment("production");

var cache = builder.AddAzureManagedRedis("cache")
.RunAsContainer();

var staticHostWebsite = builder.AddProject<Projects.StaticHost>("aspiredev")
.WithReference(cache)
.WithExternalHttpEndpoints();

builder.AddAzureFrontDoor(staticHostWebsite);

if (builder.ExecutionContext.IsRunMode)
{
// For local development: Use ViteApp for hot reload and development experience
staticHostWebsite.WithLocalLiveStatusDevCommands();

// For local development: Use ViteApp for hot reload and development experience.
// The live-status client calls same-origin /api/live[/stream]; inject StaticHost's
// origin so the Vite dev server can proxy those to the API (see astro.config.mjs).
// Without this, /api/live 404s against the Vite origin under `aspire run`.
builder.AddViteApp("frontend", "../../frontend")
.WithPnpm()
.WithEnvironment("ASPIRE_STATICHOST_URL", staticHostWebsite.GetEndpoint("https"))
.WithUrlForEndpoint("http", static url => url.DisplayText = "aspire.dev (Local)")
.WithExternalHttpEndpoints();
}
else
{
var secrets = builder.AddAzureKeyVault("secrets");
staticHostWebsite.WithProductionLiveStatus(builder, secrets);
}

builder.AddAzureFrontDoor(staticHostWebsite);

builder.Build().Run();
6 changes: 6 additions & 0 deletions src/apphost/Aspire.Dev.AppHost/Aspire.Dev.AppHost.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,17 @@
<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" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\statichost\StaticHost\StaticHost.csproj" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Aspire.Dev.AppHost.Tests" />
</ItemGroup>

</Project>
Loading
Loading