Skip to content

Rename describe endpoints column to URLs#16144

Merged
davidfowl merged 1 commit into
mainfrom
jamesnk/describe-column
Apr 14, 2026
Merged

Rename describe endpoints column to URLs#16144
davidfowl merged 1 commit into
mainfrom
jamesnk/describe-column

Conversation

@JamesNK
Copy link
Copy Markdown
Member

@JamesNK JamesNK commented Apr 14, 2026

Description

aspire describe has a table with an Endpoints column. PR renames it to URLs to be consistent with the dashboard.

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
  • Does the change require an update in our Aspire docs?

Copilot AI review requested due to automatic review settings April 14, 2026 07:30
@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 -- 16144

Or

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

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

Updates the aspire describe table header from “Endpoints” to “URLs” to align CLI terminology with the dashboard.

Changes:

  • Renamed the localized resource key/value from HeaderEndpointsHeaderURLs (RESX + XLFs).
  • Updated the generated resource designer accessor accordingly.
  • Switched the DescribeCommand table column header to use the new resource string.

Reviewed changes

Copilot reviewed 15 out of 16 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.zh-Hant.xlf Replaces HeaderEndpoints with HeaderURLs for zh-Hant localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.zh-Hans.xlf Replaces HeaderEndpoints with HeaderURLs for zh-Hans localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.tr.xlf Replaces HeaderEndpoints with HeaderURLs for Turkish localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.ru.xlf Replaces HeaderEndpoints with HeaderURLs for Russian localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.pt-BR.xlf Replaces HeaderEndpoints with HeaderURLs for pt-BR localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.pl.xlf Replaces HeaderEndpoints with HeaderURLs for Polish localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.ko.xlf Replaces HeaderEndpoints with HeaderURLs for Korean localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.ja.xlf Replaces HeaderEndpoints with HeaderURLs for Japanese localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.it.xlf Replaces HeaderEndpoints with HeaderURLs for Italian localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.fr.xlf Replaces HeaderEndpoints with HeaderURLs for French localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.es.xlf Replaces HeaderEndpoints with HeaderURLs for Spanish localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.de.xlf Replaces HeaderEndpoints with HeaderURLs for German localization.
src/Aspire.Cli/Resources/xlf/DescribeCommandStrings.cs.xlf Replaces HeaderEndpoints with HeaderURLs for Czech localization.
src/Aspire.Cli/Resources/DescribeCommandStrings.resx Renames the base resource entry to HeaderURLs=URLs.
src/Aspire.Cli/Resources/DescribeCommandStrings.Designer.cs Updates the strongly-typed resource property name and lookup key to HeaderURLs.
src/Aspire.Cli/Commands/DescribeCommand.cs Uses DescribeCommandStrings.HeaderURLs for the table header.
Files not reviewed (1)
  • src/Aspire.Cli/Resources/DescribeCommandStrings.Designer.cs: Language not supported

</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">终结点</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">URL'ler</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">URL-адреса</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">URL</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">URL</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">網址</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">URLs</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">Adresy URL</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">Direcciones URL</target>

Copilot uses AI. Check for mistakes.
</trans-unit>
<trans-unit id="HeaderURLs">
<source>URLs</source>
<target state="new">URLs</target>
Copy link

Copilot AI Apr 14, 2026

Choose a reason for hiding this comment

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

The new HeaderURLs string is left untranslated (target is still "URLs" with state="new"), which will regress the localized output compared to the previously translated HeaderEndpoints entry. Please provide an appropriate translation for this locale (and mark the target state accordingly), or ensure this string is picked up by the localization workflow before shipping.

Suggested change
<target state="new">URLs</target>
<target state="translated">Adresy URL</target>

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Copy Markdown
Contributor

🎬 CLI E2E Test Recordings — 71 recordings uploaded (commit a0c0056)

View recordings
Test Recording
AddPackageInteractiveWhileAppHostRunningDetached ▶️ View Recording
AddPackageWhileAppHostRunningDetached ▶️ View Recording
AgentCommands_AllHelpOutputs_AreCorrect ▶️ View Recording
AgentInitCommand_DefaultSelection_InstallsSkillOnly ▶️ View Recording
AgentInitCommand_MigratesDeprecatedConfig ▶️ View Recording
AllPublishMethodsBuildDockerImages ▶️ View Recording
AspireAddPackageVersionToDirectoryPackagesProps ▶️ View Recording
AspireUpdateRemovesAppHostPackageVersionFromDirectoryPackagesProps ▶️ View Recording
Banner_DisplayedOnFirstRun ▶️ View Recording
Banner_DisplayedWithExplicitFlag ▶️ View Recording
Banner_NotDisplayedWithNoLogoFlag ▶️ View Recording
CertificatesClean_RemovesCertificates ▶️ View Recording
CertificatesTrust_WithNoCert_CreatesAndTrustsCertificate ▶️ View Recording
CertificatesTrust_WithUntrustedCert_TrustsCertificate ▶️ View Recording
ConfigSetGet_CreatesNestedJsonFormat ▶️ View Recording
CreateAndRunAspireStarterProject ▶️ View Recording
CreateAndRunAspireStarterProjectWithBundle ▶️ View Recording
CreateAndRunEmptyAppHostProject ▶️ View Recording
CreateAndRunJavaEmptyAppHostProject ▶️ View Recording
CreateAndRunJsReactProject ▶️ View Recording
CreateAndRunPythonReactProject ▶️ View Recording
CreateAndRunTypeScriptEmptyAppHostProject ▶️ View Recording
CreateAndRunTypeScriptStarterProject ▶️ View Recording
CreateJavaAppHostWithViteApp ▶️ View Recording
CreateStartAndStopAspireProject ▶️ View Recording
CreateTypeScriptAppHostWithViteApp ▶️ View Recording
DashboardRunWithOtelTracesReturnsNoTraces ▶️ View Recording
DeployK8sBasicApiService ▶️ View Recording
DeployK8sWithGarnet ▶️ View Recording
DeployK8sWithMongoDB ▶️ View Recording
DeployK8sWithMySql ▶️ View Recording
DeployK8sWithPostgres ▶️ View Recording
DeployK8sWithRabbitMQ ▶️ View Recording
DeployK8sWithRedis ▶️ View Recording
DeployK8sWithSqlServer ▶️ View Recording
DeployK8sWithValkey ▶️ View Recording
DeployTypeScriptAppToKubernetes ▶️ View Recording
DescribeCommandResolvesReplicaNames ▶️ View Recording
DescribeCommandShowsRunningResources ▶️ View Recording
DetachFormatJsonProducesValidJson ▶️ View Recording
DoListStepsShowsPipelineSteps ▶️ View Recording
DoctorCommand_DetectsDeprecatedAgentConfig ▶️ View Recording
DoctorCommand_WithSslCertDir_ShowsTrusted ▶️ View Recording
DoctorCommand_WithoutSslCertDir_ShowsPartiallyTrusted ▶️ View Recording
GlobalMigration_HandlesCommentsAndTrailingCommas ▶️ View Recording
GlobalMigration_HandlesMalformedLegacyJson ▶️ View Recording
GlobalMigration_PreservesAllValueTypes ▶️ View Recording
GlobalMigration_SkipsWhenNewConfigExists ▶️ View Recording
GlobalSettings_MigratedFromLegacyFormat ▶️ View Recording
InitTypeScriptAppHost_AugmentsExistingViteRepoAtRoot ▶️ View Recording
InvalidAppHostPathWithComments_IsHealedOnRun ▶️ View Recording
LegacySettingsMigration_AdjustsRelativeAppHostPath ▶️ View Recording
LogsCommandShowsResourceLogs ▶️ View Recording
OtelLogsReturnsStructuredLogsFromStarterApp ▶️ View Recording
PsCommandListsRunningAppHost ▶️ View Recording
PsFormatJsonOutputsOnlyJsonToStdout ▶️ View Recording
PublishWithConfigureEnvFileUpdatesEnvOutput ▶️ View Recording
PublishWithDockerComposeServiceCallbackSucceeds ▶️ View Recording
RestoreGeneratesSdkFiles ▶️ View Recording
RestoreSupportsConfigOnlyHelperPackageAndCrossPackageTypes ▶️ View Recording
RunFromParentDirectory_UsesExistingConfigNearAppHost ▶️ View Recording
SecretCrudOnDotNetAppHost ▶️ View Recording
SecretCrudOnTypeScriptAppHost ▶️ View Recording
StagingChannel_ConfigureAndVerifySettings_ThenSwitchChannels ▶️ View Recording
StartAndWaitForTypeScriptSqlServerAppHostWithNativeAssets ▶️ View Recording
StopAllAppHostsFromAppHostDirectory ▶️ View Recording
StopAllAppHostsFromUnrelatedDirectory ▶️ View Recording
StopNonInteractiveMultipleAppHostsShowsError ▶️ View Recording
StopNonInteractiveSingleAppHost ▶️ View Recording
StopWithNoRunningAppHostExitsSuccessfully ▶️ View Recording
UnAwaitedChainsCompileWithAutoResolvePromises ▶️ View Recording

📹 Recordings uploaded automatically from CI run #24386694016

@davidfowl davidfowl merged commit a0a9701 into main Apr 14, 2026
286 checks passed
@github-actions github-actions Bot added this to the 13.3 milestone Apr 14, 2026
radical added a commit that referenced this pull request Apr 15, 2026
* Wrap script execution in main() with BASH_SOURCE guard

Enable sourcing get-aspire-cli.sh and get-aspire-cli-pr.sh to load
function definitions without executing the main flow. This is required
for unit-testing individual script functions in isolation.

Also initialize `local config_file=""` to prevent unbound-variable
errors under `set -u` when no shell config file is found.

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

* Consolidate ProcessExtensions into Aspire.TestUtilities

Move ProcessExtensions from Infrastructure.Tests (internal) to
Aspire.TestUtilities (public) so it can be shared by the new
acquisition test project. Update Infrastructure.Tests to reference
the shared version. Simplify CommandResult and ToolCommandException
to use primary constructors.

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

* Surface PR metadata and GH_TOKEN for Acquisition tests in CI

Extend the existing requiresCliArchive token/metadata exports to also
trigger when testShortName == 'Acquisition', so integration tests can
access GitHub API when run as outerloop.

Remove unrelated create-failing-test-issue.* entry from CI trigger
skip-list.

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

* Add Aspire.Acquisition.Tests with 160 tests for CLI scripts

New test project covering get-aspire-cli.sh, get-aspire-cli-pr.sh,
and their PowerShell equivalents. Tests are organized in tiers:

- Function-level tests (ScriptFunctionCommand): source a script and
  call individual functions in isolation — URL construction, platform
  detection, input validation, shell profile handling, archive ops.

- Script-level tests (ScriptToolCommand): run full scripts with mock
  gh CLI and --dry-run to validate end-to-end parameter handling.

- Piped install tests (ScriptHostFixture): serve scripts over HTTP
  and test curl|bash and irm|iex patterns against a real pipe.

- Integration tests (RealGitHubPRFixture): query real GitHub PRs
  with --dry-run, gated behind OuterloopTest + Category=integration.

Test infrastructure:
- TestEnvironment: isolated temp dirs with mock HOME
- FakeArchiveHelper: generates tar.gz/zip with .sha512 sidecars
- Mock gh CLI: canned JSON for pr/run/api commands

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

* fix: iex quoting for Windows + add timeouts to piped install tests

Fix Windows test failures where double quotes in ProcessStartInfo.Arguments
were consumed as argument delimiters by MSVCRT command-line parser. Wrap the
entire iex expression in outer quotes with escaped inner quotes so they
survive as literal characters for pwsh -Command.

Add 60-second timeouts to all piped install tests to prevent CI hang dumps.

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

* fix: quote bash -c args and add -Help to PR script

Fix macOS test failures where .NET's ProcessStartInfo.Arguments parser
splits compound bash -c commands on spaces. Wrap the entire command
string in quotes so it stays as a single argv entry.

Add missing -Help switch parameter to get-aspire-cli-pr.ps1 (the release
script has it but the PR script was missing it, causing iex test to fail
with 'parameter not found').

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

* Fix missing disposal of ScriptToolCommand in PR script tests

Add 'using' to all CreateCommandWithMockGhAsync call sites to ensure
ToolCommand.Dispose() is called, which kills any running process.
Without disposal, hung processes could accumulate under CI contention.

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

* Address review feedback: mock gh api fidelity and XDG_CONFIG_HOME isolation

1. Mock gh api now returns endpoint-aware responses instead of always
   returning {}. PR endpoint returns a realistic SHA, workflow endpoint
   returns a realistic run ID. When --jq is present, returns the
   pre-extracted value; otherwise returns the full JSON structure.
   This ensures tests actually validate the PR lookup contract.

2. Override XDG_CONFIG_HOME in both ScriptFunctionCommand and
   ScriptToolCommand to prevent bash scripts that consult
   ${XDG_CONFIG_HOME:-$HOME/.config} from reading real profile files
   outside the test's temp home on developer machines with
   XDG_CONFIG_HOME set.

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

* Fix milestone workflow: restore permissions and update to github-script v9 (#16174)

- Restore pull-requests: write permission (required by the Issues API
  when updating PR resources, confirmed by 403 error in run #24421110155)
- Update actions/github-script from v7.0.1 (Node.js 20) to v9.0.0
  (Node.js 24) to avoid the June 2026 Node.js 20 deprecation

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

* Clarify dashboard clear telemetry labels (#16128)

* Rename describe endpoints column to URLs (#16144)

* Bump next in /extension in the npm_and_yarn group across 1 directory (#16041)

Bumps the npm_and_yarn group with 1 update in the /tests/Aspire.Cli.EndToEnd.Tests/Fixtures/JsPublish/nextjs directory: [next](https://github.com/vercel/next.js).


Updates `next` from 15.5.14 to 15.5.15
- [Release notes](https://github.com/vercel/next.js/releases)
- [Changelog](https://github.com/vercel/next.js/blob/canary/release.js)
- [Commits](vercel/next.js@v15.5.14...v15.5.15)

---
updated-dependencies:
- dependency-name: next
  dependency-version: 15.5.15
  dependency-type: direct:production
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Fix pr-docs-check docs PR flow (#16149)

* Fix pr-docs-check docs PR flow

Gate the workflow on significant user-facing changes and only draft aspire.dev documentation PRs when there is a clear docs gap.

Recompile the workflow with gh aw v0.68.1, refresh the shared action lock, and restore the required safe_outputs checkout override for microsoft/aspire.dev under _repos/aspire.dev so cross-repo draft PR creation can switch repositories correctly.

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

* Fix pr-docs-check source-only checkouts

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

---------

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

* Address PR #15995 review feedback

- Remove Acquisition-specific GH_TOKEN injection from run-tests.yml (#14)
- Rename s_-prefixed test classes to PascalCase (#15)
- Add retry loop for TOCTOU port race in ScriptHostFixture (#16)
- Add missing [RequiresTools(["pwsh"])] attributes (#17)
- Add default 60s timeout to ScriptToolCommand/ScriptFunctionCommand (#18)
- Fix CTS disposal in PowerShellCommand and NodeCommand (#19/#20)
- Move ToolCommandException into Aspire.Templates.Tests namespace (#21)
- Expand comment on broad readonly override in bash sourcing (#22)

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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Jose Perez Rodriguez <joperezr@microsoft.com>
Co-authored-by: Adam Ratzman <adam@adamratzman.com>
Co-authored-by: James Newton-King <james@newtonking.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: David Pine <david.pine@microsoft.com>
@github-actions github-actions Bot locked and limited conversation to collaborators May 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants