Skip to content

Commit 121791c

Browse files
Merge pull request #398 from microsoft/dev
fix: Enhance CosmosDBClient and DatabaseFactory for error handling and concurrency
2 parents 8948c30 + 74d876d commit 121791c

File tree

8 files changed

+317
-106
lines changed

8 files changed

+317
-106
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: AZD Template Validation
2+
3+
on:
4+
schedule:
5+
- cron: '30 1 * * 4' # Every Thursday at 7:00 AM IST (1:30 AM UTC)
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
id-token: write
11+
pull-requests: write
12+
13+
jobs:
14+
template_validation:
15+
runs-on: ubuntu-latest
16+
name: azd template validation
17+
environment: production
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v6
21+
22+
- name: Set timestamp
23+
run: echo "HHMM=$(date -u +'%H%M')" >> $GITHUB_ENV
24+
25+
- name: Validate Azure Template
26+
id: validation
27+
uses: microsoft/template-validation-action@v0.4.3
28+
with:
29+
validateAzd: ${{ vars.TEMPLATE_VALIDATE_AZD }}
30+
validateTests: ${{ vars.TEMPLATE_VALIDATE_TESTS }}
31+
useDevContainer: ${{ vars.TEMPLATE_USE_DEV_CONTAINER }}
32+
33+
env:
34+
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
35+
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
36+
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
37+
AZURE_ENV_NAME: azd-${{ secrets.AZURE_ENV_NAME }}-${{ env.HHMM }}
38+
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
39+
AZURE_ENV_AI_SERVICE_LOCATION: ${{ secrets.AZURE_AI_DEPLOYMENT_LOCATION || secrets.AZURE_LOCATION }}
40+
AZURE_ENV_MODEL_CAPACITY: 1
41+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
42+
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
43+
44+
- name: Print result
45+
shell: bash
46+
run: cat "${{ steps.validation.outputs.resultFile }}"

.github/workflows/azure-dev.yml

Lines changed: 64 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,65 @@
1-
name: Azure Template Validation
2-
on:
3-
workflow_dispatch:
4-
5-
permissions:
6-
contents: read
7-
id-token: write
8-
pull-requests: write
9-
jobs:
10-
template_validation_job:
11-
runs-on: ubuntu-latest
1+
name: Azure Dev Deploy
2+
3+
on:
4+
workflow_dispatch:
5+
6+
permissions:
7+
contents: read
8+
id-token: write
9+
10+
jobs:
11+
deploy:
12+
runs-on: ubuntu-latest
1213
environment: production
13-
name: Template validation
14-
steps:
15-
# Step 1: Checkout the code from your repository
16-
- name: Checkout code
17-
uses: actions/checkout@v6
18-
# Step 2: Validate the Azure template using microsoft/template-validation-action
19-
- name: Validate Azure Template
20-
uses: microsoft/template-validation-action@v0.4.3
21-
with:
22-
validateAzd: true
23-
useDevContainer: false
24-
id: validation
25-
env:
26-
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
27-
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
28-
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
29-
AZURE_ENV_NAME: ${{ secrets.AZURE_ENV_NAME }}
30-
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
31-
AZURE_AI_DEPLOYMENT_LOCATION : ${{ secrets.AZURE_AI_DEPLOYMENT_LOCATION }}
32-
AZURE_ENV_MODEL_CAPACITY : 1
33-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34-
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
35-
# Step 3: Print the result of the validation
36-
- name: Print result
37-
run: cat ${{ steps.validation.outputs.resultFile }}
14+
env:
15+
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
16+
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
17+
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
18+
AZURE_ENV_NAME: ${{ secrets.AZURE_ENV_NAME }}
19+
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
20+
AZURE_AI_DEPLOYMENT_LOCATION: ${{ secrets.AZURE_AI_DEPLOYMENT_LOCATION || secrets.AZURE_LOCATION }}
21+
AZURE_ENV_MODEL_CAPACITY: 1
22+
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
23+
steps:
24+
- name: Checkout code
25+
uses: actions/checkout@v6
26+
27+
- name: Set timestamp and env name
28+
run: |
29+
HHMM=$(date -u +'%H%M')
30+
echo "AZURE_ENV_NAME=azd-${{ vars.AZURE_ENV_NAME }}-${HHMM}" >> $GITHUB_ENV
31+
32+
- name: Install azd
33+
uses: Azure/setup-azd@v2
34+
35+
- name: Login to Azure
36+
uses: azure/login@v2
37+
with:
38+
client-id: ${{ secrets.AZURE_CLIENT_ID }}
39+
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
40+
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
41+
42+
- name: Login to AZD
43+
shell: bash
44+
run: |
45+
azd auth login \
46+
--client-id "$AZURE_CLIENT_ID" \
47+
--federated-credential-provider "github" \
48+
--tenant-id "$AZURE_TENANT_ID"
49+
50+
- name: Provision and deploy
51+
shell: bash
52+
run: |
53+
set -e
54+
55+
if ! azd env select "$AZURE_ENV_NAME"; then
56+
azd env new "$AZURE_ENV_NAME" --subscription "$AZURE_SUBSCRIPTION_ID" --location "$AZURE_LOCATION" --no-prompt
57+
fi
58+
59+
azd config set defaults.subscription "$AZURE_SUBSCRIPTION_ID"
60+
azd env set AZURE_SUBSCRIPTION_ID "$AZURE_SUBSCRIPTION_ID"
61+
azd env set AZURE_LOCATION "$AZURE_LOCATION"
62+
azd env set AZURE_ENV_AI_SERVICE_LOCATION "${AZURE_AI_DEPLOYMENT_LOCATION:-$AZURE_LOCATION}"
63+
azd env set AZURE_ENV_MODEL_CAPACITY "$AZURE_ENV_MODEL_CAPACITY"
64+
65+
azd up --no-prompt

infra/main.json

Lines changed: 35 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
"metadata": {
66
"_generator": {
77
"name": "bicep",
8-
"version": "0.41.2.15936",
9-
"templateHash": "3093757051086668797"
8+
"version": "0.42.1.51946",
9+
"templateHash": "7222423000870488333"
1010
},
1111
"name": "Modernize Your Code Solution Accelerator",
1212
"description": "CSA CTO Gold Standard Solution Accelerator for Modernize Your Code. \r\n"
@@ -5052,8 +5052,8 @@
50525052
"metadata": {
50535053
"_generator": {
50545054
"name": "bicep",
5055-
"version": "0.41.2.15936",
5056-
"templateHash": "8663094775498995429"
5055+
"version": "0.42.1.51946",
5056+
"templateHash": "3406526791248457038"
50575057
}
50585058
},
50595059
"definitions": {
@@ -12895,11 +12895,11 @@
1289512895
},
1289612896
"dependsOn": [
1289712897
"applicationInsights",
12898-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]",
1289912898
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').ods)]",
12900-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').agentSvc)]",
1290112899
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').monitor)]",
1290212900
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').oms)]",
12901+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').storageBlob)]",
12902+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').agentSvc)]",
1290312903
"dataCollectionEndpoint",
1290412904
"logAnalyticsWorkspace",
1290512905
"virtualNetwork"
@@ -25611,8 +25611,8 @@
2561125611
"metadata": {
2561225612
"_generator": {
2561325613
"name": "bicep",
25614-
"version": "0.41.2.15936",
25615-
"templateHash": "17285204072656433491"
25614+
"version": "0.42.1.51946",
25615+
"templateHash": "16969185198334420434"
2561625616
},
2561725617
"name": "AI Services and Project Module",
2561825618
"description": "This module creates an AI Services resource and an AI Foundry project within it. It supports private networking, OpenAI deployments, and role assignments."
@@ -26952,8 +26952,8 @@
2695226952
"metadata": {
2695326953
"_generator": {
2695426954
"name": "bicep",
26955-
"version": "0.41.2.15936",
26956-
"templateHash": "5121330425393020264"
26955+
"version": "0.42.1.51946",
26956+
"templateHash": "4140498216793917924"
2695726957
}
2695826958
},
2695926959
"definitions": {
@@ -27910,7 +27910,10 @@
2791027910
"raiPolicyName": "[tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'raiPolicyName')]",
2791127911
"versionUpgradeOption": "[tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'versionUpgradeOption')]"
2791227912
},
27913-
"sku": "[coalesce(tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'sku'), createObject('name', parameters('sku'), 'capacity', tryGet(parameters('sku'), 'capacity'), 'tier', tryGet(parameters('sku'), 'tier'), 'size', tryGet(parameters('sku'), 'size'), 'family', tryGet(parameters('sku'), 'family')))]"
27913+
"sku": "[coalesce(tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'sku'), createObject('name', parameters('sku'), 'capacity', tryGet(parameters('sku'), 'capacity'), 'tier', tryGet(parameters('sku'), 'tier'), 'size', tryGet(parameters('sku'), 'size'), 'family', tryGet(parameters('sku'), 'family')))]",
27914+
"dependsOn": [
27915+
"aiProject"
27916+
]
2791427917
},
2791527918
"cognitiveService_lock": {
2791627919
"condition": "[and(not(empty(coalesce(parameters('lock'), createObject()))), not(equals(tryGet(parameters('lock'), 'kind'), 'None')))]",
@@ -28664,8 +28667,8 @@
2866428667
"metadata": {
2866528668
"_generator": {
2866628669
"name": "bicep",
28667-
"version": "0.41.2.15936",
28668-
"templateHash": "10989408486030617267"
28670+
"version": "0.42.1.51946",
28671+
"templateHash": "2422737205646151487"
2866928672
}
2867028673
},
2867128674
"definitions": {
@@ -28818,8 +28821,8 @@
2881828821
"metadata": {
2881928822
"_generator": {
2882028823
"name": "bicep",
28821-
"version": "0.41.2.15936",
28822-
"templateHash": "7933643033523871028"
28824+
"version": "0.42.1.51946",
28825+
"templateHash": "11911242767938607365"
2882328826
}
2882428827
},
2882528828
"definitions": {
@@ -29036,8 +29039,8 @@
2903629039
"metadata": {
2903729040
"_generator": {
2903829041
"name": "bicep",
29039-
"version": "0.41.2.15936",
29040-
"templateHash": "5121330425393020264"
29042+
"version": "0.42.1.51946",
29043+
"templateHash": "4140498216793917924"
2904129044
}
2904229045
},
2904329046
"definitions": {
@@ -29994,7 +29997,10 @@
2999429997
"raiPolicyName": "[tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'raiPolicyName')]",
2999529998
"versionUpgradeOption": "[tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'versionUpgradeOption')]"
2999629999
},
29997-
"sku": "[coalesce(tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'sku'), createObject('name', parameters('sku'), 'capacity', tryGet(parameters('sku'), 'capacity'), 'tier', tryGet(parameters('sku'), 'tier'), 'size', tryGet(parameters('sku'), 'size'), 'family', tryGet(parameters('sku'), 'family')))]"
30000+
"sku": "[coalesce(tryGet(coalesce(parameters('deployments'), createArray())[copyIndex()], 'sku'), createObject('name', parameters('sku'), 'capacity', tryGet(parameters('sku'), 'capacity'), 'tier', tryGet(parameters('sku'), 'tier'), 'size', tryGet(parameters('sku'), 'size'), 'family', tryGet(parameters('sku'), 'family')))]",
30001+
"dependsOn": [
30002+
"aiProject"
30003+
]
2999830004
},
2999930005
"cognitiveService_lock": {
3000030006
"condition": "[and(not(empty(coalesce(parameters('lock'), createObject()))), not(equals(tryGet(parameters('lock'), 'kind'), 'None')))]",
@@ -30748,8 +30754,8 @@
3074830754
"metadata": {
3074930755
"_generator": {
3075030756
"name": "bicep",
30751-
"version": "0.41.2.15936",
30752-
"templateHash": "10989408486030617267"
30757+
"version": "0.42.1.51946",
30758+
"templateHash": "2422737205646151487"
3075330759
}
3075430760
},
3075530761
"definitions": {
@@ -30902,8 +30908,8 @@
3090230908
"metadata": {
3090330909
"_generator": {
3090430910
"name": "bicep",
30905-
"version": "0.41.2.15936",
30906-
"templateHash": "7933643033523871028"
30911+
"version": "0.42.1.51946",
30912+
"templateHash": "11911242767938607365"
3090730913
}
3090830914
},
3090930915
"definitions": {
@@ -31917,8 +31923,8 @@
3191731923
"dependsOn": [
3191831924
"aiServices",
3191931925
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').openAI)]",
31920-
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').cognitiveServices)]",
3192131926
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').aiServices)]",
31927+
"[format('avmPrivateDnsZones[{0}]', variables('dnsZoneIndex').cognitiveServices)]",
3192231928
"virtualNetwork"
3192331929
]
3192431930
},
@@ -31974,8 +31980,8 @@
3197431980
"metadata": {
3197531981
"_generator": {
3197631982
"name": "bicep",
31977-
"version": "0.41.2.15936",
31978-
"templateHash": "3881415837167031634"
31983+
"version": "0.42.1.51946",
31984+
"templateHash": "522477461329004641"
3197931985
}
3198031986
},
3198131987
"definitions": {
@@ -40219,8 +40225,8 @@
4021940225
"metadata": {
4022040226
"_generator": {
4022140227
"name": "bicep",
40222-
"version": "0.41.2.15936",
40223-
"templateHash": "15962472891869337617"
40228+
"version": "0.42.1.51946",
40229+
"templateHash": "15355322017409205910"
4022440230
}
4022540231
},
4022640232
"definitions": {
@@ -44082,8 +44088,8 @@
4408244088
"metadata": {
4408344089
"_generator": {
4408444090
"name": "bicep",
44085-
"version": "0.41.2.15936",
44086-
"templateHash": "17636459140972536078"
44091+
"version": "0.42.1.51946",
44092+
"templateHash": "4242598725709304634"
4408744093
}
4408844094
},
4408944095
"definitions": {

infra/modules/ai-foundry/dependencies.bicep

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ resource cognitiveService_deployments 'Microsoft.CognitiveServices/accounts/depl
208208
size: sku.?size
209209
family: sku.?family
210210
}
211+
dependsOn: [
212+
aiProject
213+
]
211214
}
212215
]
213216

0 commit comments

Comments
 (0)