Skip to content

Add Docker-based E2E CLI test infrastructure with Hex1b WithDockerContainer#14974

Merged
mitchdenny merged 24 commits intorelease/13.2from
aspire-hex1b-update
Mar 10, 2026
Merged

Add Docker-based E2E CLI test infrastructure with Hex1b WithDockerContainer#14974
mitchdenny merged 24 commits intorelease/13.2from
aspire-hex1b-update

Conversation

@mitchdenny
Copy link
Copy Markdown
Member

Description

Adds Docker-based E2E CLI test infrastructure using Hex1b's WithDockerContainer API. This makes E2E CLI tests portable across local dev machines and CI by running them inside ephemeral Docker containers built from a multi-stage Dockerfile.

What's included

  • Hex1b package update: 0.97.0 → 0.105.0 (enables WithDockerContainer API)
  • docker/Dockerfile.e2e: Multi-stage Dockerfile that can build the CLI from source (full AOT build with ./build.sh --pack && --bundle) or skip source build for CI (where pre-built artifacts are available)
  • .dockerignore: Keeps Docker build context small by excluding artifacts/, .git/, .dotnet/, IDE files
  • Docker test helpers: DetectDockerInstallMode(), CreateDockerTestTerminal(), PrepareDockerEnvironment(), InstallAspireCliInDocker() in CliE2ETestHelpers.cs
  • DockerSmokeTests.cs: Basic smoke test that installs the Aspire CLI and verifies aspire --version
  • DockerStagingChannelTests.cs: Port of StagingChannelTests exercising aspire config set/get/delete for staging channel settings — no cleanup needed since the container is ephemeral

Environment detection

The test infrastructure detects the environment and adjusts installation accordingly:

  • CI (PR builds): Uses get-aspire-cli-pr.sh to install from PR workflow artifacts
  • Local with bundle: If artifacts/bundle/aspire-*-linux-x64.tar.gz exists, uses the source-built CLI
  • Local fallback: Installs the latest GA release from aspire.dev

Goal

This is Phase 1 of making CLI E2E tests more portable. The Docker approach eliminates host environment pollution and makes tests reproducible. Future work will expand this pattern to more CLI E2E tests and integrate with CI workflows to pass pre-built artifacts.

Fixes # (issue)

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
    • No
  • Does the change require an update in our Aspire docs?
    • Yes
    • No

Copilot AI review requested due to automatic review settings March 5, 2026 15:02
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 5, 2026

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 14974

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 14974"

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds Docker-based infrastructure for Aspire CLI end-to-end tests using Hex1b’s new WithDockerContainer support, aiming to make E2E runs reproducible and isolated by executing inside ephemeral containers.

Changes:

  • Add a multi-stage Dockerfile and .dockerignore for building/running CLI E2Es in Docker.
  • Add Docker-specific E2E helper APIs to create/configure container-backed Hex1b terminals and install the CLI by environment.
  • Introduce initial Docker-backed smoke + staging-channel E2E tests; bump Hex1b package versions to enable the new API.

Reviewed changes

Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
tests/Aspire.Cli.EndToEnd.Tests/docker/Dockerfile.e2e Builds an SDK-based runtime image and optionally bundles the CLI from source for Docker E2Es.
tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2ETestHelpers.cs Adds Docker install-mode detection, container terminal creation, prompt setup, and CLI installation helpers.
tests/Aspire.Cli.EndToEnd.Tests/DockerStagingChannelTests.cs New Docker-backed test for aspire config staging-channel behavior.
tests/Aspire.Cli.EndToEnd.Tests/DockerSmokeTests.cs New Docker-backed smoke test verifying aspire --version.
Directory.Packages.props Updates Hex1b-related package versions.
.vscode/mcp.json Updates Hex1b MCP server tool version for VS Code config.
.dockerignore Reduces Docker build context size for the new Docker-based test image.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 5, 2026

🎬 CLI E2E Test Recordings

