alz/github/actions/bicep/templates/workflows/ci-template.yaml (112 lines of code) (raw):
---
name: Continuous Integration
on:
workflow_call:
jobs:
validate:
name: Validate Bicep
runs-on:
${runner_name}
environment: ${environment_name_plan}
permissions:
id-token: write
contents: read
steps:
- name: Checkout Bicep Module
uses: actions/checkout@v4
- name: Install Bicep and Update Az Module
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-installer@main
- name: Check for Custom Modules
shell: pwsh
working-directory: config
run: |
if (Test-Path -Path ./custom-modules/*)
{
echo "CUSTOM_MODULES=true" >> $env:GITHUB_ENV
echo "Set CUSTOM_MODULES to true"
}
else
{
echo "Set CUSTOM_MODULES to false"
}
- name: Bicep Build & Lint All Custom Modules
shell: pwsh
if: $${{ env.CUSTOM_MODULES == 'true' }}
working-directory: config/custom-modules
run: |
$output = @()
Get-ChildItem -Recurse -Filter '*.bicep' | ForEach-Object {
Write-Information "==> Attempting Bicep Build For File: $_" -InformationAction Continue
$bicepOutput = bicep build $_.FullName 2>&1
if ($LastExitCode -ne 0)
{
foreach ($item in $bicepOutput) {
$output += "$($item) `r`n"
}
}
else
{
echo "Bicep Build Successful for File: $_"
}
}
if ($output.length -gt 0) {
throw $output
}
whatif:
name: What If
runs-on:
${runner_name}
concurrency: ${backend_azure_storage_account_container_name}
environment: ${environment_name_plan}
permissions:
id-token: write
contents: read
env:
PARAMETERS_FILE_NAME: parameters.json
steps:
- name: Checkout Bicep Module
uses: actions/checkout@v4
- name: Get Bicep Variables
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-variables@main
with:
parameters_file_name: $${{ env.PARAMETERS_FILE_NAME }}
%{ for on_demand_folder in on_demand_folders ~}
- name: Get On Demand Folder ${on_demand_folder.target}
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-on-demand-folder@main
with:
repository: "${on_demand_folder_repository}"
releaseArtifactName: "${on_demand_folder_artifact_name}"
releaseVersion: "$${{ env.RELEASE_VERSION }}"
sourcePath: "${on_demand_folder.source}"
targetPath: "${on_demand_folder.target}"
%{ endfor ~}
- name: Install Bicep and Update Az Module
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-installer@main
- name: OIDC Login to Tenant
uses: azure/login@v2
with:
client-id: $${{ vars.AZURE_CLIENT_ID }}
tenant-id: $${{ vars.AZURE_TENANT_ID }}
subscription-id: $${{ vars.AZURE_SUBSCRIPTION_ID }}
enable-AzPSSession: true
- name: First Deployment Check
id: firstDeploymentCheck
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-first-deployment-check@main
with:
managementGroupId: $${{ env.MANAGEMENT_GROUP_ID }}
%{ for script_file in script_files ~}
- name: 'What If: ${script_file.displayName}'
uses: ${organization_name}/${repository_name_templates}/.github/actions/bicep-deploy@main
with:
displayName: '${script_file.displayName}'
templateFilePath: '${script_file.templateFilePath}'
templateParametersFilePath: '${script_file.templateParametersFilePath}'
managementGroupId: '${script_file.managementGroupIdVariable}'
subscriptionId: '${script_file.subscriptionIdVariable}'
resourceGroupName: '${script_file.resourceGroupNameVariable}'
location: '$${{ env.LOCATION }}'
deploymentType: '${script_file.deploymentType}'
firstRunWhatIf: '${script_file.firstRunWhatIf}'
firstDeployment: '$${{ env.firstDeployment }}'
whatIfEnabled: 'true'
%{ endfor ~}