Skip to content

Handle missing certutil during cert cleanup - #18580

Merged
David Negstad (danegsta) merged 5 commits into
mainfrom
danegsta-certutil-cleanup-warning
Jul 1, 2026
Merged

Handle missing certutil during cert cleanup#18580
David Negstad (danegsta) merged 5 commits into
mainfrom
danegsta-certutil-cleanup-warning

Conversation

@danegsta

Copy link
Copy Markdown
Member

Description

Linux certificate cleanup should not fail just because certutil is unavailable. NSS database cleanup is best effort, so this change logs the missing tool and continues with the rest of certificate cleanup instead of treating browser cleanup as a hard failure.

This also updates aspire doctor on Linux to report a warning when certutil is missing, since Firefox and Chromium browser certificate trust may be incomplete without NSS tools. The warning uses localized CLI resources and the generated XLF files were updated.

User-facing usage

When certutil is missing on Linux, aspire certs clean can still complete cleanup for the available certificate stores. aspire doctor now reports a warning explaining that browser certificate trust may be incomplete and suggests installing the distribution NSS tools package, for example libnss3-tools.

Validation:

dotnet test --project tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj --no-launch-profile -- --filter-class "*.DevCertsCheckTests" --filter-class "*.UnixCertificateManagerTests" --filter-class "*.NativeCertificateToolRunnerTests" --filter-class "*.CertificatesCommandTests" --filter-not-trait "quarantined=true" --filter-not-trait "outerloop=true"

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
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Treat NSS cleanup as best effort when certutil is unavailable so certificate cleanup can continue removing the development certificate. Add a Linux doctor warning for missing certutil and tests for both diagnostics and cleanup behavior.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings June 30, 2026 23:13
@github-actions

Copy link
Copy Markdown
Contributor

🚀 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/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 18580

Or

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

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR makes Linux certificate cleanup resilient to a missing certutil tool. Previously, when certutil was unavailable, UnixCertificateManager.RemoveCertificateFromTrustedRoots treated each NSS database as an untrust failure and threw an InvalidOperationException, causing aspire certs clean to fail. Since NSS (Firefox/Chromium) cleanup is best-effort, the change now logs the missing tool and skips the NSS loop without flagging a hard failure. It also surfaces a localized warning in aspire doctor on Linux when certutil is missing, and extracts the certutil command name plus a reusable IsCommandAvailable helper into CertificateHelpers.

Changes:

  • Skip NSS cleanup (instead of failing) in RemoveCertificateFromTrustedRoots when certutil is unavailable.
  • Add a Linux-only aspire doctor warning (dev-certs-certutil) with localized message/details/fix and updated .resx/.Designer.cs/.xlf resources.
  • Centralize CertUtilCommand and add a static IsCommandAvailable(command, environment) helper in CertificateHelpers, plus regression and doctor-check tests.

Reviewed changes

Copilot reviewed 19 out of 20 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/Aspire.Cli/Certificates/CertificateGeneration/UnixCertificateManager.cs Core behavior change: skip NSS untrust loop when certutil missing; reference shared CertificateHelpers.CertUtilCommand.
src/Aspire.Cli/Certificates/CertificateHelpers.cs Adds CertUtilCommand const and static IsCommandAvailable PATH-scan helper.
src/Aspire.Cli/Utils/EnvironmentChecker/DevCertsCheck.cs Adds Linux dev-certs-certutil warning result when certutil is absent.
src/Aspire.Cli/Resources/DoctorCommandStrings.resx New message/details/fix strings for the missing-certutil warning.
src/Aspire.Cli/Resources/DoctorCommandStrings.Designer.cs Generated accessors for the new strings.
src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.*.xlf (13 locales) XLF entries (state="new") for the new strings.
tests/Aspire.Cli.Tests/Certificates/UnixCertificateManagerTests.cs New regression test verifying removal does not throw when certutil/NSS dbs are present but certutil is missing.
tests/Aspire.Cli.Tests/Utils/DevCertsCheckTests.cs Tests that the doctor warning is emitted only when certutil is missing on Linux.
Files not reviewed (1)
  • src/Aspire.Cli/Resources/DoctorCommandStrings.Designer.cs: Generated file

@danegsta

Copy link
Copy Markdown
Member Author

PR Testing Report

PR Information

Artifact Version Verification

  • Expected Commit: 68a0ac0
  • Installed Version: 13.5.0-pr.18580.g68a0ac06
  • Status: ✅ Verified

