Skip to content

Commit b6e4854

Browse files
Merge pull request #126 from Harmanpreet-Microsoft/main
ci: Enhance Azure Dev workflow with submodule support and service principal configuration
2 parents ae8ee57 + d0985cd commit b6e4854

File tree

3 files changed

+62
-5
lines changed

3 files changed

+62
-5
lines changed

.github/workflows/azd-template-validation.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
name: AZD Template Validation
2-
on:
2+
on:
33
workflow_dispatch:
44
push:
55
branches:
66
- main
7+
paths:
8+
- 'infra/**'
9+
- 'azure.yaml'
10+
- 'scripts/**'
11+
- '.github/workflows/azure-dev.yml'
712

813
permissions:
914
contents: read
@@ -16,6 +21,8 @@ jobs:
1621
name: azd template validation
1722
steps:
1823
- uses: actions/checkout@v4
24+
with:
25+
submodules: recursive
1926

2027
# This postprovision cleanup step (Stage 19) has been removed from azure.yaml because
2128
# azd down was failing in the pipeline. As a workaround, we are removing this step
@@ -36,6 +43,9 @@ jobs:
3643
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
3744
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
3845
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46+
TEMP: /tmp
3947
fabricCapacityMode: 'none'
48+
AZURE_PRINCIPAL_ID: ${{ vars.PRINCIPAL_ID || secrets.AZURE_CLIENT_ID }}
49+
AZURE_PRINCIPAL_TYPE: 'ServicePrincipal'
4050
- name: print result
4151
run: cat ${{ steps.validation.outputs.resultFile }}

.github/workflows/azure-dev.yml

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,26 +24,73 @@ jobs:
2424
AZURE_RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
2525
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
2626
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
27-
AZURE_USER_OBJECT_ID: ''
27+
AZURE_PRINCIPAL_TYPE: 'ServicePrincipal'
28+
TEMP: /tmp
2829
steps:
2930
- name: Checkout
3031
uses: actions/checkout@v4
32+
with:
33+
submodules: recursive
34+
3135
- name: Install azd
3236
uses: Azure/setup-azd@v2
37+
3338
- name: Azure Developer CLI Login
3439
run: |
3540
azd auth login `
3641
--client-id "$Env:AZURE_CLIENT_ID" `
3742
--federated-credential-provider "github" `
38-
--tenant-id "$Env:AZURE_TENANT_ID"
43+
--tenant-id "$Env:AZURE_TENANT_ID"
3944
shell: pwsh
45+
4046
- name: Azure CLI Login
4147
uses: azure/login@v2
4248
with:
4349
client-id: ${{ vars.AZURE_CLIENT_ID }}
4450
tenant-id: ${{ vars.AZURE_TENANT_ID }}
4551
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
52+
53+
- name: Resolve Service Principal Object ID
54+
run: |
55+
# If PRINCIPAL_ID repo variable is set and is a valid GUID, use it directly
56+
if [[ "${{ vars.PRINCIPAL_ID }}" =~ ^[0-9a-fA-F-]{36}$ ]]; then
57+
echo "Using PRINCIPAL_ID from repo variables"
58+
echo "AZURE_PRINCIPAL_ID=${{ vars.PRINCIPAL_ID }}" >> $GITHUB_ENV
59+
else
60+
# Resolve the Object ID from the Application (Client) ID
61+
# Role assignments require the SP Object ID, not the Client/App ID
62+
echo "Resolving Service Principal Object ID from Client ID..."
63+
SP_OBJECT_ID=$(az ad sp show --id "${{ vars.AZURE_CLIENT_ID }}" --query id -o tsv 2>/dev/null)
64+
if [[ -z "$SP_OBJECT_ID" ]]; then
65+
echo "::error::Failed to resolve Service Principal Object ID from Client ID: ${{ vars.AZURE_CLIENT_ID }}"
66+
exit 1
67+
fi
68+
echo "Resolved SP Object ID: $SP_OBJECT_ID"
69+
echo "AZURE_PRINCIPAL_ID=$SP_OBJECT_ID" >> $GITHUB_ENV
70+
fi
71+
72+
- name: Create Resource Group if needed
73+
run: |
74+
# Use provided RG name or derive from environment name
75+
RESOURCE_GROUP="${AZURE_RESOURCE_GROUP:-rg-${AZURE_ENV_NAME}}"
76+
echo "Using resource group: $RESOURCE_GROUP"
77+
78+
RG_EXISTS=$(az group exists --name "$RESOURCE_GROUP")
79+
if [ "$RG_EXISTS" = "false" ]; then
80+
echo "Creating resource group: $RESOURCE_GROUP"
81+
az group create --name "$RESOURCE_GROUP" --location ${{ vars.AZURE_LOCATION }}
82+
else
83+
echo "Resource group already exists: $RESOURCE_GROUP"
84+
fi
85+
86+
# Set for subsequent steps
87+
echo "RESOURCE_GROUP=$RESOURCE_GROUP" >> $GITHUB_ENV
88+
4689
- name: Provision Infrastructure
90+
id: provision-main
4791
run: azd provision --no-prompt
4892
env:
49-
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
93+
AZD_INITIAL_ENVIRONMENT_CONFIG: ${{ secrets.AZD_INITIAL_ENVIRONMENT_CONFIG }}
94+
AZURE_PRINCIPAL_TYPE: 'ServicePrincipal'
95+
fabricCapacityMode: 'none'
96+
fabricWorkspaceMode: 'none'

infra/main.bicepparam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ param location = readEnvironmentVariable('AZURE_LOCATION', '')
99
param cosmosLocation = readEnvironmentVariable('AZURE_COSMOS_LOCATION', '')
1010
// Entra object ID of the identity to grant RBAC (user, group, service principal, or UAI). Set this if Graph lookup is blocked.
1111
param principalId = readEnvironmentVariable('AZURE_PRINCIPAL_ID', '')
12-
param principalType = 'User'
12+
param principalType = readEnvironmentVariable('AZURE_PRINCIPAL_TYPE', 'User')
1313

1414
// ========================================
1515
// OPTIONAL INPUTS (Existing Resources)

0 commit comments

Comments
 (0)