The following terminal recordings are available for commit 1d73faa:

Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View Recording
AddPackageWhileAppHostRunningDetached ▶️ View Recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View Recording
AgentInitCommand_DefaultSelection_InstallsSkillOnly ▶️ View Recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View Recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View Recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View Recording
Banner_DisplayedOnFirstRun ▶️ View Recording
Banner_DisplayedWithExplicitFlag ▶️ View Recording
CreateAndDeployToDockerCompose ▶️ View Recording
CreateAndDeployToDockerComposeInteractive ▶️ View Recording
CreateAndPublishToKubernetes ▶️ View Recording
CreateAndRunAspireStarterProject ▶️ View Recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View Recording
CreateAndRunJsReactProject ▶️ View Recording
CreateAndRunPythonReactProject ▶️ View Recording
CreateAndRunTypeScriptStarterProject ▶️ View Recording
CreateEmptyAppHostProject ▶️ View Recording
CreateStartAndStopAspireProject ▶️ View Recording
CreateTypeScriptAppHostWithViteApp ▶️ View Recording
DescribeCommandResolvesReplicaNames ▶️ View Recording
DescribeCommandShowsRunningResources ▶️ View Recording
DetachFormatJsonProducesValidJson ▶️ View Recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View Recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View Recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View Recording
LogsCommandShowsResourceLogs ▶️ View Recording
PsCommandListsRunningAppHost ▶️ View Recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View Recording
RestoreGeneratesSdkFiles ▶️ View Recording
SecretCrudOnDotNetAppHost ▶️ View Recording
SecretCrudOnTypeScriptAppHost ▶️ View Recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View Recording
StopAllAppHostsFromAppHostDirectory ▶️ View Recording
StopAllAppHostsFromUnrelatedDirectory ▶️ View Recording
StopNonInteractiveMultipleAppHostsShowsError ▶️ View Recording
StopNonInteractiveSingleAppHost ▶️ View Recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View Recording
TypeScriptAppHostWithProjectReferenceIntegration ▶️ View Recording

📹 Recordings uploaded automatically from CI run #22887739309

@@ -0,0 +1,101 @@
# Multi-stage Dockerfile for Aspire CLI E2E testing (.NET variant).
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be in a shared location for use by CLI E2E and deployment E2E?

And description and contents made generic for both.

@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented Mar 9, 2026

I tried it on Windows and it still fails. I don't know whether that's expected at this stage or not.

AI conversation:

User: Run AgentCommands_AllHelpOutputs_AreCorrect test

GitHub Copilot:

Searched for text AgentCommands_AllHelpOutputs_AreCorrect, 1 result

Ran terminal command: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method "*.AgentCommands_AllHelpOutputs_AreCorrect" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

Ran terminal command: echo "done"
Completed with input: echo "done"

The test timed out (304s). Let me check the test to understand what it does and whether it needs special setup.

Read , lines 1 to 100

Read , lines 100 to 130

This is a CLI end-to-end test that runs inside Docker. It timed out, likely because it requires Docker to be running and takes a long time to set up the Docker environment. Let me check if there are traits on this test.

Searched for regex OuterloopTest|QuarantinedTest|ActiveIssue (**/tests/Aspire.Cli.EndToEnd.Tests/AgentCommandTests.cs), no results

The test isn't quarantined or marked as outerloop. The timeout was hit because the 5-minute default wasn't enough for a Docker-based E2E test. Let me re-run it with a longer timeout.

Ran terminal command: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method ".AgentCommands_AllHelpOutputs_AreCorrect" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
Completed with input: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method "
.AgentCommands_AllHelpOutputs_AreCorrect" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

The test failed. Let me check the test results log for details.

Ran terminal command: Get-Content "C:\Development\Source\aspire\artifacts\bin\Aspire.Cli.EndToEnd.Tests\Debug\net10.0\TestResults\Aspire.Cli.EndToEnd.Tests_net10.0_x64.log" -Tail 80

Read , lines 1 to 100

The test failed during Docker container setup - it timed out waiting for the container to become ready (WaitUntil timed out after 00:01:00 waiting for: s => waitingForContainerReady.Search(s).Count > 0). The terminal output is empty, suggesting Docker may not be running or there's a connectivity issue.

This is a Docker-based CLI end-to-end test that requires a working Docker environment. The failure is at the PrepareDockerEnvironment step (before any actual test logic runs), indicating Docker isn't available or the container couldn't start.