Changes Analyzed

Files Changed

  • src/Aspire.Cli/Certificates/CertificateGeneration/UnixCertificateManager.cs - Linux cert trust/cleanup handling for NSS certutil availability
  • src/Aspire.Cli/Certificates/CertificateHelpers.cs - shared certutil command/path availability helper
  • src/Aspire.Cli/Utils/EnvironmentChecker/DevCertsCheck.cs - Linux doctor warning for missing certutil
  • src/Aspire.Cli/Resources/DoctorCommandStrings.* and XLF files - localized warning text
  • tests/Aspire.Cli.Tests/Certificates/UnixCertificateManagerTests.cs and tests/Aspire.Cli.Tests/Utils/DevCertsCheckTests.cs - regression/unit coverage

Change Categories

  • CLI changes detected
  • Hosting integration changes
  • Dashboard changes
  • CI infrastructure changes (GitHub Actions / Azure DevOps)
  • VS Code extension changes
  • Test changes

Test Scenarios Executed

Scenario 1: Dogfood artifact verification

Objective: Verify the tested CLI came from PR #18580 at the expected head commit.
Coverage Type: Artifact verification
Status: ✅ Passed

Steps:

  1. Installed the dogfood PR CLI in the repo container runner.
  2. Ran /workspace/.aspire/dogfood/pr-18580/bin/aspire --version.
  3. Confirmed the output contains the PR head commit.

Evidence:

  • Install log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.AFmPoJRO7K/install.log
  • Version log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.AFmPoJRO7K/version.log

Observations:

  • Installed version: 13.5.0-pr.18580.g68a0ac06

Scenario 2: Basic CLI/template smoke

Objective: Verify the PR CLI and PR package hive can create a fresh Aspire project.
Coverage Type: Happy path
Status: ✅ Passed

Steps:

  1. Created a fresh aspire-empty C# app in /workspace/scenario-smoke.
  2. Passed --source and --version for the PR hive/version.
  3. Verified the generated file-based AppHost exists at apphost.cs.

Evidence:

  • Scenario log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.AFmPoJRO7K/scenario-smoke.log

Observations:

  • Project creation completed successfully using the PR CLI and PR hive.

Scenario 3: Missing certutil cleanup regression

Objective: Verify Linux certificate cleanup treats missing certutil as best effort when NSS DB paths exist.
Coverage Type: Unhappy path
Status: ✅ Passed

Steps:

  1. Created isolated NSS DB and OpenSSL trust directories under /workspace/scenario-cert-clean.
  2. Confirmed certutil was unavailable in the container.
  3. Ran aspire certs trust to create/trust a development certificate.
  4. Ran aspire certs clean and verified the command exited successfully.

Evidence:

  • Scenario log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.AFmPoJRO7K/scenario-clean-missing-certutil.log

Observations:

  • Cleanup completed successfully while certutil was unavailable.

Expected Unhappy-Path Outcome: Cleanup remains successful because NSS cleanup is best effort.


Scenario 4: Doctor missing certutil warning

Objective: Verify Linux doctor reports a warning when certutil is unavailable.
Coverage Type: Unhappy path
Status: ✅ Passed

Steps:

  1. Created isolated NSS DB and OpenSSL trust directories under /workspace/scenario-doctor.
  2. Confirmed certutil was unavailable in the container.
  3. Ran aspire doctor and inspected the output.
  4. Verified the output contains the certutil warning text.

Evidence:

  • Scenario log: /var/folders/97/44fp_02d4kd90s9p6sy_jwgh0000gn/T/aspire-pr-test-XXXXXX.AFmPoJRO7K/scenario-doctor-missing-certutil.log

Observations:

  • Doctor output included: certutil is not available; browser certificate trust may be incomplete.
  • The doctor command also reported an unrelated failed .NET SDK prerequisite because the minimal test container does not include the .NET SDK. The certutil check itself appeared as a warning, not a failed check.

Expected Unhappy-Path Outcome: Missing certutil is reported as a warning, not as a failed certificate check.

Summary

Scenario Status Notes
Dogfood artifact verification ✅ Passed Version matched PR head
Basic CLI/template smoke ✅ Passed aspire-empty C# file-based AppHost created
Missing certutil cleanup regression ✅ Passed cleanup succeeded with certutil unavailable
Doctor missing certutil warning ✅ Passed warning emitted; unrelated SDK prerequisite failed in minimal container

