skills/azure-app-onboard/deploy/SKILL.md
# Deploy — IaC Execution & Health Verification ## Quick Reference | Property | Value | |----------|-------| | Best for | Executing validated IaC against Azure, health-checking deployed resources | | Inputs | `prepare-plan.json` + `scaffold-manifest.json` from `.copilot-azure/sessions/{id}/` | | Outputs | `deploy-result.json` written to session directory | | Parent | [azure-app-onboard](../SKILL.md) | ## When to Use This Skill Invoked by the `azure-app-onboard` orchestrator at Phase 4 when `s
npx skillsauth add microsoft/azure-skills skills/azure-app-onboard/deployInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Property | Value |
|----------|-------|
| Best for | Executing validated IaC against Azure, health-checking deployed resources |
| Inputs | prepare-plan.json + scaffold-manifest.json from .copilot-azure/sessions/{id}/ |
| Outputs | deploy-result.json written to session directory |
| Parent | azure-app-onboard |
Invoked by the azure-app-onboard orchestrator at Phase 4 when scaffold-manifest.json exists with files[] and validationResult. Not directly user-routable.
Return to orchestrator: When complete, return control to
azure-app-onboardfor handoff (Step 10). Do NOT start new phases.
| Scenario | Use Instead |
|----------|-------------|
| Plan architecture, map services, estimate costs | prepare |
| Generate IaC files from a plan | azure-app-onboard Step 7 (scaffold) |
| Run azd up or execute existing deployment templates | azure-deploy |
| Debug a running app after deployment | azure-diagnostics |
| Optimize existing Azure spending | azure-cost |
⛔ Sub-agent delegation is MANDATORY for Step 0. Read
subagent-preflight.md, then dispatch as ataskwith the COMPLETE and UNMODIFIED template text between<<<TEMPLATE_START>>>/<<<TEMPLATE_END>>>delimiters. Do NOT summarize or rewrite the template — the sub-agent needs every "Read [file]" instruction to produce a correctdeploy-checklist.md. Append session artifact data AFTER the template block. If your next action after reading the template is anything other thantask, you are executing it inline instead of delegating.
⛔ Healing loop: ask user after 3 attempts, then every 5 (counter =
healingAttempts[].length).
⛔ Region lock: Before
az deploymentretry, compare--locationagainstprepare-plan.json.deploymentVariables.location. If changed → re-approval gate required. Update plan after approval.
⛔ After compaction or any
az deployment/az webapp deploy/az acr build/failed health check: re-readdeploy-checklist.md. If missing → fill fromdeploy-checklist-template.md. On significant context loss: also re-read this SKILL.md.
| # | Step | Action | Artifact | Reference |
|---|------|--------|----------|-----------|
| 0 | Dispatch preflight sub-agent | ⛔ You MUST dispatch subagent-preflight.md as a task. ⛔ agent_type: "task" — NEVER "general-purpose". Read the template, then your NEXT action MUST be task. If after reading the template your next action is powershell, view, or anything other than task, STOP — you are executing inline instead of delegating. Writes deploy-checklist.md. view it immediately after return. | deploy-checklist.md | ⛔ You MUST read subagent-preflight.md |
| 1 | Read upstream artifacts | Load prepare-plan.json + scaffold-manifest.json. Check validationResult. Resolve subscription + deployment variables. | — | — |
| 3 | Preflight checks | Auth, mandatory what-if preview, RBAC, RG per deploy-checklist.md § Preflight. | — | ⛔ You MUST read deploy-checklist.md (re-read if compaction occurred) |
| 4 | Deploy approval gate | Present cost + resource summary per deploy-checklist.md § Deploy approval gate format. | — | — |
| 5b | Write deploy-result.json skeleton | ⛔ Read deploy-schemas.ts, write skeleton (status: "in-progress"). Must exist BEFORE first az command. | deploy-result.json | ⛔ You MUST read deploy-schemas.ts |
| 6 | Execute deployment | ⛔ BEFORE az deployment sub create: Generate portal link — $dn="{deploymentName}"; $r="/subscriptions/{subId}/providers/Microsoft.Resources/deployments/$dn"; $l="https://portal.azure.com/#view/Microsoft_Azure_Resources/DeploymentDetails.MenuView/~/overview/id/$($r.Replace('/','%2F'))"; Write-Output "LINK=$l". ⛔ Auto-open link in browser: Start-Process $l 2>$null. Print bare URL in chat (ctrl-clickable).<br>Auto-generate ALL @secure() params (openssl rand -base64 32 \| tr -d '/+='), NEVER ask_user for passwords; on retry reuse from deploy-secrets.env or Key Vault — NEVER regenerate (see deploy-safety.md § Deploy Checklist). THEN deploy IaC. | — | ⛔ You MUST read deploy-checklist.md § Execute deployment |
| 6b | Deploy application code | ⛔ Deploy code for EVERY service in prepare-plan.json.services[]. Follow deploy-checklist.md § Code deploy. | — | ⛔ You MUST read deploy-checklist.md § Code deploy |
| 7 | Health-check + SCM re-disable | HTTP GET per endpoint (max 3 iterations). ⛔ Multi-service apps: Also inspect the response body for error patterns (connection refused, MODULE_NOT_FOUND, localhost, SET-IN-DEPLOY-PHASE) — HTTP 200 alone does not mean functional when the app depends on another service or KV secrets. Then ⛔ for EVERY App Service/Functions app run BOTH commands — no exceptions: az rest --method put --url "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app}/basicPublishingCredentialsPolicies/scm?api-version=2023-12-01" --headers "Content-Type=application/json" --body '{"properties":{"allow":false}}' then verify: az rest --method get --url "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Web/sites/{app}/basicPublishingCredentialsPolicies/scm?api-version=2023-12-01" --query properties.allow -o tsv (must return false). | deploy-result.json full | ⛔ You MUST read deploy-checklist.md § Health check |
| 8 | Finalize artifacts | ⛔ Read deploy-schemas.ts. ⛔ Re-read deploy-checklist.md § Artifact verification — follow ALL 5 checks. ⛔ No "live"/handoff message until you overwrite the skeleton deploy-result.json — flip status off "in-progress" (→ succeeded/failed) and fill healthStatus, endpoints, completedUtc, deploymentNames, healingAttempts. Write deployment-summary.md (status table + health + portal link(s) + cleanup commands — same content as your handoff message). Update context.json — add "deploy" to completedPhases, currentPhase: null, lastModifiedUtc. Read back to confirm status != "in-progress" and "deploy" ∈ completedPhases. ⛔ Then STOP — return to orchestrator. No further CLI commands. | deploy-result.json final + deployment-summary.md + context.json update | ⛔ You MUST read deploy-schemas.ts + ⛔ Re-read deploy-checklist.md § Artifact verification |
| 9 | Error handling + healing | ⛔ Only if Steps 6/6b/7 returned nonzero exit code or health check failed. Skip entirely on clean deploys. Classify errors, healing loop, PLAN_LEVEL_CHANGE re-approval per deploy-checklist.md § During healing. ⛔ Even on unrecoverable failure: write deploy-result.json with status: "failed" and errorDetails before returning to orchestrator — the artifact must always exist. | — | ⛔ You MUST read error-classification.md |
development
# Azure App Onboard Scaffold — IaC Generation + Self-Review Generate deployment-ready infrastructure code from an architecture plan, verify it with adversarial self-review, and bridge to validation — all without deploying. ## Quick Reference | Property | Value | |----------|-------| | Parent | [azure-app-onboard](../SKILL.md) | | Best for | Turning `prepare-plan.json` service list into Bicep templates with secure-by-default patterns | | Inputs | `prepare-plan.json` (services, naming, quotas),
devops
# Prepare — Architecture Planning & Cost Estimation ## Quick Reference | Property | Value | |----------|-------| | Best for | Mapping app components to Azure services with cost estimation and quota validation | | Inputs | `prereq-output.json` + `context.json` from `.copilot-azure/sessions/{id}/` | | Outputs | `prepare-plan.json` written to session directory | | Parent | [azure-app-onboard](../SKILL.md) | ## When to Use This Skill Invoked by the `azure-app-onboard` orchestrator at Phase 2 whe
tools
End-to-end orchestrator: from a business idea, app idea, or existing app to running Azure deployment with cost estimates and pre-deploy approval. Analyzes your app, auto-detects the right Azure services, scaffolds infrastructure code, and deploys — tailored to your app, not a template. Handles moving existing apps to Azure without rewriting or with minimal changes. WHEN: bring your app to Azure, plan my app, cost to run, is my code ready to deploy, deploy my app to the cloud, deploy all my services, what Azure services do I need, plan my Azure deployment, deploy my new app to Azure, one-click deploy, I have an app and want it on Azure, migrate my app to Azure, help me get started, build an app, no code yet, starter project. DO NOT USE FOR: running azd up (use azure-deploy), optimizing existing costs (use azure-cost), code readiness checks only (use azure-app-onboard-prereq).
development
Assess whether source code is ready to deploy to Azure — the check BEFORE infrastructure work. Evaluates build health, app completeness, dependencies and local services, stack compatibility, and deployment feasibility. Answers questions about what your app needs before it can be deployed — frameworks, dependencies, and configuration. Checks whether dependencies are compatible and identifies deployment blockers and unsupported frameworks. WHEN: "evaluate my repo", "is my app ready to deploy", "what does my app need to deploy", "what do I need before deploying", "does my app need", "can I ship this to Azure", "scan my repo for issues", "is this app deployable", "check if my app is ready for Azure", "do I need a Dockerfile", "what's blocking my deployment", "are there any blockers", "are my dependencies compatible", "does Azure support my framework", "what needs to change before deploying", "check my app configuration".