Is Docker running on your machine? You can verify with docker info. This test requires Docker to spin up a container to execute CLI commands inside it.

User: check docker is running

GitHub Copilot: Ran terminal command: docker info 2>&1 | Select-Object -First 20

Docker is running. Client version 29.2.1 with the desktop-linux context. The test failure was likely a transient issue with the container startup. Want me to re-run the test?

User: re-run the test

GitHub Copilot: Ran terminal command: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method ".AgentCommands_AllHelpOutputs_AreCorrect" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
Completed with input: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method "
.AgentCommands_AllHelpOutputs_AreCorrect" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

Same failure. Let me check the log for more details and also look at the Docker environment setup code.

Ran terminal command: Get-Content "C:\Development\Source\aspire\artifacts\bin\Aspire.Cli.EndToEnd.Tests\Debug\net10.0\TestResults\Aspire.Cli.EndToEnd.Tests_net10.0_x64.log" -Tail 60

The terminal output is completely empty (all blank lines), meaning the Docker container never produced any output. Let me investigate the Docker setup code to understand what container is being used and what's happening.

Search complete: Find Docker test helper code

Searched for files matching **/*CliE2ETestHelpers*, 1 match

Searched for regex PrepareDockerEnvironment|CreateDockerTestTerminal|DetectDockerInstallMode (**/tests/Aspire.Cli.EndToEnd.Tests/Helpers/CliE2ETestHelpers.cs), 3 results

Read , lines 468 to 517

Read , lines 519 to 731

Read , lines 460 to 650

Read , lines 650 to 700

The test is timing out waiting for the Docker container bash prompt (# ). The terminal is completely empty, suggesting the Docker container isn't starting. Let me check if the Docker image can be built and look at the Dockerfile.

Ran terminal command: Get-Content "c:\Development\Source\aspire\tests\Aspire.Cli.EndToEnd.Tests\docker\Dockerfile.e2e"

The Dockerfile looks fine. The issue is likely that Docker image building is failing or taking too long. Let me try to manually build the image and see what happens.

Ran terminal command: docker build --build-arg SKIP_SOURCE_BUILD=true -f tests/Aspire.Cli.EndToEnd.Tests/docker/Dockerfile.e2e -t aspire-e2e-test . 2>&1 | Select-Object -Last 30

The Docker image builds successfully (all cached). Let me check if the container starts correctly.

Ran terminal command: docker run --rm -it aspire-e2e-test echo "Container works"

The container works fine. The issue might be with the Hex1b terminal automation library and how it interacts with Docker on Windows. Let me check if there's a test recording to see what's happening.

Ran terminal command: Get-ChildItem -Path "c:\Development\Source\aspire\artifacts\bin\Aspire.Cli.EndToEnd.Tests\Debug\net10.0\TestResults" -Filter "AgentCommand" -Recurse | Select-Object FullName, Length, LastWriteTime

Ran terminal command: Get-ChildItem -Path "c:\Development\Source\aspire\artifacts" -Filter "recording" -Recurse -ErrorAction SilentlyContinue | Select-Object FullName, Length, LastWriteTime | Select-Object -First 10

No recordings found. Let me check the GetTestResultsRecordingPath method and see if there's additional diagnostic output somewhere. But more importantly, the terminal output was completely blank — the Hex1b library couldn't even see the bash prompt in the Docker container. This suggests a compatibility issue with Hex1b and Docker on this machine.

Let me check if there are any other E2E tests that pass to rule out a general Hex1b/Docker issue. Let me also look at any environment-specific configuration.

Ran terminal command: git branch --show-current

Ran terminal command: git log --oneline -5

The branch is aspire-hex1b-update, which is actively working on E2E test infrastructure. The test failure could be related to this branch's changes. Let me check if there might be an issue with how the Hex1b terminal works on Windows with Docker — the terminal output was completely empty (no bash prompt at all).

Let me look at whether this test is expected to work locally on Windows, or if it's mainly a CI test.

Ran terminal command: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method ".DoctorCommand_ProducesExpectedOutput" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
Completed with input: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method "
.DoctorCommand_ProducesExpectedOutput" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

No test matched that filter (0 total). Let me find the right name.

Searched for regex public async Task \w+.*\(\) (**/tests/Aspire.Cli.EndToEnd.Tests/**/*.cs), 20 results

Let me try a simpler test — the DoctorCommandTests:

Searched for text DoctorCommand (**/tests/Aspire.Cli.EndToEnd.Tests/**/*.cs), 4 results

Ran terminal command: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method ".DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"
Completed with input: dotnet test tests/Aspire.Cli.EndToEnd.Tests/Aspire.Cli.EndToEnd.Tests.csproj -- --filter-method "
.DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

All Docker-based E2E tests fail with the same issue — they time out at 60 seconds waiting for the Docker container's bash prompt. This is a systemic issue with the Hex1b terminal library and Docker on this machine, not specific to AgentCommands_AllHelpOutputs_AreCorrect.

The problem is that the Hex1b library starts a Docker container and expects to see # (the root bash prompt) in the virtual terminal within 60 seconds, but the terminal output is completely empty. This could be:

  1. Hex1b's Docker integration on Windows — the library may use PTY features that don't work correctly with Docker Desktop on Windows
  2. A Hex1b version issue — the branch is named aspire-hex1b-update, suggesting an ongoing Hex1b library update that may have introduced this

Let me check which Hex1b version is being used.

Searched for text Hex1b (**/Directory.Packages.props), 3 results

The Hex1b Docker E2E tests are failing across the board on your Windows machine — all Docker-based tests time out at 60 seconds with an empty terminal, meaning the Hex1b library (v0.105.0) can't establish communication with the Docker container's PTY. This is not specific to the AgentCommands_AllHelpOutputs_AreCorrect test; the DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted test fails identically.

Since the branch is aspire-hex1b-update, this may be a known issue with the Hex1b library's Docker terminal support on Windows. These tests likely need to run on Linux (e.g., in CI) rather than locally on Windows with Docker Desktop.

@mitchdenny mitchdenny force-pushed the aspire-hex1b-update branch from 9391c92 to b114f95 Compare March 9, 2026 19:28
@mitchdenny
Copy link
Copy Markdown
Member Author

@JamesNK testing it on a devbox now and it looks like the timeout of 5 minutes isn't long enough for Windows (half the resources are being taken by defender:
image

@mitchdenny
Copy link
Copy Markdown
Member Author

Actually could be a bug in Hex1b.

Mitch Denny and others added 6 commits March 10, 2026 15:53
Update Hex1b, Hex1b.McpServer, and Hex1b.Tool from 0.97.0 to 0.105.0
in Directory.Packages.props. Also update .vscode/mcp.json MCP server
reference from 0.47.0 to 0.105.0.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Uses Hex1b's WithDockerContainer API to run the test inside an
isolated Docker container. The test installs the GA release of Aspire
CLI from aspire.dev/install.sh and verifies it reports a version.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Introduce a multi-stage Dockerfile and environment-adaptive test helpers
for portable E2E CLI testing across local dev, CI, and PR environments.

- Dockerfile.e2e: Build stage compiles CLI from source (local dev),
  runtime stage provides the test environment. SKIP_SOURCE_BUILD arg
  allows CI to skip source compilation and use pre-built artifacts.
- CliE2ETestHelpers: New DockerInstallMode enum, DetectDockerInstallMode,
  CreateDockerTestTerminal, PrepareDockerEnvironment, and
  InstallAspireCliInDocker helpers.
- DockerSmokeTests: Rewritten to use the Dockerfile-based approach with
  automatic environment detection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Rewrite Dockerfile.e2e to copy the entire repo and run the full build
pipeline (restore, build, pack, bundle) including native AOT compilation.
Install clang and zlib1g-dev for the AOT toolchain. Add .dockerignore
to exclude artifacts/, .dotnet/, .git/, and IDE files from the build
context. Update DetectDockerInstallMode to check for bundle archives.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bake get-aspire-cli.sh and get-aspire-cli-pr.sh into the runtime stage
at /opt/aspire-scripts/ so tests can install the CLI from GA or PR
artifacts without downloading scripts from raw.githubusercontent.com.
Update InstallAspireCliInDocker to use the local scripts.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Port StagingChannelTests to run inside a Docker container using the
Hex1b WithDockerContainer API. The test exercises aspire config
set/get/delete for staging channel settings entirely within an
ephemeral container, eliminating cleanup concerns.

Also extract GetRepoRoot() to CliE2ETestHelpers for reuse across
Docker-based test classes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mitch Denny and others added 18 commits March 10, 2026 15:53
The get-aspire-cli-pr.sh script needs gh CLI to download PR artifacts
from GitHub Actions. Install gh in the Dockerfile runtime stage and
forward GH_TOKEN, GITHUB_PR_NUMBER, GITHUB_PR_HEAD_SHA to the
container when running in PullRequest mode.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Dockerfile.e2e: Add Node.js 22, Python 3, docker.io CLI to runtime stage
- Dockerfile.e2e-polyglot: New polyglot variant without .NET SDK
- Add DockerfileVariant enum (DotNet, Polyglot)
- CreateDockerTestTerminal: Accept variant, mountDockerSocket, workspace params
- PrepareDockerEnvironment: Accept optional workspace for volume mount
- Both Dockerfiles create /workspace mount point with WORKDIR set

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
All non-deployment CLI E2E tests now run inside Docker containers via
Hex1b's WithDockerContainer API. This makes tests portable across local
dev machines and CI environments.

Changes:
- Group A (CLI-only): BannerTests, DoctorCommandTests, StagingChannelTests,
  EmptyAppHostTemplateTests, SecretDotNetAppHostTests, PlaywrightCliInstallTests,
  AgentCommandTests, CentralPackageManagementTests
- Group B (need Docker socket): SmokeTests, BundleSmokeTests, DescribeCommandTests,
  LogsCommandTests, PsCommandTests, StartStopTests, StopNonInteractiveTests,
  WaitCommandTests, MultipleAppHostTests
- Group C (Node.js): JsReactTemplateTests, PythonReactTemplateTests
- Group D (polyglot): SecretTypeScriptAppHostTests, TypeScriptPolyglotTests,
  TypeScriptStarterTemplateTests, ProjectReferenceTests
- McpDocsE2ETests: Updated to use CliE2ETestHelpers.GetRepoRoot()
- Added ToContainerPath helper for host-to-container path mapping

Excluded: DockerDeploymentTests, KubernetesPublishTests (deployment tests)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
DockerSmokeTests and DockerStagingChannelTests were early proof-of-concept
tests. Now that SmokeTests and StagingChannelTests are themselves Docker-based,
these standalone files are redundant.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two fixes for CI test failures:

1. Mount workspace at /workspace/{guid} instead of /workspace so that
   the container directory name matches workspace.WorkspaceRoot.Name.
   This fixes tests that match 'Enter the project name ({name}):' patterns.

2. Add 'dotnet dev-certs https' to DoctorCommandTests since Docker
   containers don't have dev certs pre-generated.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1. Add libicu74 to polyglot Dockerfile - native AOT CLI requires ICU
   for globalization support (fixes TypeScript/Polyglot test crashes)

2. Fix DoctorCommandTests pattern - match 'is not trusted' instead of
   'partially trusted' (matches actual aspire doctor output wording)

3. Set umask 000 in PrepareDockerEnvironment - files created inside the
   container (as root) need to be writable by host-side ExecuteCallback
   (fixes DescribeCommandTests permission denied)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1. DoctorCommandTests: Use 'dotnet dev-certs https --trust' to generate
   AND trust the dev cert, enabling the SSL_CERT_DIR trust detection test.

2. ProjectReferenceTests, TypeScriptStarterTemplateTests: Switch from
   Polyglot to DotNet variant since these tests reference .NET projects
   or use templates that require the .NET SDK.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1. DoctorCommandTests: Revert pattern to 'partially trusted' — with
   --trust the cert IS trusted, so without SSL_CERT_DIR the expected
   output is 'partially trusted' (not 'is not trusted').

2. WaitCommandTests: Increase timeout from 120s to 300s since
   Docker-in-Docker container startup is significantly slower.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The aspire wait command times out waiting for resources in nested
Docker environments. The inner containers (redis, apiservice,
webfrontend) are too slow to start in Docker-in-Docker on CI.

Filed tracking issue: #14993

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The agent init chaining feature (aspire new → agent init prompt) is only
present in source-built CLI, not GA releases. DeclineAgentInitPrompt now
accepts a SequenceCounter and handles both cases:
- CLI with agent init: waits for prompt, declines, waits for success
- CLI without agent init: detects success prompt directly, handles the
  harmless 'n' command at bash, adjusts counter accordingly

This replaces the separate .DeclineAgentInitPrompt().WaitForSuccessPrompt()
pattern across all 28 callsites with .DeclineAgentInitPrompt(counter).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Convert TypeScriptCodegenValidationTests to use Docker container
  (CreateDockerTestTerminal with Polyglot variant) like all other
  CLI E2E tests
- Fix Dockerfile COPY wildcard that fails when SKIP_SOURCE_BUILD=true:
  copy the bundle directory instead and gate extraction conditionally

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Move Dockerfile.e2e and Dockerfile.e2e-polyglot to tests/Shared/Docker/
  for use by both CLI E2E and deployment E2E tests
- Add ITestOutputHelper to CreateDockerTestTerminal and log configuration
  (install mode, variant, workspace, dimensions, recording path)
- Convert AspireAddPackageVersionToDirectoryPackagesProps test to Docker
- Set ASPIRE_PLAYGROUND/TERM/dotnet env vars in PrepareDockerEnvironment
  for all Docker install modes (not just PullRequest)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add nuget.org as a package source for Hex1b packages and bump from
0.105.0 to 0.111.0. This version includes a fix for Docker build
deadlocks on Windows (mitchdenny/hex1b#225).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Switch Hex1b package source to GitHub Packages (mitchdenny/hex1b PR #226)
to test the cmd.exe wrapper fix for Docker's 'not a TTY' error on Windows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Updated from the cmd.exe wrapper version to the WSL2 bridge version
which correctly resolves the Docker 'not a TTY' error on Windows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Includes WSL2 Docker TTY bridge and 5-minute docker build timeout.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The Docker image build can take over a minute, so 60s may not be
enough for the container to start and show the bash prompt.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Revert the 0.111.0/0.112.0 preview package updates and NuGet.config
changes. The Windows Docker TTY fix needs more work; keeping the
existing version for now.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@mitchdenny mitchdenny force-pushed the aspire-hex1b-update branch from fcc3a9b to 1d73faa Compare March 10, 2026 04:53
@mitchdenny
Copy link
Copy Markdown
Member Author

@JamesNK sadly I don't think that we are going to be able to get past the windows issues. I just tried a whole host of approaches, none of which worked. Ultimately, we are slaves to the ConPty limitations on Windows.

@JamesNK
Copy link
Copy Markdown
Member

JamesNK commented Mar 10, 2026

🥀

@mitchdenny
Copy link
Copy Markdown
Member Author

🥀

The good news is that WSL will work locally.

/// <param name="height">Terminal height in rows.</param>
/// <param name="testName">The test name for the recording file path.</param>
/// <returns>A configured <see cref="Hex1bTerminal"/>. Caller is responsible for disposal.</returns>
internal static Hex1bTerminal CreateDockerTestTerminal(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be on shared file?

/// <param name="builder">The sequence builder.</param>
/// <param name="counter">The sequence counter.</param>
/// <param name="workspace">Optional workspace — when provided, cd into /workspace.</param>
internal static Hex1bTerminalInputSequenceBuilder PrepareDockerEnvironment(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shared file?

/// For <see cref="DockerInstallMode.GaRelease"/>, downloads and installs from aspire.dev.
/// For <see cref="DockerInstallMode.PullRequest"/>, uses the PR install script.
/// </summary>
internal static Hex1bTerminalInputSequenceBuilder InstallAspireCliInDocker(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shared file?

@mitchdenny mitchdenny merged commit 98933c6 into release/13.2 Mar 10, 2026
494 of 497 checks passed
@mitchdenny mitchdenny deleted the aspire-hex1b-update branch March 10, 2026 08:53
@dotnet-policy-service dotnet-policy-service bot added this to the 13.2 milestone Mar 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants