Skip to content

Commit f68aeaa

Browse files
Merge pull request #39 from microsoft/dev
chore: dev to main merge
2 parents 39ecca3 + d5d50b6 commit f68aeaa

5 files changed

Lines changed: 133 additions & 45 deletions

File tree

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: AZD Template Validation
2+
on:
3+
push:
4+
branches:
5+
- main
6+
7+
schedule:
8+
- cron: '30 1 * * 4' # Every Thursday at 7:00 AM IST (1:30 AM UTC)
9+
workflow_dispatch:
10+
11+
permissions:
12+
contents: read
13+
id-token: write
14+
pull-requests: write
15+
16+
jobs:
17+
template_validation:
18+
runs-on: ubuntu-latest
19+
name: azd template validation
20+
environment: production
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Set timestamp
25+
run: echo "HHMM=$(date -u +'%H%M')" >> $GITHUB_ENV
26+
27+
- name: Azure CLI Login
28+
uses: azure/login@v2
29+
with:
30+
client-id: ${{ vars.AZURE_CLIENT_ID }}
31+
tenant-id: ${{ vars.AZURE_TENANT_ID }}
32+
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
33+
34+
- uses: microsoft/template-validation-action@v0.4.3
35+
with:
36+
validateAzd: ${{ vars.TEMPLATE_VALIDATE_AZD }}
37+
validateTests: ${{ vars.TEMPLATE_VALIDATE_TESTS }}
38+
useDevContainer: ${{ vars.TEMPLATE_USE_DEV_CONTAINER }}
39+
id: validation
40+
env:
41+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
42+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
43+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
44+
AZURE_ENV_NAME: azd-${{ vars.AZURE_ENV_NAME }}-${{ env.HHMM }}
45+
AZURE_RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
46+
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
47+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
48+
DAGA_POSTPROVISION_TAGS: ${{ vars.DAGA_POSTPROVISION_TAGS }}
49+
50+
- name: print result
51+
if: always()
52+
run: cat ${{ steps.validation.outputs.resultFile }}

.github/workflows/azure-dev.yml

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,61 @@
1-
name: Azure Template Validation
1+
name: Azure Dev Deploy
22

33
on:
4+
push:
5+
branches:
6+
- main
7+
48
workflow_dispatch:
5-
schedule:
6-
# Run weekly on Sundays at midnight UTC
7-
- cron: '0 0 * * 0'
89

910
permissions:
1011
contents: read
1112
id-token: write
12-
pull-requests: write
1313

1414
jobs:
15-
template_validation_job:
15+
deploy:
1616
runs-on: ubuntu-latest
17-
name: Validate Template Standards
18-
environment: azd-template-gallery
17+
environment: production
18+
env:
19+
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
20+
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
21+
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
22+
AZURE_RESOURCE_GROUP: ${{ vars.AZURE_RESOURCE_GROUP }}
23+
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
24+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
25+
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
26+
DAGA_POSTPROVISION_TAGS: ${{ vars.DAGA_POSTPROVISION_TAGS }}
1927
steps:
20-
- uses: actions/checkout@v4
28+
- name: Checkout Code
29+
uses: actions/checkout@v4
30+
31+
- name: Set timestamp and env name
32+
run: |
33+
HHMM=$(date -u +'%H%M')
34+
echo "AZURE_ENV_NAME=azd-${{ vars.AZURE_ENV_NAME }}-${HHMM}" >> $GITHUB_ENV
35+
36+
- name: Install azd
37+
uses: Azure/setup-azd@v2
2138

22-
- uses: microsoft/template-validation-action@Latest
23-
id: validation
39+
- name: Login to Azure
40+
uses: azure/login@v2
2441
with:
25-
validateAzd: ${{ vars.AZD_VALIDATE || 'false' }}
26-
useDevContainer: ${{ vars.AZD_USE_DEV_CONTAINER || 'false' }}
27-
env:
28-
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
29-
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
30-
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
31-
AZURE_ENV_NAME: ${{ vars.AZURE_ENV_NAME }}
32-
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
33-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34-
35-
- name: print result
36-
if: always()
37-
run: cat ${{ steps.validation.outputs.resultFile }}
42+
client-id: ${{ vars.AZURE_CLIENT_ID }}
43+
tenant-id: ${{ vars.AZURE_TENANT_ID }}
44+
subscription-id: ${{ vars.AZURE_SUBSCRIPTION_ID }}
45+
46+
- name: Login to AZD
47+
shell: bash
48+
run: |
49+
azd auth login \
50+
--client-id "$AZURE_CLIENT_ID" \
51+
--federated-credential-provider "github" \
52+
--tenant-id "$AZURE_TENANT_ID"
53+
54+
- name: Provision and Deploy
55+
shell: bash
56+
run: |
57+
if ! azd env select "$AZURE_ENV_NAME"; then
58+
azd env new "$AZURE_ENV_NAME" --subscription "$AZURE_SUBSCRIPTION_ID" --location "$AZURE_LOCATION" --no-prompt
59+
fi
60+
azd config set defaults.subscription "$AZURE_SUBSCRIPTION_ID"
61+
azd up --no-prompt

.github/workflows/daga-automation-oidc.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ on:
55
push:
66
branches:
77
- main
8+
paths:
9+
- 'scripts/**/*.ps1'
10+
- 'infra/**'
11+
- 'hooks/**'
12+
- 'run.ps1'
13+
- 'azure.yaml'
14+
- 'spec.*.json'
815

916
permissions:
1017
id-token: write

azure.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ name: data-and-agent-governance-and-security-accelerator
22
metadata:
33
template: data-and-agent-governance-and-security-accelerator@1.0
44
azd-version: 1.9.0
5+
6+
requiredVersions:
7+
azd: '>= 1.9.0 != 1.23.9'
8+
bicep: '>= 0.33.0'
9+
510
infra:
611
provider: bicep
712
path: infra

hooks/postprovision.ps1

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,12 @@ function ConvertTo-TagArray {
3535
$items += ($text -split '[,\s]+' | Where-Object { $_ })
3636
}
3737
if (-not $items) {
38-
return @('foundation','dspm','defender','foundry')
38+
return @('foundation', 'dspm', 'defender', 'foundry')
3939
}
4040
$deduped = $items | ForEach-Object { $_.Trim() } | Where-Object { $_ } | Select-Object -Unique
4141
return @($deduped)
4242
}
4343

44-
function Add-TagSource {
45-
param(
46-
[System.Collections.Generic.List[object]]$Target,
47-
[object]$Source
48-
)
49-
if (-not $Target) { return }
50-
if ($null -eq $Source) { return }
51-
if ($Source -is [System.Collections.IEnumerable] -and $Source -isnot [string]) {
52-
foreach ($item in $Source) {
53-
Add-TagSource -Target $Target -Source $item
54-
}
55-
return
56-
}
57-
$Target.Add($Source) | Out-Null
58-
}
5944

6045
function Restore-StrictMode {
6146
param([object]$PreviousValue)
@@ -86,6 +71,11 @@ function Get-BicepParameterConfig {
8671
$json = & $bicepCmd.Source build-params $ParamFile --stdout 2>$null
8772
if (-not $json) { return $bag }
8873
$doc = $json | ConvertFrom-Json
74+
# Newer Bicep CLI wraps output as { parametersJson: "<json string>", ... }
75+
$paramJsonProp = $doc.PSObject.Properties['parametersJson']
76+
if ($paramJsonProp -and $paramJsonProp.Value) {
77+
$doc = $paramJsonProp.Value | ConvertFrom-Json
78+
}
8979
$parametersProp = $doc.PSObject.Properties['parameters']
9080
if ($parametersProp -and $parametersProp.Value) {
9181
foreach ($prop in $parametersProp.Value.PSObject.Properties) {
@@ -174,12 +164,22 @@ if (-not (Test-Path -Path $specPath)) {
174164
}
175165

176166
$paramTags = Get-ParamArray 'dagaTags'
177-
$combinedTags = New-Object 'System.Collections.Generic.List[object]'
178-
Add-TagSource -Target $combinedTags -Source $Tags
179167
$envTags = Get-Default -value $env:DAGA_POSTPROVISION_TAGS -fallback $null
180-
if (-not [string]::IsNullOrWhiteSpace($envTags)) { Add-TagSource -Target $combinedTags -Source $envTags }
181-
Add-TagSource -Target $combinedTags -Source $paramTags
182-
$tagArray = ConvertTo-TagArray -tagInput ($combinedTags.ToArray())
168+
169+
# Filter out null/whitespace entries so empty values don't short-circuit the priority chain
170+
$Tags = @($Tags | Where-Object { -not [string]::IsNullOrWhiteSpace($_) })
171+
$paramTags = @(if ($paramTags) { $paramTags | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } })
172+
173+
# Priority chain: CLI -Tags > DAGA_POSTPROVISION_TAGS env var > bicep dagaTags param > fallback
174+
if ($Tags.Count -gt 0) {
175+
$tagArray = ConvertTo-TagArray -tagInput $Tags
176+
} elseif (-not [string]::IsNullOrWhiteSpace($envTags)) {
177+
$tagArray = ConvertTo-TagArray -tagInput $envTags
178+
} elseif ($paramTags.Count -gt 0) {
179+
$tagArray = ConvertTo-TagArray -tagInput $paramTags
180+
} else {
181+
$tagArray = ConvertTo-TagArray -tagInput $null
182+
}
183183
$connectM365 = $ConnectM365.IsPresent
184184
if (-not $connectM365 -and $env:DAGA_POSTPROVISION_CONNECT_M365) {
185185
[bool]::TryParse($env:DAGA_POSTPROVISION_CONNECT_M365, [ref]$connectM365) | Out-Null

0 commit comments

Comments
 (0)