Overall Result

✅ PR VERIFIED

Recommendations

  • None.

Comment thread src/Aspire.Cli/Certificates/CertificateHelpers.cs Outdated

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.

One suggestion to reduce code duplication in the PATH-scanning logic.

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.

One suggestion to reduce code duplication in the PATH-scanning logic.

Comment thread src/Aspire.Cli/Certificates/CertificateHelpers.cs Outdated
Refactor cert command availability checks to use the shared CertificateHelpers implementation for both doctor warnings and Unix certificate management.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

This comment has been minimized.

@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot AI review requested due to automatic review settings July 1, 2026 18:10
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 20 out of 21 changed files in this pull request and generated 2 comments.

Files not reviewed (1)
  • src/Aspire.Cli/Resources/DoctorCommandStrings.Designer.cs: Generated file

Comment thread src/Shared/PathLookupHelper.cs
Comment thread src/Aspire.Cli/Utils/EnvironmentChecker/DevCertsCheck.cs
David Negstad (danegsta) and others added 2 commits July 1, 2026 11:19
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

This comment has been minimized.

Copilot AI review requested due to automatic review settings July 1, 2026 18:26
@github-actions

github-actions Bot commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

Tests selector (audit mode)

The full test matrix and all jobs still run in audit mode. The tests and jobs below are what selective CI would run under enforcement.

98 / 98 test projects · 7 jobs, from 22 changed files.

Selected test projects (98 / 98)

Aspire.Acquisition.Tests, Aspire.Azure.AI.Inference.Tests, Aspire.Azure.AI.OpenAI.Tests, Aspire.Azure.Data.Tables.Tests, Aspire.Azure.Messaging.EventHubs.Tests, Aspire.Azure.Messaging.ServiceBus.Tests, Aspire.Azure.Messaging.WebPubSub.Tests, Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL.Tests, Aspire.Azure.Npgsql.Tests, Aspire.Azure.Search.Documents.Tests, Aspire.Azure.Security.KeyVault.Tests, Aspire.Azure.Storage.Blobs.Tests, Aspire.Azure.Storage.Files.DataLake.Tests, Aspire.Azure.Storage.Queues.Tests, Aspire.Cli.EndToEnd.Tests, Aspire.Cli.Tests, Aspire.Confluent.Kafka.Tests, Aspire.Dashboard.Components.Tests, Aspire.Dashboard.Tests, Aspire.Deployment.EndToEnd.Tests, Aspire.EndToEnd.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.EntityFrameworkCore.Tests, Aspire.Hosting.Foundry.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.GitHub.Models.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests, Aspire.Hosting.MongoDB.Tests, Aspire.Hosting.MySql.Tests, Aspire.Hosting.Nats.Tests, Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests, Aspire.Hosting.Orleans.Tests, Aspire.Hosting.PostgreSQL.Tests, Aspire.Hosting.Python.Tests, Aspire.Hosting.Qdrant.Tests, Aspire.Hosting.RabbitMQ.Tests, Aspire.Hosting.Redis.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Sdk.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Hosting.Valkey.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Keycloak.Authentication.Tests, Aspire.Managed.Tests, Aspire.Microsoft.Azure.Cosmos.Tests, Aspire.Microsoft.Azure.StackExchangeRedis.Tests, Aspire.Microsoft.Data.SqlClient.Tests, Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests, Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests, Aspire.Microsoft.Extensions.Configuration.AzureAppConfiguration.Tests, Aspire.Milvus.Client.Tests, Aspire.MongoDB.Driver.Tests, Aspire.MongoDB.Driver.v2.Tests, Aspire.MongoDB.EntityFrameworkCore.Tests, Aspire.MySqlConnector.Tests, Aspire.NATS.Net.Tests, Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.Tests, Aspire.Npgsql.Tests, Aspire.OpenAI.Tests, Aspire.Oracle.EntityFrameworkCore.Tests, Aspire.Playground.Tests, Aspire.Pomelo.EntityFrameworkCore.MySql.Tests, Aspire.Qdrant.Client.Tests, Aspire.RabbitMQ.Client.Tests, Aspire.RabbitMQ.Client.v6.Tests, Aspire.Seq.Tests, Aspire.StackExchange.Redis.DistributedCaching.Tests, Aspire.StackExchange.Redis.OutputCaching.Tests, Aspire.StackExchange.Redis.Tests, Aspire.Templates.Tests, Aspire.TerminalHost.Tests, ConfigurationSchemaGenerator.Tests, Infrastructure.Tests, QuarantineTools.Tests

