-
Notifications
You must be signed in to change notification settings - Fork 19
203 lines (184 loc) · 9.92 KB
/
azure-dev.yml
File metadata and controls
203 lines (184 loc) · 9.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
name: CI/CD Azure - Real-Time Intelligence Operations
# Trigger the workflow on push to main/master or manual dispatch
on:
workflow_dispatch:
# push:
# branches:
# - main
# - "*"
# paths:
# - "infra/**"
# - "src/**"
# - ".github/workflows/azure-dev.yml"
# pull_request:
# branches:
# - main
# paths:
# - "infra/**"
# - "src/**"
# - ".github/workflows/azure-dev.yml"
# Set up permissions for deploying with secretless Azure federated credentials
permissions:
id-token: write
contents: read
env:
AZURE_CLIENT_ID: ${{ vars.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ vars.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ vars.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME_DEV: ${{ vars.AZURE_ENV_NAME_DEV }}
AZURE_RESOURCE_GROUP_NAME_DEV: 'rg-${{ vars.AZURE_ENV_NAME_DEV }}'
# Optional environment variables
FABRIC_WORKSPACE_ADMINISTRATORS: ${{ vars.FABRIC_WORKSPACE_ADMINISTRATORS }}
jobs:
build:
runs-on: ubuntu-latest
name: Build and Static Analysis
environment: 'rti-build'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Azure CLI
uses: azure/login@v2
with:
client-id: ${{ env.AZURE_CLIENT_ID }}
tenant-id: ${{ env.AZURE_TENANT_ID }}
subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }}
- name: Install Bicep CLI
run: |
curl -Lo bicep https://github.com/Azure/bicep/releases/latest/download/bicep-linux-x64
chmod +x ./bicep
sudo mv ./bicep /usr/local/bin/bicep
- name: Bicep Static Code Analysis
run: |
echo "Running Bicep static code analysis on main.bicep..."
bicep build infra/main.bicep --outfile infra/main.json
echo "✅ Bicep compilation successful"
# Run bicep linter
bicep lint infra/main.bicep
echo "✅ Bicep linting completed"
- name: Validate Bicep Template
run: |
echo "Validating Bicep template..."
az deployment group validate \
--resource-group ${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }} \
--template-file infra/main.json \
--parameters infra/main.parameters.json \
--parameters solutionName=${{ env.AZURE_ENV_NAME_DEV }}
echo "✅ Bicep template validation completed"
deploy-dev:
runs-on: ubuntu-latest
name: Deploy to Development
environment: 'rti-dev'
needs: build
# if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' || github.ref == 'refs/heads/pre-deploy-alguadam' || github.event_name == 'workflow_dispatch'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Azure CLI login
uses: azure/login@v2
with:
client-id: ${{ env.AZURE_CLIENT_ID }}
tenant-id: ${{ env.AZURE_TENANT_ID }}
subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }}
- name: Deploy Infrastructure
id: bicep-deploy
uses: azure/bicep-deploy@v2
with:
type: deployment
operation: create
scope: resourceGroup
subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }}
resource-group-name: ${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }}
template-file: ./infra/main.bicep
parameters-file: ./infra/main.parameters.json
parameters: |
{
"solutionName": "${{ env.AZURE_ENV_NAME_DEV }}"
}
- name: Setup Python Environment
uses: actions/setup-python@v5
with:
python-version: "3.11"
- name: Install Python Dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
- name: Run Fabric Provisioning Script
working-directory: infra/scripts/utils
env:
# Required environment variables from Bicep outputs
SOLUTION_SUFFIX: ${{ steps.bicep-deploy.outputs.SOLUTION_SUFFIX }}
AZURE_ENV_NAME: ${{ env.AZURE_ENV_NAME_DEV }}
AZURE_RESOURCE_GROUP: ${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }}
AZURE_FABRIC_CAPACITY_NAME: ${{ steps.bicep-deploy.outputs.AZURE_FABRIC_CAPACITY_NAME }}
AZURE_EVENT_HUB_NAME: ${{ steps.bicep-deploy.outputs.AZURE_EVENT_HUB_NAME }}
AZURE_EVENT_HUB_NAMESPACE_NAME: ${{ steps.bicep-deploy.outputs.AZURE_EVENT_HUB_NAMESPACE_NAME }}
run: |
echo "Running RTI fabric provisioning script..."
echo "Environment configuration:"
echo " Solution: $AZURE_ENV_NAME"
echo " Suffix: $SOLUTION_SUFFIX"
echo " Workspace: $FABRIC_WORKSPACE_NAME"
echo " Workspace Administrators: ${FABRIC_WORKSPACE_ADMINISTRATORS:-'(none specified)'}"
echo " Capacity: $AZURE_FABRIC_CAPACITY_NAME"
echo " Event Hub Namespace: $AZURE_EVENT_HUB_NAMESPACE_NAME"
echo " Event Hub: $AZURE_EVENT_HUB_NAME"
echo " Alerts Email: $FABRIC_ACTIVATOR_ALERTS_EMAIL"
echo ""
# Note: Custom resource names can be configured in the workflow env section.
# If empty, the deploy script will use default names with solution suffix.
echo "Custom resource names (configured in workflow YAML):"
echo " FABRIC_EVENTHOUSE_NAME: ${FABRIC_EVENTHOUSE_NAME:-'(using default)'}"
echo " FABRIC_EVENTHOUSE_DATABASE_NAME: ${FABRIC_EVENTHOUSE_DATABASE_NAME:-'(using default)'}"
echo " FABRIC_EVENT_HUB_CONNECTION_NAME: ${FABRIC_EVENT_HUB_CONNECTION_NAME:-'(using default)'}"
echo " FABRIC_RTIDASHBOARD_NAME: ${FABRIC_RTIDASHBOARD_NAME:-'(using default)'}"
echo " FABRIC_EVENTSTREAM_NAME: ${FABRIC_EVENTSTREAM_NAME:-'(using default)'}"
echo " FABRIC_ACTIVATOR_NAME: ${FABRIC_ACTIVATOR_NAME:-'(using default)'}"
echo ""
# Run the unified PowerShell provisioning script with environment variables
pwsh ./Run-PythonScript.ps1 \
-ScriptPath "infra/scripts/fabric/deploy_fabric_rti.py" \
-SkipPythonVirtualEnvironment \
-SkipPythonDependencies \
-SkipPipUpgrade
echo "✅ RTI fabric items provisioning completed"
- name: Output Deployment Summary
env:
SOLUTION_SUFFIX: ${{ steps.bicep-deploy.outputs.SOLUTION_SUFFIX }}
AZURE_FABRIC_CAPACITY_NAME: ${{ steps.bicep-deploy.outputs.AZURE_FABRIC_CAPACITY_NAME }}
AZURE_EVENT_HUB_NAMESPACE_NAME: ${{ steps.bicep-deploy.outputs.AZURE_EVENT_HUB_NAMESPACE_NAME }}
AZURE_EVENT_HUB_NAME: ${{ steps.bicep-deploy.outputs.AZURE_EVENT_HUB_NAME }}
run: |
echo "## 🎉 Real-Time Intelligence Operations Deployment Complete!" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "📅 **Completed:** $(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_STEP_SUMMARY
echo "🏷️ **Environment:** ${{ env.AZURE_ENV_NAME_DEV }}" >> $GITHUB_STEP_SUMMARY
echo "🔖 **Solution Suffix:** ${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🏢 Azure Resources Deployed" >> $GITHUB_STEP_SUMMARY
echo "| Resource | Name |" >> $GITHUB_STEP_SUMMARY
echo "|----------|------|" >> $GITHUB_STEP_SUMMARY
echo "| 📂 Resource Group | ${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }} |" >> $GITHUB_STEP_SUMMARY
echo "| ⚡ Fabric Capacity | ${AZURE_FABRIC_CAPACITY_NAME} |" >> $GITHUB_STEP_SUMMARY
echo "| 📡 Event Hub Namespace | ${AZURE_EVENT_HUB_NAMESPACE_NAME} |" >> $GITHUB_STEP_SUMMARY
echo "| 📨 Event Hub | ${AZURE_EVENT_HUB_NAME} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🔗 Azure Portal Links" >> $GITHUB_STEP_SUMMARY
echo "- 📂 [Resource Group](https://portal.azure.com/#@${{ env.AZURE_TENANT_ID }}/resource/subscriptions/${{ env.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }}/overview)" >> $GITHUB_STEP_SUMMARY
echo "- ⚡ [Fabric Capacity](https://portal.azure.com/#@${{ env.AZURE_TENANT_ID }}/resource/subscriptions/${{ env.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }}/providers/Microsoft.Fabric/capacities/${AZURE_FABRIC_CAPACITY_NAME}/overview)" >> $GITHUB_STEP_SUMMARY
echo "- 📡 [Event Hub Namespace](https://portal.azure.com/#@${{ env.AZURE_TENANT_ID }}/resource/subscriptions/${{ env.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }}/providers/Microsoft.EventHub/namespaces/${AZURE_EVENT_HUB_NAMESPACE_NAME}/overview)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🔧 Fabric Resources (Expected Names)" >> $GITHUB_STEP_SUMMARY
echo "The following Fabric resources should have been created with these naming patterns:" >> $GITHUB_STEP_SUMMARY
echo "- 🏠 **Workspace:** rti_workspace_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "- 🏛️ **Eventhouse:** rti_eventhouse_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "- 🗄️ **Database:** rti_kqldb_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "- 📊 **Dashboard:** rti_dashboard_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "- 🌊 **Eventstream:** rti_eventstream_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "- 🚨 **Activator:** rti_activator_${SOLUTION_SUFFIX}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 🚀 Next Steps" >> $GITHUB_STEP_SUMMARY
echo "1. 📊 Access your Fabric workspace at [app.fabric.microsoft.com](https://app.fabric.microsoft.com)" >> $GITHUB_STEP_SUMMARY
echo "2. 🎯 Start the event simulator to generate sample data" >> $GITHUB_STEP_SUMMARY
echo "3. 📈 View real-time analytics in the dashboard" >> $GITHUB_STEP_SUMMARY
echo "4. 🔔 Configure alert recipients in the Activator" >> $GITHUB_STEP_SUMMARY