[EPIC] Script Provisioning Provider Extension
- Dominant language
- Go
- Stars
- 569
- Forks
- 364
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 136
Description
## Epic: Script Provisioning Provider Extension
The Script Provisioning Provider is designed as a pragmatic onramp for teams adopting Azure with azd. It enables teams with existing script-based provisioning workflows to immediately benefit from azd's environment management, parameter resolution, and deployment lifecycle -- while providing a natural migration path toward declarative IaC (Bicep or Terraform) over time.
### Context
- **Parent epic**: #7465 (Provisioning Providers in the AZD Extension Framework)
- **Framework PR**: #7482 (adds `WithProvisioningProvider()` fluent API and gRPC protocol)
### Problem
Today, `azd provision` and `azd down` only work with declarative IaC tools (Bicep and Terraform). Many teams manage Azure infrastructure with imperative shell scripts that call `az cli`, Azure PowerShell, or other Azure tooling. These teams cannot adopt azd without rewriting their provisioning workflows.
The provisioning provider extensibility framework (#7465) enables extensions to register custom provisioning providers via gRPC. This epic delivers a **Script Provisioning Provider Extension** (`microsoft.azd.scripts`) -- a first-party extension that allows users to configure shell scripts (bash/PowerShell) as their provisioning and teardown workflow in `azure.yaml`.
### Architecture
The extension is a **pure provisioning provider** -- no custom CLI commands, no MCP server, no lifecycle event handlers. It registers a `"scripts"` provider via `WithProvisioningProvider("scripts", factory)` and implements the full `azdext.ProvisioningProvider` interface.
Key components:
- **ProviderConfig / ScriptConfig** -- typed configuration parsed from `infra.config` in `azure.yaml`
- **EnvResolver** -- 4-layer environment variable merging (secrets > env > azd env > OS)
- **ScriptExecutor** -- runs bash/pwsh scripts with merged environment, streams stdout/stderr
- **OutputCollector** -- discovers and parses `outputs.json` files, merges across scripts
### Work Items
| # | Issue | Title | Status |
|---|-------|-------|--------|
| 1 | #7734 | Extension scaffold | Not started |
| 2 | #7735 | Config design and parsing | Not started |
| 3 | #7736 | Full provider implementation | Not started |
### Dependency Order
```
#7734 Extension Scaffold (no dependencies -- start here)
|
v
#7735 Config Design & Parsing (depends on scaffold)
|
v
#7736 Full Provider Implementation (depends on config parsing)
```
Contributor guide
Assessment
This issue has not been assessed yet.