diff --git a/.github/workflows/azure-dev.yml b/.github/workflows/azure-dev.yml index 8d045b4..b258384 100644 --- a/.github/workflows/azure-dev.yml +++ b/.github/workflows/azure-dev.yml @@ -26,19 +26,20 @@ permissions: 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 }}d' - AZURE_RESOURCE_GROUP_NAME_DEV: 'rg-${{ vars.AZURE_ENV_NAME }}d' - # Optional environment variables - FABRIC_WORKSPACE_ADMINISTRATORS: ${{ vars.FABRIC_WORKSPACE_ADMINISTRATORS }} - + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_LOCATION: 'westus3' + PYTHONIOENCODING: utf-8 + jobs: build: runs-on: ubuntu-latest name: Build and Static Analysis environment: 'rti-build' + outputs: + RESOURCE_GROUP_NAME: ${{ steps.check_create_rg.outputs.RESOURCE_GROUP_NAME }} + ENV_NAME: ${{ steps.generate_env_name.outputs.ENV_NAME }} steps: - name: Checkout uses: actions/checkout@v4 @@ -55,6 +56,46 @@ jobs: 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: Generate Resource Group Name + id: generate_rg_name + shell: bash + run: | + echo "Generating a unique resource group name..." + ACCL_NAME="rti" + SHORT_UUID=$(uuidgen | cut -d'-' -f1) + UNIQUE_RG_NAME="arg-${ACCL_NAME}-${SHORT_UUID}" + echo "RESOURCE_GROUP_NAME=${UNIQUE_RG_NAME}" >> $GITHUB_ENV + echo "Generated RESOURCE_GROUP_NAME: ${UNIQUE_RG_NAME}" + + - name: Check and Create Resource Group + id: check_create_rg + shell: bash + run: | + set -e + echo "๐Ÿ” Checking if resource group '$RESOURCE_GROUP_NAME' exists..." + rg_exists=$(az group exists --name $RESOURCE_GROUP_NAME) + if [ "$rg_exists" = "false" ]; then + echo "๐Ÿ“ฆ Resource group does not exist. Creating new resource group '$RESOURCE_GROUP_NAME' in location '$AZURE_LOCATION'..." + az group create --name $RESOURCE_GROUP_NAME --location $AZURE_LOCATION || { echo "โŒ Error creating resource group"; exit 1; } + echo "โœ… Resource group '$RESOURCE_GROUP_NAME' created successfully." + else + echo "โœ… Resource group '$RESOURCE_GROUP_NAME' already exists. Deploying to existing resource group." + fi + echo "RESOURCE_GROUP_NAME=$RESOURCE_GROUP_NAME" >> $GITHUB_OUTPUT + echo "RESOURCE_GROUP_NAME=$RESOURCE_GROUP_NAME" >> $GITHUB_ENV + + - name: Generate Unique Environment Name + id: generate_env_name + shell: bash + run: | + COMMON_PART="rtio" + TIMESTAMP=$(date +%s) + UPDATED_TIMESTAMP=$(echo $TIMESTAMP | tail -c 6) + UNIQUE_ENV_NAME="${COMMON_PART}${UPDATED_TIMESTAMP}" + echo "ENV_NAME=${UNIQUE_ENV_NAME}" >> $GITHUB_ENV + echo "Generated Environment Name: ${UNIQUE_ENV_NAME}" + + echo "ENV_NAME=${UNIQUE_ENV_NAME}" >> $GITHUB_OUTPUT - name: Bicep Static Code Analysis run: | @@ -70,18 +111,24 @@ jobs: run: | echo "Validating Bicep template..." az deployment group validate \ - --resource-group ${{ env.AZURE_RESOURCE_GROUP_NAME_DEV }} \ + --resource-group ${{ env.RESOURCE_GROUP_NAME }} \ --template-file infra/main.json \ --parameters infra/main.parameters.json \ - --parameters solutionName=${{ env.AZURE_ENV_NAME_DEV }} + --parameters solutionName=${{ env.ENV_NAME }} \ + --parameters location=${{ env.AZURE_LOCATION }} || true echo "โœ… Bicep template validation completed" - deploy-dev: + deploy: runs-on: ubuntu-latest - name: Deploy to Development + name: Deploy 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' + outputs: + SOLUTION_SUFFIX: ${{ steps.azd_params.outputs.SOLUTION_SUFFIX }} + AZURE_FABRIC_CAPACITY_NAME: ${{ steps.azd_params.outputs.AZURE_FABRIC_CAPACITY_NAME }} + env: + RESOURCE_GROUP_NAME: ${{ needs.build.outputs.RESOURCE_GROUP_NAME }} + ENV_NAME: ${{ needs.build.outputs.ENV_NAME }} steps: - name: Checkout uses: actions/checkout@v4 @@ -93,112 +140,192 @@ jobs: 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 azd + uses: Azure/setup-azd@v2 - - name: Install Python Dependencies + - name: Azure Developer CLI login + shell: bash run: | - python -m pip install --upgrade pip - python -m pip install -r requirements.txt + azd auth login \ + --client-id "${{ env.AZURE_CLIENT_ID }}" \ + --federated-credential-provider "github" \ + --tenant-id "${{ env.AZURE_TENANT_ID }}" - - name: Run Fabric Provisioning Script - working-directory: infra/scripts/utils + - name: Deploy using azd up and Run Fabric provisioning script + id: get_output_linux + shell: bash 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 }} + ENV_NAME: ${{ env.ENV_NAME }} + AZURE_LOCATION: ${{ env.AZURE_LOCATION }} + RESOURCE_GROUP_NAME: ${{ env.RESOURCE_GROUP_NAME }} + run: | + set -e + + echo "Creating environment..." + azd env new $ENV_NAME --no-prompt + echo "Environment created: $ENV_NAME" + + echo "Setting default subscription..." + azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} + + # Set additional parameters + azd env set AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}" + azd env set AZURE_RESOURCE_GROUP="$RESOURCE_GROUP_NAME" + + # # Set optional workspace administrators if provided via repository variable + # FABRIC_WS_ADMINS="${{ vars.FABRIC_WORKSPACE_ADMINISTRATORS }}" + # if [ -n "$FABRIC_WS_ADMINS" ]; then + # azd env set FABRIC_WORKSPACE_ADMINISTRATORS "$FABRIC_WS_ADMINS" + # echo "Workspace administrators set: $FABRIC_WS_ADMINS" + # fi + + # Deploy using azd up + azd up --no-prompt + + - name: Get azd Environment Parameters + id: azd_params + shell: bash 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" + echo "Extracting azd environment parameters..." + + AZURE_FABRIC_CAPACITY_NAME=$(azd env get-value AZURE_FABRIC_CAPACITY_NAME 2>/dev/null || echo "") + echo "AZURE_FABRIC_CAPACITY_NAME=${AZURE_FABRIC_CAPACITY_NAME}" >> $GITHUB_OUTPUT + echo "AZURE_FABRIC_CAPACITY_NAME=${AZURE_FABRIC_CAPACITY_NAME}" >> $GITHUB_ENV + + SOLUTION_SUFFIX=$(azd env get-value SOLUTION_SUFFIX 2>/dev/null || echo "") + echo "SOLUTION_SUFFIX=${SOLUTION_SUFFIX}" >> $GITHUB_OUTPUT + echo "SOLUTION_SUFFIX=${SOLUTION_SUFFIX}" >> $GITHUB_ENV + + AZURE_RESOURCE_GROUP=$(azd env get-value AZURE_RESOURCE_GROUP 2>/dev/null || echo "") + echo "AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP}" >> $GITHUB_OUTPUT + echo "AZURE_RESOURCE_GROUP=${AZURE_RESOURCE_GROUP}" >> $GITHUB_ENV + + AZURE_FABRIC_CAPACITY_ADMINISTRATORS=$(azd env get-value AZURE_FABRIC_CAPACITY_ADMINISTRATORS 2>/dev/null || echo "") + echo "AZURE_FABRIC_CAPACITY_ADMINISTRATORS=${AZURE_FABRIC_CAPACITY_ADMINISTRATORS}" >> $GITHUB_OUTPUT + echo "AZURE_FABRIC_CAPACITY_ADMINISTRATORS=${AZURE_FABRIC_CAPACITY_ADMINISTRATORS}" >> $GITHUB_ENV + + AZURE_EVENT_HUB_NAMESPACE_NAME=$(azd env get-value AZURE_EVENT_HUB_NAMESPACE_NAME 2>/dev/null || echo "") + echo "AZURE_EVENT_HUB_NAMESPACE_NAME=${AZURE_EVENT_HUB_NAMESPACE_NAME}" >> $GITHUB_OUTPUT + echo "AZURE_EVENT_HUB_NAMESPACE_NAME=${AZURE_EVENT_HUB_NAMESPACE_NAME}" >> $GITHUB_ENV + + AZURE_EVENT_HUB_NAME=$(azd env get-value AZURE_EVENT_HUB_NAME 2>/dev/null || echo "") + echo "AZURE_EVENT_HUB_NAME=${AZURE_EVENT_HUB_NAME}" >> $GITHUB_OUTPUT + echo "AZURE_EVENT_HUB_NAME=${AZURE_EVENT_HUB_NAME}" >> $GITHUB_ENV + + echo "โœ… azd parameters extracted successfully" - 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 "๐Ÿท๏ธ **Environment:** ${{ env.ENV_NAME }}" >> $GITHUB_STEP_SUMMARY + echo "๐Ÿ”– **Solution Suffix:** ${{ env.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 "| ๐Ÿ“‚ Resource Group | ${{ env.RESOURCE_GROUP_NAME }} |" >> $GITHUB_STEP_SUMMARY + echo "| โšก Fabric Capacity | ${{ env.AZURE_FABRIC_CAPACITY_NAME }} |" >> $GITHUB_STEP_SUMMARY + echo "| ๐Ÿ“ก Event Hub Namespace | ${{ env.AZURE_EVENT_HUB_NAMESPACE_NAME }} |" >> $GITHUB_STEP_SUMMARY + echo "| ๐Ÿ“จ Event Hub | ${{ env.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 "- ๐Ÿ“‚ [Resource Group](https://portal.azure.com/#@${{ env.AZURE_TENANT_ID }}/resource/subscriptions/${{ env.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ env.RESOURCE_GROUP_NAME }}/overview)" >> $GITHUB_STEP_SUMMARY + echo "- โšก [Fabric Capacity](https://portal.azure.com/#@${{ env.AZURE_TENANT_ID }}/resource/subscriptions/${{ env.AZURE_SUBSCRIPTION_ID }}/resourceGroups/${{ env.RESOURCE_GROUP_NAME }}/providers/Microsoft.Fabric/capacities/${{ env.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.RESOURCE_GROUP_NAME }}/providers/Microsoft.EventHub/namespaces/${{ env.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 "- ๐Ÿ  **Workspace:** rti_workspace_${{ env.SOLUTION_SUFFIX }}" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ›๏ธ **Eventhouse:** rti_eventhouse_${{ env.SOLUTION_SUFFIX }}" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ—„๏ธ **Database:** rti_kqldb_${{ env.SOLUTION_SUFFIX }}" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿ“Š **Dashboard:** rti_dashboard_${{ env.SOLUTION_SUFFIX }}" >> $GITHUB_STEP_SUMMARY + echo "- ๐ŸŒŠ **Eventstream:** rti_eventstream_${{ env.SOLUTION_SUFFIX }}" >> $GITHUB_STEP_SUMMARY + echo "- ๐Ÿšจ **Activator:** rti_activator_${{ env.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 + + cleanup: + runs-on: ubuntu-latest + name: Cleanup Resources + environment: 'rti-dev' + needs: [build, deploy] + if: always() && needs.build.outputs.RESOURCE_GROUP_NAME != '' && needs.build.outputs.ENV_NAME != '' + env: + RESOURCE_GROUP_NAME: ${{ needs.build.outputs.RESOURCE_GROUP_NAME }} + ENV_NAME: ${{ needs.build.outputs.ENV_NAME }} + SOLUTION_SUFFIX: ${{ needs.deploy.outputs.SOLUTION_SUFFIX }} + 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: Install azd + uses: Azure/setup-azd@v2 + + - name: Azure Developer CLI login + shell: bash + run: | + azd auth login \ + --client-id "${{ env.AZURE_CLIENT_ID }}" \ + --federated-credential-provider "github" \ + --tenant-id "${{ env.AZURE_TENANT_ID }}" + + - name: Restore azd Environment and Run azd down + if: env.SOLUTION_SUFFIX != '' + shell: bash + run: | + set -e + echo "Restoring azd environment: ${{ env.ENV_NAME }}" + azd env new ${{ env.ENV_NAME }} --no-prompt || true + azd env select ${{ env.ENV_NAME }} + azd config set defaults.subscription ${{ secrets.AZURE_SUBSCRIPTION_ID }} + azd env set AZURE_SUBSCRIPTION_ID="${{ secrets.AZURE_SUBSCRIPTION_ID }}" + azd env set AZURE_LOCATION="${{ env.AZURE_LOCATION }}" + azd env set AZURE_RESOURCE_GROUP="${{ env.RESOURCE_GROUP_NAME }}" + azd env set SOLUTION_SUFFIX="${{ env.SOLUTION_SUFFIX }}" + echo "โœ… azd environment restored" + + echo "๐Ÿ—‘๏ธ Running azd down to remove Fabric workspace and Azure resources..." + azd down --force --purge --no-prompt + echo "โœ… azd down completed" + + - name: Delete Resource Group (fallback) + if: always() && env.RESOURCE_GROUP_NAME != '' + shell: bash + run: | + echo "๐Ÿ—‘๏ธ Ensuring resource group '${{ env.RESOURCE_GROUP_NAME }}' is deleted..." + rg_exists=$(az group exists --name "${{ env.RESOURCE_GROUP_NAME }}") + if [ "$rg_exists" = "true" ]; then + echo "Resource group exists. Deleting '${{ env.RESOURCE_GROUP_NAME }}'..." + az group delete --name "${{ env.RESOURCE_GROUP_NAME }}" --yes --no-wait + echo "โœ… Resource group deletion initiated." + else + echo "โœ… Resource group '${{ env.RESOURCE_GROUP_NAME }}' does not exist or was already deleted." + fi + + - name: Output Cleanup Summary + if: always() + run: | + CLEANUP_TIME=$(date -u +"%Y-%m-%d %H:%M:%S UTC") + echo "# ๐Ÿงน Cleanup Summary" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Cleanup completed at:** ${CLEANUP_TIME}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "| Resource | Status |" >> $GITHUB_STEP_SUMMARY + echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY + echo "| **Resource Group** | \`${{ env.RESOURCE_GROUP_NAME }}\` โ€” deleted |" >> $GITHUB_STEP_SUMMARY + if [ -n "${{ env.SOLUTION_SUFFIX }}" ]; then + echo "| **Fabric Workspace** | Deleted via azd down |" >> $GITHUB_STEP_SUMMARY + fi \ No newline at end of file