All skills
microsoft avatar

/azure-prepare

@7995851 official

Prepare azd-based Azure projects for deployment: generates azure.yaml, infrastructure (Bicep/Terraform), and Dockerfiles for the Azure Developer CLI (azd) workflow. USE ONLY when the user explicitly wants to use azd as the deployment tool, or the project already has an azure.yaml file. DO NOT USE FOR: non-azd deployments, Python App Service code-only deploys (use python-appservice-deploy), or cross-cloud migration (use azure-cloud-migrate). WHEN: prepare app for azd, create azure.yaml, set up azd infrastructure, modernize app for Azure with azd, deploy with azd, function app, timer trigger, service bus trigger, event-driven function, managed identity, generate Bicep, generate Terraform, create and deploy to Azure.

Use this Skill: https://skilld.dev/gh/microsoft/github-copilot-for-azure/azure-prepare

This session only. Nothing lands on disk.

referencesservicesfunctionstemplatesrecipescommonnodejs-entry-point.md

≈1.1k tokens on demand. Your agent reads this file only when SKILL.md points to it.

Node.js Entry Point (REQUIRED)

Azure Functions Node.js v4 programming model requires an entry point file that initializes the runtime.

⛔ CRITICAL: Without this file, functions will deploy but return 404 on all endpoints.

Project Structure (CRITICAL)

The project structure MUST be:

project-root/                # ← azure.yaml project: "."
├── azure.yaml
├── package.json             # ← MUST be at ROOT, not in src/
├── host.json
├── src/
│   ├── index.js             # ← Entry point (app.setup)
│   └── functions/
│       ├── myFunction.js    # ← Functions auto-discovered
│       └── ...
└── infra/

⛔ CRITICAL: package.json MUST be at project root, NOT inside src/. The azure.yaml must have project: . (not project: ./src/).

JavaScript: src/index.js

This file MUST exist and MUST NOT be removed when replacing trigger files.

const { app } = require('@azure/functions');

app.setup({
    enableHttpStream: true,
});

TypeScript: src/index.ts

This file MUST exist and MUST NOT be removed when replacing trigger files.

import { app } from '@azure/functions';

app.setup({
    enableHttpStream: true,
});

package.json Configuration

The package.json MUST be at the project root (same level as azure.yaml).

⛔ CRITICAL: The glob pattern is REQUIRED for function discovery! Using "main": "src/index.js" alone will result in 404 on all endpoints. You MUST use the glob pattern that includes function files.

JavaScript (REQUIRED pattern)

{
  "main": "src/{index.js,functions/*.js}",
  "scripts": {
    "start": "func start"
  }
}

TypeScript (REQUIRED pattern)

{
  "main": "dist/src/{index.js,functions/*.js}",
  "scripts": {
    "build": "tsc",
    "prestart": "npm run build",
    "start": "func start"
  }
}

Why the Glob Pattern is Required: The Azure Functions Node.js v4 runtime uses the main field to determine which files to load. Unlike CommonJS where require() chains work, the runtime needs ALL function files explicitly listed in the glob pattern. Without the glob, only index.js loads and functions in src/functions/ are never registered.

❌ WRONG: "main": "src/index.js" — Functions not discovered, 404 on all routes ✅ CORRECT: "main": "src/{index.js,functions/*.js}" — All functions discovered

azure.yaml Configuration

services:
  api:
    project: .           # ← ROOT directory, not ./src/
    language: js         # or ts for TypeScript
    host: function

⛔ CRITICAL: Use project: . — NOT project: ./src/. The runtime expects package.json at the project root.

Build Requirements (TypeScript only)

Before deployment, TypeScript must be compiled:

npm run build

This outputs JavaScript to dist/ which is what Azure Functions actually runs.

Common Mistakes

Mistake Symptom Fix
Using "main": "src/index.js" without glob 404 on all endpoints Use "main": "src/{index.js,functions/*.js}"
Missing src/index.js 404 on all endpoints Add the entry point file with app.setup()
Deleting src/index.js when replacing triggers 404 after recipe applied Keep index.js, only replace function files
package.json in src/ instead of root 404, functions not found Move package.json to project root
project: ./src/ in azure.yaml Deployment fails or 404 Use project: .
Missing npm run build for TypeScript 404 or old code runs Run build before deploy

⛔ #1 CAUSE OF 404 ERRORS: Using "main": "src/index.js" instead of the glob pattern. The glob src/{index.js,functions/*.js} is REQUIRED — it's not optional!

Terraform vs Bicep: Source Code is IDENTICAL

The Node.js source code and package.json are exactly the same for both IaC types.

Only the infra/ folder differs:

  • Bicep: infra/*.bicep
  • Terraform: infra/*.tf

⚠️ If you find yourself changing imports or source code because of IaC choice, something is wrong. The application code should be IaC-agnostic.

Source: SKILL.md on GitHub

1 alert8d4 checks · Risk SAFE
  • Gen Agent Trust Hub8d

    The azure-prepare skill provides a comprehensive environment for preparing Azure applications for deployment. It focuses on generating infrastructure-as-code and deployment configuration while strictly enforcing security best practices like managed identity usage and secret management via Key Vault. No malicious patterns or security risks were identified.

  • Socket8d

    5 alerts: gptAnomaly, gptSecurity

  • Snyk8d

    Risk: LOW · No issues

  • Runlayer6mo

    68/196 files flagged

Signed by skilld at 7995851. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub yesterday.

Activeupdated 3 weeks ago
metadata
{
  "author": "Microsoft",
  "version": "0.0.0-placeholder"
}
  • Infrastructure
  • azure
  • bicep
  • terraform
  • deployment
  • docker
  • functions
  • app-service

README badge

README badge for microsoft/github-copilot-for-azure/azure-prepare

Prepares Azure applications for deployment by generating infrastructure templates (Bicep or Terraform), azure.yaml configuration, and Dockerfiles. Covers new app creation, modernization, and hosting on App Service, Container Apps, or Functions—but excludes Python App Service deployments, copilot SDK apps, and cross-cloud migrations which have dedicated skills.

Generated from the current SKILL.md.

Does this skill handle Python App Service deployments?
No. Use the python-appservice-deploy skill instead for Python code-only App Service deploys.
Can I use this skill for cross-cloud migration?
No. This skill is for Azure-native preparation. Use azure-cloud-migrate for migrations from AWS, GCP, or other clouds.
Does this skill support Copilot SDK apps?
No. Use azure-hosted-copilot-sdk for apps with @github/copilot-sdk or CopilotClient.
What infrastructure templates does this skill support?
Azure Developer CLI (azd), Bicep, Terraform, and Azure CLI. The skill creates infrastructure code, Dockerfiles, and configuration files—actual deployment execution is handled by the azure-deploy skill.
Does this skill delete existing project files?
No. When adding features to existing projects, it modifies files rather than deletes them. It never removes the project or workspace directory itself.

Generated from the current SKILL.md. These answers refresh after source changes.