@@ -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'
0 commit comments