Selected jobs (7)

cli-starter, deployment-e2e, extension-e2e, homebrew-installer, polyglot, typescript-api-compat, winget-installer


How these were chosen — grouped by what changed

⚠️ 97 of the 98 selected test projects come from a single change — src/Shared/PathLookupHelper.cs.

🔧 src/Shared/PathLookupHelper.cs (changed source)
97 via the project graph

show 97

Aspire.Acquisition.Tests, Aspire.Azure.AI.Inference.Tests, Aspire.Azure.AI.OpenAI.Tests, Aspire.Azure.Data.Tables.Tests, Aspire.Azure.Messaging.EventHubs.Tests, Aspire.Azure.Messaging.ServiceBus.Tests, Aspire.Azure.Messaging.WebPubSub.Tests, Aspire.Azure.Npgsql.EntityFrameworkCore.PostgreSQL.Tests, Aspire.Azure.Npgsql.Tests, Aspire.Azure.Search.Documents.Tests, Aspire.Azure.Security.KeyVault.Tests, Aspire.Azure.Storage.Blobs.Tests, Aspire.Azure.Storage.Files.DataLake.Tests, Aspire.Azure.Storage.Queues.Tests, Aspire.Cli.EndToEnd.Tests, Aspire.Confluent.Kafka.Tests, Aspire.Dashboard.Components.Tests, Aspire.Dashboard.Tests, Aspire.Deployment.EndToEnd.Tests, Aspire.EndToEnd.Tests, Aspire.Hosting.Analyzers.Tests, Aspire.Hosting.Azure.Kubernetes.Tests, Aspire.Hosting.Azure.Kusto.Tests, Aspire.Hosting.Azure.Tests, Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Browsers.Tests, Aspire.Hosting.CodeGeneration.Go.Tests, Aspire.Hosting.CodeGeneration.Java.Tests, Aspire.Hosting.CodeGeneration.Python.Tests, Aspire.Hosting.CodeGeneration.Rust.Tests, Aspire.Hosting.CodeGeneration.TypeScript.Tests, Aspire.Hosting.Containers.Tests, Aspire.Hosting.DevTunnels.Tests, Aspire.Hosting.Docker.Tests, Aspire.Hosting.DotnetTool.Tests, Aspire.Hosting.EntityFrameworkCore.Tests, Aspire.Hosting.Foundry.Tests, Aspire.Hosting.Garnet.Tests, Aspire.Hosting.GitHub.Models.Tests, Aspire.Hosting.Go.Tests, Aspire.Hosting.JavaScript.Tests, Aspire.Hosting.Kafka.Tests, Aspire.Hosting.Keycloak.Tests, Aspire.Hosting.Kubernetes.Tests, Aspire.Hosting.Maui.Tests, Aspire.Hosting.Milvus.Tests, Aspire.Hosting.MongoDB.Tests, Aspire.Hosting.MySql.Tests, Aspire.Hosting.Nats.Tests, Aspire.Hosting.OpenAI.Tests, Aspire.Hosting.Oracle.Tests, Aspire.Hosting.Orleans.Tests, Aspire.Hosting.PostgreSQL.Tests, Aspire.Hosting.Python.Tests, Aspire.Hosting.Qdrant.Tests, Aspire.Hosting.RabbitMQ.Tests, Aspire.Hosting.Redis.Tests, Aspire.Hosting.RemoteHost.Tests, Aspire.Hosting.Sdk.Tests, Aspire.Hosting.Seq.Tests, Aspire.Hosting.SqlServer.Tests, Aspire.Hosting.Testing.Tests, Aspire.Hosting.Tests, Aspire.Hosting.Valkey.Tests, Aspire.Hosting.Yarp.Tests, Aspire.Keycloak.Authentication.Tests, Aspire.Managed.Tests, Aspire.Microsoft.Azure.Cosmos.Tests, Aspire.Microsoft.Azure.StackExchangeRedis.Tests, Aspire.Microsoft.Data.SqlClient.Tests, Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests, Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests, Aspire.Microsoft.Extensions.Configuration.AzureAppConfiguration.Tests, Aspire.Milvus.Client.Tests, Aspire.MongoDB.Driver.Tests, Aspire.MongoDB.Driver.v2.Tests, Aspire.MongoDB.EntityFrameworkCore.Tests, Aspire.MySqlConnector.Tests, Aspire.NATS.Net.Tests, Aspire.Npgsql.EntityFrameworkCore.PostgreSQL.Tests, Aspire.Npgsql.Tests, Aspire.OpenAI.Tests, Aspire.Oracle.EntityFrameworkCore.Tests, Aspire.Playground.Tests, Aspire.Pomelo.EntityFrameworkCore.MySql.Tests, Aspire.Qdrant.Client.Tests, Aspire.RabbitMQ.Client.Tests, Aspire.RabbitMQ.Client.v6.Tests, Aspire.Seq.Tests, Aspire.StackExchange.Redis.DistributedCaching.Tests, Aspire.StackExchange.Redis.OutputCaching.Tests, Aspire.StackExchange.Redis.Tests, Aspire.Templates.Tests, Aspire.TerminalHost.Tests, ConfigurationSchemaGenerator.Tests, Infrastructure.Tests, QuarantineTools.Tests

