[Failing test]: Aspire.Cli.EndToEnd.Tests.PersistentContainerEndToEndTests.PersistentContainersPreserveDataAcrossAppHostRuns
- Dominant language
- C#
- Stars
- 6.3k
- Forks
- 991
- Avg merge
- 2d 15h
- Merged PRs (30d)
- 196
Description
### Build information
Build: https://github.com/microsoft/aspire/actions/runs/27053190200
Build error leg or test failing: Aspire.Cli.EndToEnd.Tests.PersistentContainerEndToEndTests.PersistentContainersPreserveDataAcrossAppHostRuns
Logs: [Tests / Cli.EndToEnd-PersistentContainerEndToEndTests / Cli.EndToEnd-PersistentContainerEndToEndTests \(ubuntu-latest\)](https://github.com/microsoft/aspire/actions/runs/27053190200/job/79853542753)
Artifact: [All-TestResults](https://github.com/microsoft/aspire/actions/runs/27053190200/artifacts/7451564607)
### Fill in the error message template
## Error Message
Fill the error message using [step by step known issues guidance](https://github.com/dotnet/arcade/blob/main/Documentation/Projects/Build%20Analysis/KnownIssueJsonStepByStep.md).
```json
{
"ErrorMessage": "Hex1b.Automation.Hex1bAutomationException : Step 104 of 104 failed \u2014 WaitUntil(\u0022aspire start to complete [27 OK/ERR]\u0022)",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}
```
### Error details
Error details (222 lines)
```yml
Error Message: Hex1b.Automation.Hex1bAutomationException : Step 104 of 104 failed — WaitUntil("aspire start to complete [27 OK/ERR]")
Timed out after 00:05:00 waiting for: aspire start to complete [27 OK/ERR]
at CliE2EAutomatorHelpers.cs:742
Completed steps (103 of 104):
[1] WaitUntilText("# ") — 1041ms ✓ (CliE2EAutomatorHelpers.cs:37)
[2] Wait(500ms) — 504ms ✓ (CliE2EAutomatorHelpers.cs:39)
[3] Type("CMDCOUNT=0; PROMPT_COMMAND=...") — 15ms ✓ (CliE2EAutomatorHelpers.cs:43)
[4] Key(Enter) — 2ms ✓ (CliE2EAutomatorHelpers.cs:44)
[5] WaitUntil("success prompt [1 OK] $ (fail-fast on error)") — 32ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[6] Type("umask 000") — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[7] Key(Enter) — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[8] WaitUntil("success prompt [2 OK] $ (fail-fast on error)") — 254ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[9] Type("export ASPIRE_PLAYGROUND=tr...") — 4ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[10] Key(Enter) — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[11] WaitUntil("success prompt [3 OK] $ (fail-fast on error)") — 2ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[12] Type("cd '/workspace/52103d94-afa...") — 4ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[13] Key(Enter) — 2ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[14] WaitUntil("success prompt [4 OK] $ (fail-fast on error)") — 253ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[15] Type("export ASPIRE_E2E_WORKSPACE...") — 1ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[16] Key(Enter) — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[17] WaitUntil("success prompt [5 OK] $ (fail-fast on error)") — 253ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[18] Type("trap 'if [ -n "$ASPIRE_E2E_...") — 5ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[19] Key(Enter) — 1ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[20] WaitUntil("success prompt [6 OK] $ (fail-fast on error)") — 257ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[21] Type("/opt/aspire-scripts/get-asp...") — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[22] Key(Enter) — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[23] WaitUntil("success prompt [7 OK] $ (fail-fast on error)") — 1512ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[24] Type("export PATH=~/.aspire/bin:~...") — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:271)
[25] Key(Enter) — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:272)
[26] WaitUntil("success prompt [8 OK] $ (fail-fast on error)") — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[27] Type("VER=$(aspire --version 2>/d...") — 5ms ✓ (CliE2EAutomatorHelpers.cs:469)
[28] Key(Enter) — 1ms ✓ (CliE2EAutomatorHelpers.cs:475)
[29] WaitUntil("CLI version verification") — 256ms ✓ (CliE2EAutomatorHelpers.cs:478)
[30] WaitUntil("any prompt [9 OK/ERR] $") — 2ms ✓ (Hex1bAutomatorTestHelpers.cs:27)
[31] Type("aspire new") — 0ms ✓ (KubernetesDeployTestHelpers.cs:159)
[32] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:160)
[33] WaitUntil("template selection list (> Starter App)") — 2266ms ✓ (KubernetesDeployTestHelpers.cs:161)
[34] Key(Enter) — 2ms ✓ (KubernetesDeployTestHelpers.cs:165)
[35] WaitUntil("project name prompt") — 253ms ✓ (KubernetesDeployTestHelpers.cs:167)
[36] Type("PersistenceE2E") — 1ms ✓ (KubernetesDeployTestHelpers.cs:171)
[37] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:172)
[38] WaitUntil("output path prompt") — 253ms ✓ (KubernetesDeployTestHelpers.cs:174)
[39] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:178)
[40] WaitUntil("URLs prompt") — 253ms ✓ (KubernetesDeployTestHelpers.cs:180)
[41] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:184)
[42] WaitUntil("Redis cache prompt") — 252ms ✓ (KubernetesDeployTestHelpers.cs:186)
[43] Type("n") — 0ms ✓ (KubernetesDeployTestHelpers.cs:190)
[44] WaitUntil("test project prompt") — 253ms ✓ (KubernetesDeployTestHelpers.cs:192)
[45] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:196)
[46] WaitUntil("template version message and aspire new completion") — 8302ms ✓ (KubernetesDeployTestHelpers.cs:204)
[47] Wait(500ms) — 500ms ✓ (KubernetesDeployTestHelpers.cs:231)
[48] Type("n") — 2ms ✓ (KubernetesDeployTestHelpers.cs:232)
[49] WaitUntil("any prompt [10 OK/ERR] $") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:27)
[50] Type("cd PersistenceE2E") — 1ms ✓ (KubernetesDeployTestHelpers.cs:236)
[51] Key(Enter) — 2ms ✓ (KubernetesDeployTestHelpers.cs:237)
[52] WaitUntil("success prompt [11 OK] $ (fail-fast on error)") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[53] Type("aspire add Aspire.Hosting.R...") — 0ms ✓ (KubernetesDeployTestHelpers.cs:243)
[54] Key(Enter) — 3ms ✓ (KubernetesDeployTestHelpers.cs:244)
[55] WaitUntil("aspire add completion or version-selection prompt") — 0:18.100 ✓ (Hex1bAutomatorTestHelpers.cs:385)
[56] WaitUntil("success prompt [12 OK] $ (fail-fast on error)") — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[57] Type("aspire add Aspire.Hosting.P...") — 0ms ✓ (KubernetesDeployTestHelpers.cs:243)
[58] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:244)
[59] WaitUntil("aspire add completion or version-selection prompt") — 0:16.349 ✓ (Hex1bAutomatorTestHelpers.cs:385)
[60] WaitUntil("success prompt [13 OK] $ (fail-fast on error)") — 4ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[61] Type("aspire add Aspire.Hosting.A...") — 0ms ✓ (KubernetesDeployTestHelpers.cs:243)
[62] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:244)
[63] WaitUntil("aspire add completion or version-selection prompt") — 0:15.836 ✓ (Hex1bAutomatorTestHelpers.cs:385)
[64] WaitUntil("success prompt [14 OK] $ (fail-fast on error)") — 2ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[65] Type("dotnet add PersistenceE2E.A...") — 0ms ✓ (KubernetesDeployTestHelpers.cs:251)
[66] Key(Enter) — 0ms ✓ (KubernetesDeployTestHelpers.cs:252)
[67] WaitUntil("success prompt [15 OK] $ (fail-fast on error)") — 2265ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[68] Type("dotnet add PersistenceE2E.A...") — 1ms ✓ (KubernetesDeployTestHelpers.cs:251)
[69] Key(Enter) — 1ms ✓ (KubernetesDeployTestHelpers.cs:252)
[70] WaitUntil("success prompt [16 OK] $ (fail-fast on error)") — 2514ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[71] Type("dotnet add PersistenceE2E.A...") — 0ms ✓ (KubernetesDeployTestHelpers.cs:251)
[72] Key(Enter) — 2ms ✓ (KubernetesDeployTestHelpers.cs:252)
[73] WaitUntil("success prompt [17 OK] $ (fail-fast on error)") — 2512ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[74] Type("(set -o pipefail; ASPIRE_CL...") — 0ms ✓ (CliE2EAutomatorHelpers.cs:737)
[75] Key(Enter) — 2ms ✓ (CliE2EAutomatorHelpers.cs:738)
[76] WaitUntil("aspire start to complete [18 OK/ERR]") — 0:11.565 ✓ (CliE2EAutomatorHelpers.cs:742)
[77] Type("DASHBOARD_URL=$(sed -n 's/....") — 3ms ✓ (CliE2EAutomatorHelpers.cs:781)
[78] Key(Enter) — 1ms ✓ (CliE2EAutomatorHelpers.cs:785)
[79] WaitUntil("success prompt [19 OK] $ (fail-fast on error)") — 257ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[80] Type("if [ -z "$DASHBOARD_URL" ];...") — 18ms ✓ (CliE2EAutomatorHelpers.cs:792)
[81] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:806)
[82] WaitUntil("dashboard url validation [20 OK/ERR]") — 261ms ✓ (CliE2EAutomatorHelpers.cs:808)
[83] Type("echo "URLCHECK:${DASHBOARD_...") — 2ms ✓ (CliE2EAutomatorHelpers.cs:844)
[84] Key(Enter) — 6ms ✓ (CliE2EAutomatorHelpers.cs:845)
[85] WaitUntil("dashboard URL check [21 OK]") — 260ms ✓ (CliE2EAutomatorHelpers.cs:848)
[86] Type("curl -ksSL -o /dev/null -w ...") — 0ms ✓ (CliE2EAutomatorHelpers.cs:871)
[87] Key(Enter) — 1ms ✓ (CliE2EAutomatorHelpers.cs:874)
[88] WaitUntilText("dashboard-http-200") — 758ms ✓ (CliE2EAutomatorHelpers.cs:875)
[89] WaitUntil("success prompt [22 OK] $ (fail-fast on error)") — 3ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[90] Type("aspire wait server --status...") — 4ms ✓ (PersistentContainerEndToEndTests.cs:158)
[91] Key(Enter) — 3ms ✓ (PersistentContainerEndToEndTests.cs:159)
[92] WaitUntil("success prompt [23 OK] $ (fail-fast on error)") — 0:17.399 ✓ (Hex1bAutomatorTestHelpers.cs:229)
[93] Type("aspire describe server --fo...") — 0ms ✓ (PersistentContainerEndToEndTests.cs:162)
[94] Key(Enter) — 1ms ✓ (PersistentContainerEndToEndTests.cs:163)
[95] WaitUntil("success prompt [24 OK] $ (fail-fast on error)") — 507ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[96] Type("SERVER_URL=$(jq -er '.resou...") — 2ms ✓ (PersistentContainerEndToEndTests.cs:166)
[97] Key(Enter) — 3ms ✓ (PersistentContainerEndToEndTests.cs:167)
[98] WaitUntil("success prompt [25 OK] $ (fail-fast on error)") — 2013ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[99] Type("aspire stop") — 1ms ✓ (CliE2EAutomatorHelpers.cs:886)
[100] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:887)
[101] WaitUntil("success prompt [26 OK] $ (fail-fast on error)") — 753ms ✓ (Hex1bAutomatorTestHelpers.cs:229)
[102] Type("(set -o pipefail; ASPIRE_CL...") — 1ms ✓ (CliE2EAutomatorHelpers.cs:737)
[103] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:738)
[104] WaitUntil("aspire start to complete [27 OK/ERR]") — FAILED after 5:00.122
Total elapsed: 6:48.817
Terminal snapshot at failure (160x48, cursor at 46,47, normal screen):
info : Installed Microsoft.Extensions.Azure 1.14.0 from https://api.nuget.org/v3/index.json to /root/.nuget/packages/microsoft.extensions.azure/1.14.0 with cont
ent hash g4d2TLfbAiZeXBcGkJdgIl2ZzqMcepMUbECENgg4XXqDU8uGAUwBxJb6x2DBpF6BY09vrHO0Ug3xZcH+cVbMrQ==.
info : CACHE https://api.nuget.org/v3/vulnerabilities/index.json
info : CACHE https://api.nuget.org/v3-vulnerabilities/2026.06.03.05.52.25/vulnerability.base.json
info : CACHE https://api.nuget.org/v3-vulnerabilities/2026.06.03.05.52.25/2026.06.05.17.52.36/vulnerability.update.json
info : Package 'Aspire.Azure.Storage.Blobs' is compatible with all the specified frameworks in project '/workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/Persiste
nceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj'.
info : PackageReference for package 'Aspire.Azure.Storage.Blobs' version '13.5.0-pr.17970.g399770c1' added to file '/workspace/52103d94-afa9-4b6a-ab88-4c6466713
a3d/PersistenceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj'.
info : Generating MSBuild file /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/obj/PersistenceE2E.ApiService.csproj.nug
et.g.targets.
info : Writing assets file to disk. Path: /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/obj/project.assets.json
log : Restored /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj (in 366 ms).
[17 OK] $ (set -o pipefail; ASPIRE_CLI_START_TIMEOUT=300 aspire start --format json | tee "/tmp/aspire-start.json")
{
"appHostPath": "/workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj",
"appHostPid": 1454,
"cliPid": 1305,
"dashboardUrl": "https://localhost:17297/login?t=0e7f5b16e4b75e9b4404866caf124be9",
"logFile": "/root/.aspire/logs/cli_20260606T052328352_detach-child_75aca47d89fc481fb27bc5e327028daf.log"
}
[18 OK] $ DASHBOARD_URL=$(sed -n 's/.*"dashboardUrl"[[:space:]]*:[[:space:]]*"\(https\?:\/\/[a-z.]*localhost:[0-9]*\).*/\1/p' "/tmp/aspire-start.json" | head -1
)
[19 OK] $ if [ -z "$DASHBOARD_URL" ]; then echo 'dashboard-url-empty'; echo '=== ASPIRE START JSON ==='; cat "/tmp/aspire-start.json"; echo '=== END JSON ===';
echo '=== ALL LOGS ==='; ls -lt ~/.aspire/logs/ 2>/dev/null; echo '=== END LIST ==='; DETACH_LOG=$(ls -t ~/.aspire/logs/cli_*detach*.log 2>/dev/null | head -1);
echo "=== DETACH LOG: $DETACH_LOG ==="; [ -n "$DETACH_LOG" ] && tail -200 "$DETACH_LOG"; echo '=== END DETACH ==='; CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>
/dev/null | grep -v 'detach' | head -1); if [ -z "$CLI_LOG" ]; then CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>/dev/null | head -1); fi; echo "=== CLI LOG: $CLI
_LOG ==="; [ -n "$CLI_LOG" ] && tail -100 "$CLI_LOG"; echo '=== END CLI ==='; false; else echo "dashboard-url:$DASHBOARD_URL"; fi
dashboard-url:https://localhost:17297
[20 OK] $ echo "URLCHECK:${DASHBOARD_URL}:URLEND"
URLCHECK:https://localhost:17297:URLEND
[21 OK] $ curl -ksSL -o /dev/null -w 'dashboard-http-%{http_code}' "$DASHBOARD_URL" || echo 'dashboard-http-failed'
dashboard-http-200[22 OK] $ aspire wait server --status up --timeout 300
✅ Resource 'server' is up (running). (17.0s)
[23 OK] $ aspire describe server --format json > server.json
[24 OK] $ SERVER_URL=$(jq -er '.resources[0].urls[0].url' server.json) && for i in $(seq 1 30); do result=$(curl -ksS "$SERVER_URL/write" 2>/dev/null || true);
echo "$result"; echo "$result" | grep -q 'PERSISTENCE_WRITE_OK' && break; sleep 2; done && echo "$result" | grep -q 'PERSISTENCE_WRITE_OK'
"PERSISTENCE_WRITE_OK"
[25 OK] $ aspire stop
\ud83d\udce6 Found running AppHost: PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj
\ud83d\uded1 Sending stop signal to PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj...
✅ PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj stopped successfully.
[26 OK] $ (set -o pipefail; ASPIRE_CLI_START_TIMEOUT=300 aspire start --format json | tee "/tmp/aspire-start.json")
⠙ Starting Aspire AppHost in the background...
---- Hex1b.Automation.WaitUntilTimeoutException : WaitUntil timed out after 00:05:00 waiting for: aspire start to complete [27 OK/ERR]
at Hex1bTerminalAutomator.cs:110
Terminal (160x48, cursor at 46,47, normal screen):
info : Installed Microsoft.Extensions.Azure 1.14.0 from https://api.nuget.org/v3/index.json to /root/.nuget/packages/microsoft.extensions.azure/1.14.0 with cont
ent hash g4d2TLfbAiZeXBcGkJdgIl2ZzqMcepMUbECENgg4XXqDU8uGAUwBxJb6x2DBpF6BY09vrHO0Ug3xZcH+cVbMrQ==.
info : CACHE https://api.nuget.org/v3/vulnerabilities/index.json
info : CACHE https://api.nuget.org/v3-vulnerabilities/2026.06.03.05.52.25/vulnerability.base.json
info : CACHE https://api.nuget.org/v3-vulnerabilities/2026.06.03.05.52.25/2026.06.05.17.52.36/vulnerability.update.json
info : Package 'Aspire.Azure.Storage.Blobs' is compatible with all the specified frameworks in project '/workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/Persiste
nceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj'.
info : PackageReference for package 'Aspire.Azure.Storage.Blobs' version '13.5.0-pr.17970.g399770c1' added to file '/workspace/52103d94-afa9-4b6a-ab88-4c6466713
a3d/PersistenceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj'.
info : Generating MSBuild file /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/obj/PersistenceE2E.ApiService.csproj.nug
et.g.targets.
info : Writing assets file to disk. Path: /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/obj/project.assets.json
log : Restored /workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.ApiService/PersistenceE2E.ApiService.csproj (in 366 ms).
[17 OK] $ (set -o pipefail; ASPIRE_CLI_START_TIMEOUT=300 aspire start --format json | tee "/tmp/aspire-start.json")
{
"appHostPath": "/workspace/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj",
"appHostPid": 1454,
"cliPid": 1305,
"dashboardUrl": "https://localhost:17297/login?t=0e7f5b16e4b75e9b4404866caf124be9",
"logFile": "/root/.aspire/logs/cli_20260606T052328352_detach-child_75aca47d89fc481fb27bc5e327028daf.log"
}
[18 OK] $ DASHBOARD_URL=$(sed -n 's/.*"dashboardUrl"[[:space:]]*:[[:space:]]*"\(https\?:\/\/[a-z.]*localhost:[0-9]*\).*/\1/p' "/tmp/aspire-start.json" | head -1
)
[19 OK] $ if [ -z "$DASHBOARD_URL" ]; then echo 'dashboard-url-empty'; echo '=== ASPIRE START JSON ==='; cat "/tmp/aspire-start.json"; echo '=== END JSON ===';
echo '=== ALL LOGS ==='; ls -lt ~/.aspire/logs/ 2>/dev/null; echo '=== END LIST ==='; DETACH_LOG=$(ls -t ~/.aspire/logs/cli_*detach*.log 2>/dev/null | head -1);
echo "=== DETACH LOG: $DETACH_LOG ==="; [ -n "$DETACH_LOG" ] && tail -200 "$DETACH_LOG"; echo '=== END DETACH ==='; CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>
/dev/null | grep -v 'detach' | head -1); if [ -z "$CLI_LOG" ]; then CLI_LOG=$(ls -t ~/.aspire/logs/cli_*.log 2>/dev/null | head -1); fi; echo "=== CLI LOG: $CLI
_LOG ==="; [ -n "$CLI_LOG" ] && tail -100 "$CLI_LOG"; echo '=== END CLI ==='; false; else echo "dashboard-url:$DASHBOARD_URL"; fi
dashboard-url:https://localhost:17297
[20 OK] $ echo "URLCHECK:${DASHBOARD_URL}:URLEND"
URLCHECK:https://localhost:17297:URLEND
[21 OK] $ curl -ksSL -o /dev/null -w 'dashboard-http-%{http_code}' "$DASHBOARD_URL" || echo 'dashboard-http-failed'
dashboard-http-200[22 OK] $ aspire wait server --status up --timeout 300
✅ Resource 'server' is up (running). (17.0s)
[23 OK] $ aspire describe server --format json > server.json
[24 OK] $ SERVER_URL=$(jq -er '.resources[0].urls[0].url' server.json) && for i in $(seq 1 30); do result=$(curl -ksS "$SERVER_URL/write" 2>/dev/null || true);
echo "$result"; echo "$result" | grep -q 'PERSISTENCE_WRITE_OK' && break; sleep 2; done && echo "$result" | grep -q 'PERSISTENCE_WRITE_OK'
"PERSISTENCE_WRITE_OK"
[25 OK] $ aspire stop
\ud83d\udce6 Found running AppHost: PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj
\ud83d\uded1 Sending stop signal to PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj...
✅ PersistenceE2E.AppHost/PersistenceE2E.AppHost.csproj stopped successfully.
[26 OK] $ (set -o pipefail; ASPIRE_CLI_START_TIMEOUT=300 aspire start --format json | tee "/tmp/aspire-start.json")
⠙ Starting Aspire AppHost in the background...
Stack Trace:
at Hex1b.Automation.Hex1bTerminalAutomator.RunAndRecordAsync(Hex1bTerminalInputSequence sequence, String description, CancellationToken ct, String callerFilePath, Int32 callerLineNumber) in /home/runner/work/hex1b/hex1b/src/Hex1b/Automation/Hex1bTerminalAutomator.cs:line 665
at Hex1b.Automation.Hex1bTerminalAutomator.WaitUntilAsync(Func`2 predicate, Nullable`1 timeout, String description, String predicateExpression, String callerFilePath, Int32 callerLineNumber) in /home/runner/work/hex1b/hex1b/src/Hex1b/Automation/Hex1bTerminalAutomator.cs:line 113
at Aspire.Cli.EndToEnd.Tests.Helpers.CliE2EAutomatorHelpers.AspireStartAsync(Hex1bTerminalAutomator auto, SequenceCounter counter, Nullable`1 startTimeout, Boolean isolated) in /_/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2EAutomatorHelpers.cs:line 742
at Aspire.Cli.EndToEnd.Tests.PersistentContainerEndToEndTests.PersistentContainersPreserveDataAcrossAppHostRuns() in /_/tests/Aspire.Cli.EndToEnd.Tests/PersistentContainerEndToEndTests.cs:line 144
at Aspire.Cli.EndToEnd.Tests.PersistentContainerEndToEndTests.PersistentContainersPreserveDataAcrossAppHostRuns() in /_/tests/Aspire.Cli.EndToEnd.Tests/PersistentContainerEndToEndTests.cs:line 146
--- End of stack trace from previous location ---
----- Inner Stack Trace -----
at Hex1b.Automation.WaitUntilStep.ExecuteAsync(Hex1bTerminal terminal, Hex1bTerminalInputSequenceOptions options, CancellationToken ct) in /home/runner/work/hex1b/hex1b/src/Hex1b/Automation/WaitUntilStep.cs:line 39
at Hex1b.Automation.Hex1bTerminalInputSequence.ApplyAsync(Hex1bTerminal terminal, CancellationToken ct) in /home/runner/work/hex1b/hex1b/src/Hex1b/Automation/Hex1bTerminalInputSequence.cs:line 41
at Hex1b.Automation.Hex1bTerminalAutomator.RunAndRecordAsync(Hex1bTerminalInputSequence sequence, String description, CancellationToken ct, String callerFilePath, Int32 callerLineNumber) in /home/runner/work/hex1b/hex1b/src/Hex1b/Automation/Hex1bTerminalAutomator.cs:line 652
```
Standard Output
```yml
CLI install strategy detection starting...
→ Selected: LocalArchive (ASPIRE_E2E_CLI_ARCHIVE_DIR=/home/runner/work/aspire/aspire/cli-archives)
Temporary workspace created at: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/52103d94-afa9-4b6a-ab88-4c6466713a3d
Creating Docker test terminal:
Test name: PersistentContainersPreserveDataAcrossAppHostRuns
Strategy: LocalArchive (/home/runner/work/aspire/aspire/cli-archives) [expected=13.5.0-pr.17970.g399770c1]
Expected ver: 13.5.0-pr.17970.g399770c1
Variant: DotNet
Dockerfile: (prebuilt image)
Image: aspire-cli-e2e-dotnet:prebuilt
Workspace: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/52103d94-afa9-4b6a-ab88-4c6466713a3d
Docker socket: True
Dimensions: 160x48
Recording: /home/runner/work/aspire/aspire/testresults/recordings/PersistentContainersPreserveDataAcrossAppHostRuns.cast
✅ Template version message found during aspire new
Writing AppHost.cs to: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/52103d94-afa9-4b6a-ab88-4c6466713a3d/PersistenceE2E/PersistenceE2E.AppHost/AppHost.cs
[TerminalRun] Captured diagnostics to: /home/runner/work/aspire/aspire/testresults/workspaces/PersistentContainersPreserveDataAcrossAppHostRuns
[TerminalRun] Source workspace: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/52103d94-afa9-4b6a-ab88-4c6466713a3d
[TerminalRun] logs/: 12 file(s)
[TerminalRun] (root): 1 file(s)
Disposing temporary workspace at: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/52103d94-afa9-4b6a-ab88-4c6466713a3d
```
📊 **[View CI Failure Report](https://github.com/microsoft/aspire/issues/17995#issuecomment-4644493407)**
Contributor guide
Assessment
This issue has not been assessed yet.