Open
Conversation
… the apis, and the FactAttributes were in violation of xUnit3003.
Contributor
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.sh | bash -s -- 1155Or
iex "& { $(irm https://raw.githubusercontent.com/CommunityToolkit/Aspire/main/eng/scripts/dogfood-pr.ps1) } 1155" |
Contributor
There was a problem hiding this comment.
Pull request overview
This PR introduces a new CommunityToolkit.Aspire.Hosting.Perl hosting integration to run Perl scripts/APIs under Aspire, along with tests, documentation, and multiple example applications demonstrating different Perl dependency-management approaches.
Changes:
- Added
CommunityToolkit.Aspire.Hosting.Perlintegration (resources, annotations, services, docs). - Added a new Perl test project plus CI wiring to run it.
- Added multiple Perl examples (cpan/cpanm/carton/perlbrew + a multi-resource demo with a Blazor frontend), plus devcontainer updates to support Perl tooling.
Reviewed changes
Copilot reviewed 129 out of 178 changed files in this pull request and generated 23 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/ResourceCreationTests.cs | Validates resource creation/annotations for Perl resources. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PlatformFactAttributes.cs | Adds OS-specific xUnit fact attributes for conditional test execution. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlVersionDetectorTests.cs | Unit tests for Perl version detection behaviors. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlModuleCheckerTests.cs | Tests module detection behavior with environment variables. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlIntegrationTests.cs | Integration test exercising a Perl API example via Aspire testing fixture. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlInstallationManagerTests.cs | Tests validation + required-command annotations. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlAppResourceTests.cs | Validates resource shape/contract expectations. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/PerlAppPublicApiTests.cs | Public API argument validation tests. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/LoggingBehaviorTests.cs | Tests log output behavior in run vs publish mode. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/DockerfileGenerationTests.cs | Tests Dockerfile generation helpers for publish-mode. |
| tests/CommunityToolkit.Aspire.Hosting.Perl.Tests/CommunityToolkit.Aspire.Hosting.Perl.Tests.csproj | Adds Perl test project references (including example AppHost). |
| src/CommunityToolkit.Aspire.Hosting.Perl/windows-environment-setup.md | Windows manual setup documentation for Perl toolchain. |
| src/CommunityToolkit.Aspire.Hosting.Perl/nuget.config | Adds project-local NuGet feed config for the Perl integration. |
| src/CommunityToolkit.Aspire.Hosting.Perl/docs/using-perl-integration.md | Detailed “how to use” guide for the Perl hosting integration. |
| src/CommunityToolkit.Aspire.Hosting.Perl/docs/roadmap.md | Roadmap doc for future Perl integration work. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Services/PerlVersionDetector.cs | Implements file/CLI/perlbrew-based version detection. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Services/PerlModuleChecker.cs | Implements module-installed probing via perl -M.... |
| src/CommunityToolkit.Aspire.Hosting.Perl/Services/PerlInstallationManager.cs | Implements perl installation validation via perl -v. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Services/CpanfileParser.cs | Parses cpanfile to extract required module names. |
| src/CommunityToolkit.Aspire.Hosting.Perl/README.md | Package README plus links to docs/roadmap and credits. |
| src/CommunityToolkit.Aspire.Hosting.Perl/PerlbrewEnvironment.cs | Models perlbrew environment paths and helpers. |
| src/CommunityToolkit.Aspire.Hosting.Perl/PerlPackageManager.cs | Adds package manager enum + mapping to executable names. |
| src/CommunityToolkit.Aspire.Hosting.Perl/PerlModuleInstallerResource.cs | Introduces installer resource type for module installs. |
| src/CommunityToolkit.Aspire.Hosting.Perl/PerlLaunchConfiguration.cs | Defines JSON-serializable launch configuration shape (internal). |
| src/CommunityToolkit.Aspire.Hosting.Perl/PerlAppResource.cs | Adds Perl app resource type (executable + service discovery). |
| src/CommunityToolkit.Aspire.Hosting.Perl/EntrypointType.cs | Adds entrypoint type enum (script/api/module/executable). |
| src/CommunityToolkit.Aspire.Hosting.Perl/CommunityToolkit.Aspire.Hosting.Perl.csproj | New Perl integration project definition. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlbrewResourceEnvironmentAnnotation.cs | Marker annotation for perlbrew environment wiring. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlbrewEnvironmentAnnotation.cs | Annotation holding perlbrew config + resolved environment. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlRequiredModuleAnnotation.cs | Annotation capturing required module install settings. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlProjectInstallerAnnotation.cs | Links resource to project dependency installer resource. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlPackageManagerAnnotation.cs | Tracks package manager selection for a resource. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlModuleInstallerAnnotation.cs | Links resource to per-module installer child resource. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlLocalLibResourceEnvironmentAnnotation.cs | Marker annotation for resource env local::lib wiring. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlLocalLibInstallerEnvironmentAnnotation.cs | Marker annotation for installer env local::lib wiring. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlLocalLibAnnotation.cs | Stores configured local::lib path. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlEntrypointAnnotation.cs | Stores entrypoint type + value for launch behavior. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlCertificateTrustAnnotation.cs | Marker annotation for certificate trust registration. |
| src/CommunityToolkit.Aspire.Hosting.Perl/Annotations/PerlCartonDeploymentAnnotation.cs | Tracks carton deployment-mode choice for publish. |
| global.json | Adds Microsoft Testing Platform runner metadata. |
| examples/perl/perlbrew-environment-minimal/scripts/Worker.pl | Example worker validating perlbrew-selected Perl version. |
| examples/perl/perlbrew-environment-minimal/nuget.config | Example-local NuGet feed config. |
| examples/perl/perlbrew-environment-minimal/README.md | Example documentation for perlbrew environment usage. |
| examples/perl/perlbrew-environment-minimal/PerlbrewEnvironmentMinimal.ServiceDefaults/PerlbrewEnvironmentMinimal.ServiceDefaults.csproj | Example service defaults project. |
| examples/perl/perlbrew-environment-minimal/PerlbrewEnvironmentMinimal.ServiceDefaults/Extensions.cs | Example service defaults extensions. |
| examples/perl/perlbrew-environment-minimal/PerlbrewEnvironmentMinimal.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/perlbrew-environment-minimal/PerlbrewEnvironmentMinimal.AppHost/PerlbrewEnvironmentMinimal.AppHost.csproj | Example AppHost project. |
| examples/perl/perlbrew-environment-minimal/PerlbrewEnvironmentMinimal.AppHost/AppHost.cs | Example AppHost wiring for perlbrew worker. |
| examples/perl/perlbrew-environment-minimal/.aspire/settings.json | Aspire settings for example. |
| examples/perl/multi-resource/scripts/secondLayerApi.pl | Second-layer Perl API example script. |
| examples/perl/multi-resource/scripts/Worker.pl | Multi-resource example worker script w/ OpenTelemetry spans. |
| examples/perl/multi-resource/scripts/API.pl | Multi-resource example API script (calls second layer). |
| examples/perl/multi-resource/nuget.config | Example-local NuGet feed config. |
| examples/perl/multi-resource/MultiResource.ServiceDefaults/MultiResource.ServiceDefaults.csproj | Multi-resource service defaults project. |
| examples/perl/multi-resource/MultiResource.ServiceDefaults/Extensions.cs | Multi-resource service defaults extensions. |
| examples/perl/multi-resource/MultiResource.Driver/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css | Vendor static asset for example UI. |
| examples/perl/multi-resource/MultiResource.Driver/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css | Vendor static asset for example UI. |
| examples/perl/multi-resource/MultiResource.Driver/wwwroot/favicon.png | Example UI favicon asset. |
| examples/perl/multi-resource/MultiResource.Driver/wwwroot/app.css | Example UI styling. |
| examples/perl/multi-resource/MultiResource.Driver/appsettings.json | Example driver app settings. |
| examples/perl/multi-resource/MultiResource.Driver/Properties/launchSettings.json | Example driver launch settings. |
| examples/perl/multi-resource/MultiResource.Driver/Program.cs | Example Blazor driver wiring + service discovery client. |
| examples/perl/multi-resource/MultiResource.Driver/MultiResource.Driver.csproj | Example Blazor driver project. |
| examples/perl/multi-resource/MultiResource.Driver/Components/_Imports.razor | Example UI imports. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Routes.razor | Example UI router. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Pages/Weather.razor | Example UI page. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Pages/NotFound.razor | Example UI page. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Pages/Home.razor | Example UI page that calls Perl endpoints. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Pages/Error.razor | Example UI error page. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Pages/Counter.razor | Example UI page. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/ReconnectModal.razor.js | Example reconnect modal JS. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/ReconnectModal.razor.css | Example reconnect modal CSS. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/ReconnectModal.razor | Example reconnect modal component. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/NavMenu.razor.css | Example nav menu CSS. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/NavMenu.razor | Example nav menu component. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/MainLayout.razor.css | Example layout CSS. |
| examples/perl/multi-resource/MultiResource.Driver/Components/Layout/MainLayout.razor | Example layout component. |
| examples/perl/multi-resource/MultiResource.Driver/Components/App.razor | Example UI host page. |
| examples/perl/multi-resource/MultiResource.AppHost/cpanfile | Example Carton dependency manifest. |
| examples/perl/multi-resource/MultiResource.AppHost/appsettings.json | Example AppHost settings. |
| examples/perl/multi-resource/MultiResource.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/multi-resource/MultiResource.AppHost/MultiResource.AppHost.csproj | Example AppHost project. |
| examples/perl/multi-resource/MultiResource.AppHost/AppHost.cs | Example orchestration: 2 Perl APIs + worker + Blazor frontend. |
| examples/perl/multi-resource/.aspire/settings.json | Aspire settings for example. |
| examples/perl/cpanm-script-minimal/scripts/Worker.pl | Minimal cpanm script worker example. |
| examples/perl/cpanm-script-minimal/nuget.config | Example-local NuGet feed config. |
| examples/perl/cpanm-script-minimal/README.md | Example documentation for cpanm script scenario. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.ServiceDefaults/Extensions.cs | Example service defaults extensions. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.ServiceDefaults/CpanmScriptMinimal.ServiceDefaults.csproj | Example service defaults project. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.Driver/Program.cs | Example driver program. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.AppHost/CpanmScriptMinimal.AppHost.csproj | Example AppHost project. |
| examples/perl/cpanm-script-minimal/CpanmScriptMinimal.AppHost/AppHost.cs | Example AppHost wiring for cpanm worker. |
| examples/perl/cpanm-script-minimal/.aspire/settings.json | Aspire settings for example. |
| examples/perl/cpanm-api-integration/scripts/API.pl | Minimal API used by integration tests. |
| examples/perl/cpanm-api-integration/nuget.config | Example-local NuGet feed config. |
| examples/perl/cpanm-api-integration/README.md | Example documentation for cpanm API scenario. |
| examples/perl/cpanm-api-integration/CpanmApiIntegration.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/cpanm-api-integration/CpanmApiIntegration.AppHost/CpanmApiIntegration.AppHost.csproj | Example AppHost project. |
| examples/perl/cpanm-api-integration/CpanmApiIntegration.AppHost/AppHost.cs | Example AppHost wiring for cpanm API. |
| examples/perl/cpanm-api-integration/.aspire/settings.json | Aspire settings for example. |
| examples/perl/cpan-script-minimal/scripts/Worker.pl | Minimal “default cpan” worker example. |
| examples/perl/cpan-script-minimal/nuget.config | Example-local NuGet feed config. |
| examples/perl/cpan-script-minimal/README.md | Example documentation for default cpan scenario. |
| examples/perl/cpan-script-minimal/CpanScriptMinimal.ServiceDefaults/Extensions.cs | Example service defaults extensions. |
| examples/perl/cpan-script-minimal/CpanScriptMinimal.ServiceDefaults/CpanScriptMinimal.ServiceDefaults.csproj | Example service defaults project. |
| examples/perl/cpan-script-minimal/CpanScriptMinimal.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/cpan-script-minimal/CpanScriptMinimal.AppHost/CpanScriptMinimal.AppHost.csproj | Example AppHost project. |
| examples/perl/cpan-script-minimal/CpanScriptMinimal.AppHost/AppHost.cs | Example AppHost wiring for default cpan worker. |
| examples/perl/cpan-script-minimal/.aspire/settings.json | Aspire settings for example. |
| examples/perl/carton-api-minimal/scripts/API.pl | Minimal Carton API example script (incl. HTTPS wiring). |
| examples/perl/carton-api-minimal/nuget.config | Example-local NuGet feed config. |
| examples/perl/carton-api-minimal/README.md | Example documentation for Carton API scenario. |
| examples/perl/carton-api-minimal/CartonApiMinimal.ServiceDefaults/Extensions.cs | Example service defaults extensions. |
| examples/perl/carton-api-minimal/CartonApiMinimal.ServiceDefaults/CartonApiMinimal.ServiceDefaults.csproj | Example service defaults project. |
| examples/perl/carton-api-minimal/CartonApiMinimal.AppHost/cpanfile | Example Carton dependency manifest. |
| examples/perl/carton-api-minimal/CartonApiMinimal.AppHost/Properties/launchSettings.json | Example AppHost launch settings. |
| examples/perl/carton-api-minimal/CartonApiMinimal.AppHost/CartonApiMinimal.AppHost.csproj | Example AppHost project. |
| examples/perl/carton-api-minimal/CartonApiMinimal.AppHost/AppHost.cs | Example AppHost wiring for Carton API + cert mapping. |
| examples/perl/carton-api-minimal/.aspire/settings.json | Aspire settings for example. |
| docs/diagnostics.md.bak | Backup copy of diagnostics doc (should not be committed). |
| docs/diagnostics.md | Extends diagnostics doc with Perl-specific experimental IDs. |
| README.md | Adds Perl integration entry + badges/links to root README. |
| CommunityToolkit.Aspire.slnx | Adds Perl projects/examples to solution listing. |
| CODEOWNERS.bak | Backup copy of CODEOWNERS (should not be committed). |
| CODEOWNERS | Adds ownership entries for Perl integration. |
| .gitignore.bak | Backup copy of gitignore (should not be committed). |
| .gitignore | Ignores Perl example local libs + cpanfile.snapshot. |
| .github/workflows/tests.yaml.bak | Backup copy of workflow (should not be committed). |
| .github/workflows/tests.yaml | Adds Hosting.Perl.Tests to CI matrix. |
| .devcontainer/post-create.sh | Installs Perl tooling/deps in devcontainer setup. |
| .devcontainer/devcontainer.json | Adds Node + Perl extensions to devcontainer config. |
You can also share your feedback on Copilot code review. Take the survey.
src/CommunityToolkit.Aspire.Hosting.Perl/Services/PerlVersionDetector.cs
Show resolved
Hide resolved
...CommunityToolkit.Aspire.Hosting.Perl.Tests/CommunityToolkit.Aspire.Hosting.Perl.Tests.csproj
Show resolved
Hide resolved
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
** Closes #1153 **
Added a whole perl integration with a roadmap and everything.
PR Checklist
No breaking changes noticed.
Other information
I'm open to feedback or revisions, please let me know if you have any questions.