📦 affected project Aspire.Cli
1 test: Aspire.Cli.EndToEnd.Tests

📦 affected project Aspire.Hosting
1 test: Aspire.EndToEnd.Tests

🧪 tests/Aspire.Cli.Tests/Certificates/UnixCertificateManagerTests.cs (changed test)
1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Cli.Tests/Utils/DevCertsCheckTests.cs (changed test)
1 directly: Aspire.Cli.Tests

🧪 tests/Aspire.Cli.Tests/Utils/TestEnvironment.cs (changed test)
1 directly: Aspire.Cli.Tests

Job reasons

Job Triggered by
cli-starter • affected project Aspire.Cli
• selected test Aspire.Cli.Tests
• selected test Aspire.Acquisition.Tests
deployment-e2e affected project Aspire.Cli
extension-e2e src/Aspire.Cli/Certificates/CertificateGeneration/UnixCertificateManager.cs, src/Aspire.Cli/Certificates/CertificateHelpers.cs, src/Aspire.Cli/Resources/DoctorCommandStrings.Designer.cs, src/Aspire.Cli/Resources/DoctorCommandStrings.resx, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.cs.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.de.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.es.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.fr.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.it.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.ja.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.ko.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.pl.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.pt-BR.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.ru.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.tr.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.zh-Hans.xlf, src/Aspire.Cli/Resources/xlf/DoctorCommandStrings.zh-Hant.xlf, src/Aspire.Cli/Utils/EnvironmentChecker/DevCertsCheck.cs, tests/Aspire.Cli.Tests/Certificates/UnixCertificateManagerTests.cs, tests/Aspire.Cli.Tests/Utils/DevCertsCheckTests.cs, tests/Aspire.Cli.Tests/Utils/TestEnvironment.cs
• affected project Aspire.Cli
homebrew-installer selected test Aspire.Acquisition.Tests
polyglot affected project Aspire.Cli
typescript-api-compat affected project Aspire.Cli
winget-installer selected test Aspire.Acquisition.Tests

Selection computed for commit 1322ab7.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 21 out of 22 changed files in this pull request and generated no new comments.

Files not reviewed (1)
  • src/Aspire.Cli/Resources/DoctorCommandStrings.Designer.cs: Generated file

@danegsta
David Negstad (danegsta) merged commit bc1bd6f into main Jul 1, 2026
330 checks passed
@danegsta
David Negstad (danegsta) deleted the danegsta-certutil-cleanup-warning branch July 1, 2026 19:26
@github-actions github-actions Bot added this to the 13.5 milestone Jul 1, 2026
@aspire-repo-bot

Copy link
Copy Markdown
Contributor

⚠️ Documentation was required for this change, but a docs PR could not be drafted automatically.

Documentation was required for this PR (triggered signals: cli_resource_strings_changed, pr_body_has_cli_flag_mention, pr_body_has_user_facing_section). The doc changes were written to aspire-certs-clean.mdx and aspire-doctor.mdx on a local branch docs/pr-18580-certutil-handling, but create_pull_request failed twice with "Pinned SHA failed to generate patch: ERR_SYSTEM: Git command failed with status 1" — the shallow clone prevents the safe-outputs tool from resolving the commit history to produce a patch. A human maintainer should push the branch manually or re-run the workflow with a deeper fetch depth.

See the workflow run for details: https://github.com/microsoft/aspire/actions/runs/28542343293

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants