Skip to content

CI/CD Azure - Real-Time Intelligence Operations #10

CI/CD Azure - Real-Time Intelligence Operations

CI/CD Azure - Real-Time Intelligence Operations #10

Workflow file for this run

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