@@ -12,53 +12,93 @@ permissions:
12
12
jobs :
13
13
template_validation_job :
14
14
runs-on : ubuntu-latest
15
- # Using an environment named 'production' may require approvals; adjust if that caused prior failures.
16
- environment : production
15
+ environment : validation
17
16
name : Template validation
18
17
steps :
19
18
- name : Checkout code
20
19
uses : actions/checkout@v4
21
20
22
- - name : Azure Login
21
+ - name : Pre-flight secret check
22
+ id : secret_check
23
+ run : |
24
+ missing=0
25
+ for var in AZURE_CLIENT_ID AZURE_TENANT_ID AZURE_SUBSCRIPTION_ID; do
26
+ if [ -z "${{ secrets[format('{0}', var)] }}" ]; then
27
+ echo "::error::Required secret $var is missing." >&2
28
+ missing=1
29
+ fi
30
+ done
31
+ if [ "$missing" -eq 1 ]; then
32
+ echo "Missing required secrets. Failing early." >&2
33
+ exit 1
34
+ fi
35
+ echo "All required auth secrets present (client secret not required for OIDC)."
36
+
37
+ - name : Azure Login (OIDC)
23
38
uses : azure/login@v1
24
39
with :
25
40
client-id : ${{ secrets.AZURE_CLIENT_ID }}
26
41
tenant-id : ${{ secrets.AZURE_TENANT_ID }}
27
42
subscription-id : ${{ secrets.AZURE_SUBSCRIPTION_ID }}
28
43
44
+ - name : Debug Azure context
45
+ run : |
46
+ az account show || echo "Could not show account (ensure privileges)" >&2
47
+ echo "Listing bicep version (if installed):"; az bicep version || true
48
+ echo "Listing repo root:"; ls -1 . || true
49
+ echo "Infra directory content:"; ls -1 infra || true
50
+
29
51
- name : Validate Azure Template
30
52
id : validation
31
53
uses : microsoft/template-validation-action@main
32
54
env :
33
- # These env vars are optional for the action but retained in case the action consumes them.
34
55
AZURE_CLIENT_ID : ${{ secrets.AZURE_CLIENT_ID }}
35
- AZURE_CLIENT_SECRET : ${{ secrets.AZURE_CLIENT_SECRET }}
36
56
AZURE_TENANT_ID : ${{ secrets.AZURE_TENANT_ID }}
37
57
AZURE_SUBSCRIPTION_ID : ${{ secrets.AZURE_SUBSCRIPTION_ID }}
38
- AZURE_ENV_NAME : ${{ secrets.AZURE_ENV_NAME }}
39
58
AZURE_LOCATION : ${{ secrets.AZURE_LOCATION }}
40
59
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
60
+ continue-on-error : true
61
+
62
+ - name : Capture validation output
63
+ id : capture
64
+ run : |
65
+ out="${{ steps.validation.outputs.resultFile }}"
66
+ if [ -n "$out" ] && [ -f "$out" ]; then
67
+ cp "$out" validation-result.json
68
+ else
69
+ echo '{"warning":"No resultFile produced by action"}' > validation-result.json
70
+ fi
71
+ echo "result_path=validation-result.json" >> $GITHUB_OUTPUT
41
72
42
73
- name : Print validation result
43
74
if : always()
44
75
run : |
45
- if [ -n "${{ steps.validation.outputs.resultFile }}" ] && [ -f "${{ steps.validation.outputs.resultFile }}" ]; then
46
- echo "--- Validation Result File ---"
47
- cat "${{ steps.validation.outputs.resultFile }}"
48
- else
49
- echo "Result file not found (output: '${{ steps.validation.outputs.resultFile }}')." >&2
50
- fi
76
+ echo "--- validation-result.json ---"
77
+ cat validation-result.json || echo "No validation-result.json present" >&2
78
+
79
+ - name : Upload validation result artifact
80
+ if : always()
81
+ uses : actions/upload-artifact@v4
82
+ with :
83
+ name : validation-result
84
+ path : validation-result.json
85
+ retention-days : 7
51
86
52
87
- name : Fail if validation errors detected
53
88
run : |
54
- file='${{ steps. validation.outputs.resultFile }} '
89
+ file='validation-result.json '
55
90
if [ ! -f "$file" ]; then
56
91
echo "No validation result file produced; failing." >&2
57
92
exit 1
58
93
fi
59
- # Heuristic: look for common error markers.
60
94
if grep -Ei '"(status|level)" *: *"error"' "$file" || grep -Ei '\b(error|failed)\b' "$file"; then
61
95
echo "Errors detected in template validation output." >&2
96
+ cat "$file"
97
+ exit 1
98
+ fi
99
+ # Also treat underlying action non-zero exit as failure even if heuristic passes.
100
+ if [ "${{ steps.validation.outcome }}" = "failure" ]; then
101
+ echo "Underlying validation action reported failure (steps.validation.outcome)." >&2
62
102
exit 1
63
103
fi
64
104
echo "No blocking errors detected in validation output."
0 commit comments