microsoft / microsoft/GitHub-Copilot-for-Azure
Replace azure-prepare skill Aspire AddParameter/WithBuildArg scan with a script
@tmeschter is already working on this.
Since Jul 13, 2026.
- Dominant language
- Python
- Stars
- 250
- Forks
- 204
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 67
Description
## Summary
Copilot has identified a portion of a skill that is a good candidate for replacement with a script.
The candidate is the **Aspire `AddParameter` / `WithBuildArg` pre-build scan** in the `azure-prepare` skill (`plugin/skills/azure-prepare/references/recipes/azd/aspire.md`).
## Candidate description
After `azd init --from-code` but before any build/deploy, the skill mandates a mechanical scan of the AppHost source to find `AddParameter` results passed to `WithBuildArg` / `WithBuildSecret` (a pattern that triggers an azd bug failing Docker builds with `parameter infra.parameters. not found`). The steps are:
1. Detect the AppHost — `find . -name "*.AppHost.csproj"` / `grep -r "Aspire.Hosting" --include="*.csproj"`.
2. Run the mandatory scan — bash: `grep -RIn --include="*.cs" -E "AddParameter|WithBuildArg|WithBuildSecret" `; PowerShell: `Get-ChildItem … | Select-String -Pattern "AddParameter|WithBuildArg|WithBuildSecret"`.
3. Report matching files/lines so the agent can apply a fix.
This is a strong script candidate because it is:
- **Provided as parallel bash + PowerShell one-liners** for the exact same scan — drift-prone copy-paste.
- **Explicitly labeled MANDATORY** and called out as "the #1 cause of failed Aspire container-build deployments," so reliable, deterministic execution matters.
- **Deterministic** — a fixed `grep`/`Select-String` over `*.cs`; no judgment in the detection itself.
Only the **scan + report** is scripted. The remediation (Fix Option A: replace `AddParameter` with a constant; Fix Option B: pre-set the value in the azd env) requires human/LLM judgment and stays in prose.
**Sketch — `scan-aspire-buildargs.{sh,ps1}`:**
- **Input:** AppHost directory path.
- **Output:** a compact, self-describing result — the matching files/lines and a clear "found N matches / none found" verdict — so the agent can decide whether remediation is needed without re-parsing raw grep output.
> Note: this overlaps the Aspire *project* detection candidate (#2494) in the same area; the two scans should be cross-checked for shared helper code when implemented.
## Affected file and lines
- [`recipes/azd/aspire.md` — AppHost detection table (L7–L11)](https://github.com/microsoft/GitHub-Copilot-for-Azure/blob/3890cbfb65c548ce8daa96cabd1d8de63f7bbcca/plugin/skills/azure-prepare/references/recipes/azd/aspire.md#L7-L11)
- [`recipes/azd/aspire.md` — MANDATORY AddParameter/WithBuildArg scan, bash + PowerShell (L64–L81)](https://github.com/microsoft/GitHub-Copilot-for-Azure/blob/3890cbfb65c548ce8daa96cabd1d8de63f7bbcca/plugin/skills/azure-prepare/references/recipes/azd/aspire.md#L64-L81)
## Next steps
1. **Evaluate the candidate** — confirm the steps are stable and parameterizable, and that the script captures everything the skill needs.
2. **Create both a bash _and_ a PowerShell version** of the script so the skill works across platforms.
3. **Run integration tests** to verify the scripts behave correctly and the skill still completes end-to-end.
## Background Information
### Why replace regular steps with scripts
Replacing a regular, well-defined series of steps with a script can:
- **Reduce token usage** — the skill no longer needs to spell out each command and parse large command output inline; the agent invokes one script and reads a compact result.
- **Improve reliability** — the logic is written and tested once, instead of being re-derived by the agent on every run.
- **Improve determinism** — the same inputs always produce the same steps and output, removing run-to-run variation.
- **Improve speed of execution** — a single script call replaces multiple round-trips of command generation, execution, and large-output parsing.
### Authoring notes for the scripts
- **Reference scripts with markdown links**, not just a bare path to the script file.
- **Include examples** in the skill showing how to run each script (sample invocation with arguments).
- **Briefly explain what each script does** where it is referenced.
- **The script output should explain what it did**, so the agent and user can understand the result without re-inspecting raw command output.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.