[Failing test]: Aspire.Cli.EndToEnd.Tests.ProjectReferenceTests.TypeScriptAppHostWithProjectReferenceIntegration
- 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/23928257453
Build error leg or test failing: Aspire.Cli.EndToEnd.Tests.ProjectReferenceTests.TypeScriptAppHostWithProjectReferenceIntegration
Logs: [Tests / Cli.EndToEnd-ProjectReferenceTests / Cli.EndToEnd-ProjectReferenceTests \(ubuntu-latest\)](https://github.com/microsoft/aspire/actions/runs/23928257453/job/69790516519)
Artifact: [All-TestResults](https://github.com/microsoft/aspire/actions/runs/23928257453/artifacts/6253166370)
### 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": "",
"ErrorPattern": "",
"BuildRetry": false,
"ExcludeConsoleLog": false
}
```
### Error details
Error details (159 lines)
```yml
Error Message: Hex1b.Automation.Hex1bAutomationException : Step 41 of 41 failed — WaitUntil("success prompt [12 OK] $")
Timed out after 00:01:30 waiting for: success prompt [12 OK] $
at Hex1bAutomatorTestHelpers.cs:25
Completed steps (40 of 41):
[1] WaitUntilText("# ") — 269ms ✓ (CliE2EAutomatorHelpers.cs:24)
[2] Wait(500ms) — 502ms ✓ (CliE2EAutomatorHelpers.cs:26)
[3] Type("CMDCOUNT=0; PROMPT_COMMAND=...") — 7ms ✓ (CliE2EAutomatorHelpers.cs:30)
[4] Key(Enter) — 1ms ✓ (CliE2EAutomatorHelpers.cs:31)
[5] WaitUntil("success prompt [1 OK] $") — 13ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[6] Type("umask 000") — 0ms ✓ (CliE2EAutomatorHelpers.cs:35)
[7] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:36)
[8] WaitUntil("success prompt [2 OK] $") — 255ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[9] Type("export ASPIRE_PLAYGROUND=tr...") — 2ms ✓ (CliE2EAutomatorHelpers.cs:40)
[10] Key(Enter) — 1ms ✓ (CliE2EAutomatorHelpers.cs:41)
[11] WaitUntil("success prompt [3 OK] $") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[12] Type("cd /workspace/1f24289f-b2b4...") — 0ms ✓ (CliE2EAutomatorHelpers.cs:46)
[13] Key(Enter) — 3ms ✓ (CliE2EAutomatorHelpers.cs:47)
[14] WaitUntil("success prompt [4 OK] $") — 0ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[15] Type("trap 'cp -r ~/.aspire/logs ...") — 2ms ✓ (CliE2EAutomatorHelpers.cs:51)
[16] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:52)
[17] WaitUntil("success prompt [5 OK] $") — 253ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[18] Type("/opt/aspire-scripts/get-asp...") — 0ms ✓ (CliE2EAutomatorHelpers.cs:87)
[19] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:88)
[20] WaitUntil("success prompt [6 OK] $ (fail-fast on error)") — 0:19.305 ✓ (Hex1bAutomatorTestHelpers.cs:73)
[21] Type("export PATH=~/.aspire/bin:~...") — 3ms ✓ (CliE2EAutomatorHelpers.cs:90)
[22] Key(Enter) — 0ms ✓ (CliE2EAutomatorHelpers.cs:91)
[23] WaitUntil("success prompt [7 OK] $") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[24] Type("aspire init --language type...") — 0ms ✓ (ProjectReferenceTests.cs:40)
[25] Key(Enter) — 0ms ✓ (ProjectReferenceTests.cs:41)
[26] WaitUntilText("Created apphost.ts") — 0:11.813 ✓ (ProjectReferenceTests.cs:42)
[27] WaitUntil("success prompt [8 OK] $") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[28] Type("aspire start --non-interact...") — 1ms ✓ (ProjectReferenceTests.cs:146)
[29] Key(Enter) — 1ms ✓ (ProjectReferenceTests.cs:147)
[30] WaitUntil("waiting for apphost start success or failure") — 0:12.057 ✓ (ProjectReferenceTests.cs:148)
[31] WaitUntil("success prompt [9 OK] $") — 252ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[32] Type("CHILD_LOG=$(ls -t ~/.aspire...") — 1ms ✓ (ProjectReferenceTests.cs:160)
[33] Key(Enter) — 4ms ✓ (ProjectReferenceTests.cs:161)
[34] WaitUntil("success prompt [10 OK] $") — 254ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[35] Type("grep addMyService .modules/...") — 2ms ✓ (ProjectReferenceTests.cs:165)
[36] Key(Enter) — 6ms ✓ (ProjectReferenceTests.cs:166)
[37] WaitUntilText("addMyService") — 15ms ✓ (ProjectReferenceTests.cs:167)
[38] WaitUntil("success prompt [11 OK] $") — 2ms ✓ (Hex1bAutomatorTestHelpers.cs:25)
[39] Type("aspire wait my-svc --timeou...") — 3ms ✓ (ProjectReferenceTests.cs:171)
[40] Key(Enter) — 3ms ✓ (ProjectReferenceTests.cs:172)
[41] WaitUntil("success prompt [12 OK] $") — FAILED after 1:30.046
Total elapsed: 2:15.845
Terminal snapshot at failure (160x48, cursor at 14,47, normal screen):
[2026-04-03 00:41:57.617] [INFO] [Program] Command: aspire run --non-interactive --apphost /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688/apphost.ts --log-file
/root/.aspire/logs/cli_20260403T004157535_detach-child_7925a32d5d104d10b205d4b5052063bc.log
[2026-04-03 00:41:57.621] [INFO] [Stdout] :locked_with_key: Checking certificates...
[2026-04-03 00:41:57.622] [INFO] [Stdout] :locked_with_key: Trusting certificates...
[2026-04-03 00:41:57.933] [INFO] [NativeCertificateToolRunner] For OpenSSL trust to take effect, '$HOME/.aspnet/dev-certs/trust' must be listed in the SSL_CERT_
DIR environment variable. For example, `export SSL_CERT_DIR="$HOME/.aspnet/dev-certs/trust:/usr/lib/ssl/certs"`. See https://aka.ms/dev-certs-trust for more inf
ormation.
[2026-04-03 00:41:57.934] [INFO] [Stdout] ⚠ Developer certificates may not be fully trusted (trust exit code was: PartiallyFailedToTrustTheCertificate).
[2026-04-03 00:41:58.062] [WARN] [NativeCertificateToolRunner] The certificate is not trusted by OpenSSL. Ensure that the SSL_CERT_DIR environment variable is
set correctly.
[2026-04-03 00:41:58.068] [INFO] [GuestAppHostProject] Loaded config from /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688 (file exists: True)
[2026-04-03 00:41:58.069] [INFO] [Stdout] :gear: Preparing Aspire server...
[2026-04-03 00:42:03.939] [INFO] [Stdout] Connecting to apphost...
[2026-04-03 00:42:05.165] [INFO] [GuestAppHostProject] Generated 3 TypeScript files in /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688/.modules
[2026-04-03 00:42:05.652] [INFO] [AppHost]
[2026-04-03 00:42:05.652] [INFO] [AppHost] up to date, audited 115 packages in 422ms
[2026-04-03 00:42:05.652] [INFO] [AppHost]
[2026-04-03 00:42:05.652] [INFO] [AppHost] 35 packages are looking for funding
[2026-04-03 00:42:05.652] [INFO] [AppHost] run `npm fund` for details
[2026-04-03 00:42:05.653] [INFO] [AppHost]
[2026-04-03 00:42:05.653] [INFO] [AppHost] found 0 vulnerabilities
[2026-04-03 00:42:07.086] [INFO] [Stdout] Starting dashboard...
[2026-04-03 00:42:06.884] [INFO] [AppHost/DistributedApplication] Aspire version: 13.3.0-pr.15829.g5d7915f5
[2026-04-03 00:42:06.885] [INFO] [AppHost/DistributedApplication] Distributed application starting.
[2026-04-03 00:42:06.885] [INFO] [AppHost/DistributedApplication] Application host directory is: /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688
[2026-04-03 00:42:06.908] [WARN] [AppHost/FileSystemXmlRepository] Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted out
side of the container. Protected data will be unavailable when container is destroyed. For more information go to https://aka.ms/aspnet/dataprotectionwarning
[2026-04-03 00:42:06.926] [WARN] [AppHost/XmlKeyManager] No XML encryptor configured. Key {acb43787-d51f-46f4-acbf-36c43ef212c3} may be persisted to storage in
unencrypted form.
[2026-04-03 00:42:07.076] [INFO] [AppHost/AuxiliaryBackchannelRpcTarget] GetDashboardUrlsAsync called on auxiliary backchannel
[2026-04-03 00:42:09.277] [INFO] [AppHost/DistributedApplication] Distributed application started. Press Ctrl+C to shut down.
[2026-04-03 00:42:09.339] [INFO] [AppHost/DistributedApplication] Now listening on: https://localhost:15144
[2026-04-03 00:42:09.340] [INFO] [AppHost/DistributedApplication] Login to the dashboard at https://localhost:15144/login?t=0096c8dbc54b50049308453908dab6f2
=== END CHILD LOG ===
[10 OK] $ grep addMyService .modules/aspire.ts
addMyService(name: string): ContainerResourcePromise;
addMyService(name: string): ContainerResourcePromise;
async _addMyServiceInternal(name: string): Promise {
'MyIntegration/addMyService',
addMyService(name: string): ContainerResourcePromise {
return new ContainerResourcePromiseImpl(this._addMyServiceInternal(name));
addMyService(name: string): ContainerResourcePromise {
return new ContainerResourcePromiseImpl(this._promise.then(obj => obj.addMyService(name)));
[11 OK] $ aspire wait my-svc --timeout 60
❌ Resource 'my-svc' entered a failed state: Stopped waiting for resource 'my-svc' to become healthy because it failed to start..
[12 ERR:18] $
---- Hex1b.Automation.WaitUntilTimeoutException : WaitUntil timed out after 00:01:30 waiting for: success prompt [12 OK] $
at Hex1bTerminalAutomator.cs:110
Terminal (160x48, cursor at 14,47, normal screen):
[2026-04-03 00:41:57.617] [INFO] [Program] Command: aspire run --non-interactive --apphost /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688/apphost.ts --log-file
/root/.aspire/logs/cli_20260403T004157535_detach-child_7925a32d5d104d10b205d4b5052063bc.log
[2026-04-03 00:41:57.621] [INFO] [Stdout] :locked_with_key: Checking certificates...
[2026-04-03 00:41:57.622] [INFO] [Stdout] :locked_with_key: Trusting certificates...
[2026-04-03 00:41:57.933] [INFO] [NativeCertificateToolRunner] For OpenSSL trust to take effect, '$HOME/.aspnet/dev-certs/trust' must be listed in the SSL_CERT_
DIR environment variable. For example, `export SSL_CERT_DIR="$HOME/.aspnet/dev-certs/trust:/usr/lib/ssl/certs"`. See https://aka.ms/dev-certs-trust for more inf
ormation.
[2026-04-03 00:41:57.934] [INFO] [Stdout] ⚠ Developer certificates may not be fully trusted (trust exit code was: PartiallyFailedToTrustTheCertificate).
[2026-04-03 00:41:58.062] [WARN] [NativeCertificateToolRunner] The certificate is not trusted by OpenSSL. Ensure that the SSL_CERT_DIR environment variable is
set correctly.
[2026-04-03 00:41:58.068] [INFO] [GuestAppHostProject] Loaded config from /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688 (file exists: True)
[2026-04-03 00:41:58.069] [INFO] [Stdout] :gear: Preparing Aspire server...
[2026-04-03 00:42:03.939] [INFO] [Stdout] Connecting to apphost...
[2026-04-03 00:42:05.165] [INFO] [GuestAppHostProject] Generated 3 TypeScript files in /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688/.modules
[2026-04-03 00:42:05.652] [INFO] [AppHost]
[2026-04-03 00:42:05.652] [INFO] [AppHost] up to date, audited 115 packages in 422ms
[2026-04-03 00:42:05.652] [INFO] [AppHost]
[2026-04-03 00:42:05.652] [INFO] [AppHost] 35 packages are looking for funding
[2026-04-03 00:42:05.652] [INFO] [AppHost] run `npm fund` for details
[2026-04-03 00:42:05.653] [INFO] [AppHost]
[2026-04-03 00:42:05.653] [INFO] [AppHost] found 0 vulnerabilities
[2026-04-03 00:42:07.086] [INFO] [Stdout] Starting dashboard...
[2026-04-03 00:42:06.884] [INFO] [AppHost/DistributedApplication] Aspire version: 13.3.0-pr.15829.g5d7915f5
[2026-04-03 00:42:06.885] [INFO] [AppHost/DistributedApplication] Distributed application starting.
[2026-04-03 00:42:06.885] [INFO] [AppHost/DistributedApplication] Application host directory is: /workspace/1f24289f-b2b4-49d5-8331-0ae373d1c688
[2026-04-03 00:42:06.908] [WARN] [AppHost/FileSystemXmlRepository] Storing keys in a directory '/root/.aspnet/DataProtection-Keys' that may not be persisted out
side of the container. Protected data will be unavailable when container is destroyed. For more information go to https://aka.ms/aspnet/dataprotectionwarning
[2026-04-03 00:42:06.926] [WARN] [AppHost/XmlKeyManager] No XML encryptor configured. Key {acb43787-d51f-46f4-acbf-36c43ef212c3} may be persisted to storage in
unencrypted form.
[2026-04-03 00:42:07.076] [INFO] [AppHost/AuxiliaryBackchannelRpcTarget] GetDashboardUrlsAsync called on auxiliary backchannel
[2026-04-03 00:42:09.277] [INFO] [AppHost/DistributedApplication] Distributed application started. Press Ctrl+C to shut down.
[2026-04-03 00:42:09.339] [INFO] [AppHost/DistributedApplication] Now listening on: https://localhost:15144
[2026-04-03 00:42:09.340] [INFO] [AppHost/DistributedApplication] Login to the dashboard at https://localhost:15144/login?t=0096c8dbc54b50049308453908dab6f2
=== END CHILD LOG ===
[10 OK] $ grep addMyService .modules/aspire.ts
addMyService(name: string): ContainerResourcePromise;
addMyService(name: string): ContainerResourcePromise;
async _addMyServiceInternal(name: string): Promise {
'MyIntegration/addMyService',
addMyService(name: string): ContainerResourcePromise {
return new ContainerResourcePromiseImpl(this._addMyServiceInternal(name));
addMyService(name: string): ContainerResourcePromise {
return new ContainerResourcePromiseImpl(this._promise.then(obj => obj.addMyService(name)));
[11 OK] $ aspire wait my-svc --timeout 60
❌ Resource 'my-svc' entered a failed state: Stopped waiting for resource 'my-svc' to become healthy because it failed to start..
[12 ERR:18] $
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.Tests.Shared.Hex1bAutomatorTestHelpers.WaitForSuccessPromptAsync(Hex1bTerminalAutomator auto, SequenceCounter counter, Nullable`1 timeout) in /_/tests/Shared/Hex1bAutomatorTestHelpers.cs:line 25
at Aspire.Cli.EndToEnd.Tests.ProjectReferenceTests.TypeScriptAppHostWithProjectReferenceIntegration() in /_/tests/Aspire.Cli.EndToEnd.Tests/ProjectReferenceTests.cs:line 173
--- 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
Temporary workspace created at: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/1f24289f-b2b4-49d5-8331-0ae373d1c688
Creating Docker test terminal:
Test name: TypeScriptAppHostWithProjectReferenceIntegration
Install mode: PullRequest
Variant: DotNet
Dockerfile: /home/runner/work/aspire/aspire/tests/Shared/Docker/Dockerfile.e2e
Workspace: /tmp/Aspire.Cli.Tests/TemporaryWorkspaces/1f24289f-b2b4-49d5-8331-0ae373d1c688
Docker socket: True
Dimensions: 160x48
Recording: /home/runner/work/aspire/aspire/testresults/recordings/TypeScriptAppHostWithProjectReferenceIntegration.cast
PR number: 15829
PR head SHA: 5d7915f54c7145b261b1027c32136fef3a8eb8ae
```
📊 **[View CI Failure Report](https://github.com/microsoft/aspire/issues/15831#issuecomment-4181333405)**
Contributor guide
Research direction
Start with ProjectReferenceTests.cs at the aspire init, aspire start, and aspire wait steps, then inspect the generated .modules/aspire.ts and the child log from the failing run. Reproduce the TypeScript app-host project-reference scenario and identify why my-svc fails to become healthy; done means the end-to-end test reaches the success prompt.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- csharp, typescript
- Domain
- cli, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100