Format Bicep
This skill reformats Bicep code to enhance readability and maintainability by applying consistent styling, indentation, and organization.
Guidelines
To format a Bicep file, follow these guidelines:
Bicep structure
To avoid chaos keep a strict structure for Bicep files. The recommended structure is as follows:
////////////
// Imports
////////////
////////////
// Metadata (optional)
////////////
////////////
// TargetScope (optional)
////////////
////////////
// Parameters
////////////
////////////
// Variables
////////////
////////////
// Existing resource references
////////////
////////////
// Resources / Modules
////////////
////////////
// Outputs
////////////
////////////
// User-Defined Types Types
////////////
////////////
// Functions
////////////
Do not add blank lines between section comment headers and the first definition in that section.
Correct:
////////////
// Parameters
////////////
@description('The supported Azure location')
param location string
Wrong:
////////////
// Parameters
////////////
@description('The supported Azure location')
param location string
Property order on resource and modules
Resource definitions should follow a consistent property order:
resource <name> '<type>@<apiVersion>' = {
name: '<name>'
location: '<location>'
tags: '<tags>'
<property>: '<otherProperties>' // other resource-specific properties in alphabetical order
dependsOn: [
// dependencies
] // optional, prefer implicit dependencies
properties: {
// resource-specific properties
}
}
Module defitinitions should follow a consistent property order. If the module has the name property, it should be removed since the Azure Resource Manager handles the deployment name.
module <name> '<path>' = {
scope: '<scope>' // optional
identity: {
// identity properties
} // optional
dependsOn: [
// dependencies
] // optional, prefer implicit dependencies
params: {
// module parameters
}
}
Execution steps
When formatting a Bicep file, perform these steps in order:
-
Analyze the current structure
- Identify existing sections (parameters, variables, resources, etc.)
- Note any missing required sections
-
Reorganize sections according to the standard structure
- Move items to their correct section
- Add section comment headers if missing
- Ensure to return feedback about any significant structural changes made. DO NOT REMOVE any code, only reorganize it.
-
Apply property ordering
- Reorder resource/module properties as specified
- Ensure decorators are in the correct order
-
Run bicep format
- Run command:
bicep format <.bicep file>
- Run command:
-
Remove commented code
- Delete any commented-out code blocks
- Retain comments that provide context or explanations
-
Validate the result
- Ensure no syntax errors were introduced
- Verify the file compiles successfully
Use the following command to compile and validate the Bicep file:
bicep build <.bicep file> --stdout --no-restore
Examples
Before Formatting
param location string='eastus'
var storageAccountName='mystorageaccount'
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01'={
name:storageAccountName
location:location
properties:{
accessTier:'Hot'
}
sku:{name:'Standard_LRS'}
}
After Formatting
/*
Parameters
*/
@sys.description('The Azure region for resource deployment')
param location string = 'eastus'
/*
Variables
*/
var storageAccountName = 'mystorageaccount'
/*
Resources
*/
resource storageAccount 'Microsoft.Storage/storageAccounts@2021-09-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
properties: {
accessTier: 'Hot'
}
}