Migrate Aspire skills to external bundle - #17323
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 17323Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 17323" |
|
What happens if the user does not have npm? |
|
David Fowler (@davidfowl) If npm is not available, behavior depends on whether the Aspire skills bundle is already cached:
With the follow-up fix I pushed, direct Playwright CLI already has similar optional behavior for missing npm: it reports the skill as skipped/informational rather than failing the entire flow. If we want full first-install support without npm, we'd need a second distribution path for the skills bundle, such as a signed GitHub release/archive or some other non-npm bootstrap source. |
PR Testing CompleteResult: ✅ PR #17323 verified in container mode with local bundle seeding Dogfooded PR CLI
Important caveat: The real Cleanup: Mounted temp workspace removed. |
There was a problem hiding this comment.
Pull request overview
This PR migrates the CLI’s shipped Aspire workflow skills (aspire, aspireify, aspire-deployment) from embedded resources to an externally resolved, verified, and cached @microsoft/aspire-skills bundle, while keeping aspire agent init skill selection and install destinations consistent.
Changes:
- Introduces an
IAspireSkillsInstaller+ bundle/manifest model to download/verify/extract/cache the external skills bundle and install selected files. - Refactors
SkillDefinitionto model skill sourcing viaSkillSourceKindand removes embedded skill resource plumbing. - Updates unit/E2E tests and localization resources to cover/install the new bundle-backed skill flow.
Reviewed changes
Copilot reviewed 66 out of 67 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs | Wires the new Aspire skills installer into test DI setup. |
| tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs | Adds a fake Aspire skills installer that materializes a minimal on-disk bundle for tests. |
| tests/Aspire.Cli.Tests/Commands/AgentInitCommandTests.cs | Expands agent init coverage to include aspireify and bundle-unavailable behavior. |
| tests/Aspire.Cli.Tests/Agents/CommonAgentApplicatorsTests.cs | Updates assertions for new skill sourcing model and adjusts installable-skill validation logic. |
| tests/Aspire.Cli.Tests/Agents/AspireSkillsInstallerTests.cs | Adds unit tests for bundle caching and GitHub/npm acquisition fallbacks. |
| tests/Aspire.Cli.Tests/Agents/AspireSkillsBundleTests.cs | Adds unit tests for manifest/path/hash/version-range validation and file filtering. |
| tests/Aspire.Cli.Tests/Acquisition/PeerInstallProbeTests.cs | Makes timeout assertion less flaky under Windows CI load. |
| tests/Aspire.Cli.EndToEnd.Tests/PlaywrightCliInstallTests.cs | Makes Playwright E2E deterministic by bypassing interactive prompts and excluding Aspire bundle skills. |
| tests/Aspire.Cli.EndToEnd.Tests/NewWithAgentInitTests.cs | Updates interactive skill selection steps to deselect default bundle skills when testing Playwright acquisition. |
| tests/Aspire.Cli.EndToEnd.Tests/AgentCommandTests.cs | Avoids depending on unpublished bundle by seeding the cache before default-selection E2E flow. |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf | Adds new Aspire skills installer strings (localized placeholder entries). |
| src/Aspire.Cli/Resources/AgentCommandStrings.resx | Adds new installer status/error strings for Aspire skills bundle acquisition. |
| src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs | Regenerates strongly-typed resource accessors for new strings. |
| src/Aspire.Cli/Program.cs | Registers IAspireSkillsInstaller in the CLI DI container. |
| src/Aspire.Cli/Commands/McpInitCommand.cs | Threads the Aspire skills installer into MCP init command construction. |
| src/Aspire.Cli/Commands/AgentInitCommand.cs | Integrates bundle resolution (strict vs best-effort modes) and installs bundle-backed skill files. |
| src/Aspire.Cli/Aspire.Cli.csproj | Removes embedded-resource includes for the shipped skill directories. |
| src/Aspire.Cli/Agents/SkillDefinition.cs | Replaces embedded-resource roots with SkillSourceKind and adds HasInstallableFiles. |
| src/Aspire.Cli/Agents/SkillAssetFile.cs | Introduces a dedicated SkillAssetFile record type. |
| src/Aspire.Cli/Agents/EmbeddedSkillResourceLoader.cs | Removes the embedded-skill loader and inline SkillAssetFile definition. |
| src/Aspire.Cli/Agents/CommonAgentApplicators.cs | Removes embedded-resource root constants for Aspire skill bundles. |
| src/Aspire.Cli/Agents/AspireSkills/SkillBundleManifest.cs | Adds JSON models + source-gen context for the external skill bundle manifest. |
| src/Aspire.Cli/Agents/AspireSkills/IAspireSkillsInstaller.cs | Adds the bundle installer abstraction for agent init. |
| src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstallResult.cs | Adds result types for bundle resolution success/failure. |
| src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundle.cs | Adds bundle loader with manifest validation, path safety checks, hash verification, and version-range checks. |
| src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstaller.cs | Implements acquisition via GitHub tarball fallback and npm resolution with provenance + integrity verification, plus cache management. |
| eng/scripts/verify-cli-archive.ps1 | Suppresses agent init when validating starter template generation. |
| eng/scripts/cli-starter-validation.ps1 | Suppresses agent init when validating templates in PR-channel scenarios. |
| .agents/skills/aspireify/references/opentelemetry.md | Removes embedded aspireify reference content (moved to external bundle). |
| .agents/skills/aspireify/references/javascript-apps.md | Removes embedded aspireify reference content (moved to external bundle). |
| .agents/skills/aspireify/references/full-solution-apphosts.md | Removes embedded aspireify reference content (moved to external bundle). |
| .agents/skills/aspireify/references/docker-compose.md | Removes embedded aspireify reference content (moved to external bundle). |
| .agents/skills/aspire/SKILL.md | Removes embedded aspire skill content (moved to external bundle). |
| .agents/skills/aspire/references/typescript-apphosts.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/tools-and-configuration.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/resource-management.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/playwright-handoff.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/monitoring.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/deployment.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/csharp-apphosts.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/app-commands.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/references/agent-workflows.md | Removes embedded aspire reference content (moved to external bundle). |
| .agents/skills/aspire/evals/evals.json | Removes embedded aspire eval assets (moved to external bundle / no longer embedded). |
| .agents/skills/aspire-deployment/SKILL.md | Removes embedded deployment skill content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/preflight.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/kubernetes.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/javascript.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/github-actions-azure-typescript.yml | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/github-actions-azure-csharp.yml | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/docker-compose.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/cicd.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/azure.md | Removes embedded deployment reference content (moved to external bundle). |
| .agents/skills/aspire-deployment/references/aws.md | Removes embedded deployment reference content (moved to external bundle). |
Files not reviewed (1)
- src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs: Language not supported
To be honest, I really don't like the idea of requiring a dependency on npm for these. The whole point of the bundle in the first place was to avoid requiring a dependency on .NET. It feels like we're backsliding, especially since we've deemed skills very important? Just as JS devs would be confused about needing to install .NET, .NET devs (or python, java, etc.) devs would be confused about needing npm. My vote would be to refactor |
|
David Fowler (@davidfowl) Damian Edwards (@DamianEdwards) and I were discussing this. Rather than using NPM I think we should investigating downloading release metadata directly from the repo (for released builds we would same the use tag for the release of the aspire CLI). Then we would download the zip file containing the skills files, and then download the attestation bundle for that files' SHA and then use Sigstore to verify the provenance. |
Sébastien Ros (sebastienros)
left a comment
There was a problem hiding this comment.
Focused review - problems only.
|
Adam Ratzman (@adamint) Agreed, requiring npm as the first-install path is the wrong default here. I pushed The acquisition order is now: validated local cache first, then a GitHub release asset from |
|
Mitch Denny (@mitchdenny) I pushed npm provenance/SRI remains as the fallback when the GitHub release asset is unavailable, and plugin detection is the final fallback. That should preserve the no-npm path without regressing to unauthenticated GitHub archive downloads. |
|
Sébastien Ros (@sebastienros) I couldn't attach inline replies to the two review comments through the REST endpoint, but both are fixed in
|
But where is the NPM artifact coming from, we wouldn't be publishing an aspire skills artifact to NPM in this case??? |
The repo: |
|
Adam Ratzman (@adamint) Mitch Denny (@mitchdenny) quick correction to my earlier replies after the latest design decision: I pushed |
PR Testing ReportResult: PR Information
Scenarios Tested
External Bundle Failure EvidenceThe CLI attempted to resolve the configured skills bundle version from: Both returned Per follow-up context, this is expected at this stage because the external skills repository/release has not been published publicly yet. OverallThe PR dogfood CLI installs correctly and normal project creation with agent init suppressed works. The no-skill agent init path also works. The only failures observed are tied to the intentionally unavailable external skills bundle. |
Move Aspire workflow skill installation off embedded resources and add a verified cached Aspire skills bundle resolver. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep direct aspire agent init strict when the external Aspire skills bundle cannot be resolved, but allow follow-up agent init from aspire new/init to continue after showing a warning and dropping the unavailable external skills. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Avoid exercising external Aspire skills while testing deprecated config migration, and seed the Aspire skills cache for the E2E scenario that verifies default skill installation before the package is published. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Treat omitted optional path arrays in the external Aspire skills bundle manifest as empty, and report required missing file arrays as invalid manifests instead of throwing a null reference during skill installation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Make Aspire skills acquisition cache-first, then GitHub release assets verified through artifact attestations, with npm provenance/SRI and plugin detection fallbacks. Also make cache marker writes and stale cache cleanup best-effort. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep Aspire skills acquisition to cache first, then verified GitHub release assets. Remove npm and agent plugin fallback paths so unavailable GitHub acquisition fails clearly unless a valid cache entry exists. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
ea4aebc to
489c781
Compare
Quarantine LogLevelTrace_ProducesTraceEntriesInCliLogFile because it intermittently hangs after aspire stop fails during CLI E2E runs. Issue: #17485 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
❌ CLI E2E Tests failed — 105 passed, 1 failed, 2 unknown (commit Failed Tests
View all recordings
📹 Recordings uploaded automatically from CI run #26462076310 |
The aspire, aspireify, and aspire-deployment skills are now fetched from the external @microsoft/aspire-skills npm bundle instead of being embedded in the CLI. Document the network access requirement, cache location, and the unchanged install command. Documents changes from microsoft/aspire#17323. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Pull request created: #1077
|
|
📝 Documentation has been drafted in microsoft/aspire.dev#1077 targeting A draft docs PR has been opened against Triggered signals and evidence:
Docs changes:
Note This draft PR needs human review before merging. |
|
/backport to release/13.4 |
|
Started backporting to |
|
David Pine (@IEvangelist) backporting to git am output$ git am --3way --empty=keep --ignore-whitespace --keep-non-patch changes.patch
Applying: Migrate Aspire skills to external bundle
Using index info to reconstruct a base tree...
A .agents/skills/aspire-deployment/SKILL.md
A .agents/skills/aspire-deployment/references/aws.md
A .agents/skills/aspire-deployment/references/azure.md
A .agents/skills/aspire-deployment/references/cicd.md
A .agents/skills/aspire-deployment/references/docker-compose.md
A .agents/skills/aspire-deployment/references/github-actions-azure-csharp.yml
A .agents/skills/aspire-deployment/references/github-actions-azure-typescript.yml
A .agents/skills/aspire-deployment/references/javascript.md
A .agents/skills/aspire-deployment/references/kubernetes.md
A .agents/skills/aspire-deployment/references/preflight.md
A .agents/skills/aspire/SKILL.md
A .agents/skills/aspire/evals/evals.json
A .agents/skills/aspire/references/agent-workflows.md
A .agents/skills/aspire/references/app-commands.md
A .agents/skills/aspire/references/csharp-apphosts.md
A .agents/skills/aspire/references/deployment.md
A .agents/skills/aspire/references/monitoring.md
A .agents/skills/aspire/references/playwright-handoff.md
A .agents/skills/aspire/references/resource-management.md
A .agents/skills/aspire/references/tools-and-configuration.md
A .agents/skills/aspire/references/typescript-apphosts.md
A .agents/skills/aspireify/SKILL.md
A .agents/skills/aspireify/references/apphost-wiring.md
A .agents/skills/aspireify/references/docker-compose.md
A .agents/skills/aspireify/references/full-solution-apphosts.md
A .agents/skills/aspireify/references/javascript-apps.md
A .agents/skills/aspireify/references/opentelemetry.md
M src/Aspire.Cli/Agents/CommonAgentApplicators.cs
A src/Aspire.Cli/Agents/EmbeddedSkillResourceLoader.cs
M src/Aspire.Cli/Agents/SkillDefinition.cs
M src/Aspire.Cli/Aspire.Cli.csproj
M src/Aspire.Cli/Commands/AgentInitCommand.cs
M src/Aspire.Cli/Commands/McpInitCommand.cs
M src/Aspire.Cli/Program.cs
M src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs
M src/Aspire.Cli/Resources/AgentCommandStrings.resx
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf
M src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf
M tests/Aspire.Cli.Tests/Agents/CommonAgentApplicatorsTests.cs
M tests/Aspire.Cli.Tests/Commands/AgentInitCommandTests.cs
M tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs
M tests/Aspire.Cli.Tests/Utils/CliTestHelper.cs
Falling back to patching base and 3-way merge...
Auto-merging src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundle.cs
CONFLICT (add/add): Merge conflict in src/Aspire.Cli/Agents/AspireSkills/AspireSkillsBundle.cs
Auto-merging src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstaller.cs
CONFLICT (add/add): Merge conflict in src/Aspire.Cli/Agents/AspireSkills/AspireSkillsInstaller.cs
Auto-merging src/Aspire.Cli/Agents/AspireSkills/SkillBundleManifest.cs
CONFLICT (add/add): Merge conflict in src/Aspire.Cli/Agents/AspireSkills/SkillBundleManifest.cs
Auto-merging src/Aspire.Cli/Aspire.Cli.csproj
Auto-merging src/Aspire.Cli/Commands/AgentInitCommand.cs
CONFLICT (content): Merge conflict in src/Aspire.Cli/Commands/AgentInitCommand.cs
Auto-merging src/Aspire.Cli/Program.cs
CONFLICT (content): Merge conflict in src/Aspire.Cli/Program.cs
Auto-merging src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/AgentCommandStrings.Designer.cs
Auto-merging src/Aspire.Cli/Resources/AgentCommandStrings.resx
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/AgentCommandStrings.resx
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.cs.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.de.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.es.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.fr.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.it.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ja.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ko.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pl.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.pt-BR.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.ru.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.tr.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hans.xlf
Auto-merging src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf
CONFLICT (content): Merge conflict in src/Aspire.Cli/Resources/xlf/AgentCommandStrings.zh-Hant.xlf
Auto-merging tests/Aspire.Cli.Tests/Agents/AspireSkillsBundleTests.cs
CONFLICT (add/add): Merge conflict in tests/Aspire.Cli.Tests/Agents/AspireSkillsBundleTests.cs
Auto-merging tests/Aspire.Cli.Tests/Agents/AspireSkillsInstallerTests.cs
CONFLICT (add/add): Merge conflict in tests/Aspire.Cli.Tests/Agents/AspireSkillsInstallerTests.cs
Auto-merging tests/Aspire.Cli.Tests/Commands/AgentInitCommandTests.cs
Auto-merging tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs
CONFLICT (content): Merge conflict in tests/Aspire.Cli.Tests/TestServices/FakePlaywrightServices.cs
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config set advice.mergeConflict false"
Patch failed at 0001 Migrate Aspire skills to external bundle
Error: The process '/usr/bin/git' failed with exit code 128 |
|
Started backporting to |
|
David Pine (@IEvangelist) an error occurred while backporting to |
#1077) * docs: document Aspire workflow skills external bundle migration The aspire, aspireify, and aspire-deployment skills are now fetched from the external @microsoft/aspire-skills npm bundle instead of being embedded in the CLI. Document the network access requirement, cache location, and the unchanged install command. Documents changes from microsoft/aspire#17323. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address review feedback (8 threads) - Replace npm-bundle wording with GitHub release asset wording (PRRT_kwDOQK_VN86Fti2p, PRRT_kwDOQK_VN86Fti2r, PRRT_kwDOQK_VN86Fti22) - Correct attestation, manifest-hash, and unsafe-path verification wording (PRRT_kwDOQK_VN86Fti2r, PRRT_kwDOQK_VN86Fti24) - Clarify skill defaults and Playwright network requirements (PRRT_kwDOQK_VN86Fti2v, PRRT_kwDOQK_VN86Fti2z) - Fix the Linux/macOS cache path typo (PRRT_kwDOQK_VN86E7uL1, PRRT_kwDOQK_VN86Fti27) Verified against microsoft/aspire@565af53 on branch release/13.4. Edited per the doc-writer skill. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Consolidate Aspire AI skills docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix agent init output summary docs Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: aspire-repo-bot[bot] <268009190+aspire-repo-bot[bot]@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: David Pine <7679720+IEvangelist@users.noreply.github.com>
Description
Part of #17018.
This draft moves the CLI-shipped Aspire workflow skills (
aspire,aspireify, andaspire-deployment) away from embedded resources inmicrosoft/aspireand toward delegated installation from the externalmicrosoft/aspire-skillspackage. This keepsmicrosoft/aspire-skillson track to become the single source of truth for Aspire skill content while preserving the existingaspire agent initselection and install destinations.The CLI now resolves a pinned
@microsoft/aspire-skillsbundle, verifies npm provenance and tarball integrity, validates the bundle manifest/file hashes, extracts it into the Aspire cache, and installs selected skill files from that cache. The embedded.agents/skills/{aspire,aspireify,aspire-deployment}trees and embedded resource loader were removed from the CLI project.User-facing usage
Users keep running
aspire agent initwith the same skill names and destinations:The first install of these Aspire workflow skills now requires npm/package access so the CLI can resolve and verify the pinned skills bundle. Subsequent installs reuse the validated cache under the Aspire cache directory:
This PR is a draft because the matching
microsoft/aspire-skillspackage/manifest publishing work still needs to land before this is ready to ship.Security considerations
This change downloads and extracts an npm tarball into a global Aspire cache directory. Security review is needed because the implementation makes package-source and archive-extraction guarantees: it verifies npm provenance, verifies SRI tarball integrity, validates manifest paths and SHA-256 file hashes, rejects unsafe relative paths, and does not perform a global npm install.
Validation
Passed targeted tests for the changed CLI surfaces:
Also ran the full
Aspire.Cli.Testsproject; it compiled and executed, with one failure inListConsoleLogsToolTests.ListConsoleLogsTool_ReturnsLogs_ForSpecificResourcedue to Windows line-ending output (\nvs\r\n).Checklist
<remarks />and<code />elements on your triple slash comments?