diff --git a/.github/workflows/deploy-waf.yml b/.github/workflows/deploy-waf.yml
index 0ed79c84..0a339425 100644
--- a/.github/workflows/deploy-waf.yml
+++ b/.github/workflows/deploy-waf.yml
@@ -1,11 +1,11 @@
-name: Validate WAF Deployment
+name: Validate WAF Deployment
on:
push:
branches:
- main
schedule:
- - cron: '0 11,23 * * *' # Runs at 11:00 AM and 11:00 PM GMT
+ - cron: "0 11,23 * * *" # Runs at 11:00 AM and 11:00 PM GMT
jobs:
deploy:
@@ -55,7 +55,7 @@ jobs:
- name: Set Deployment Region
run: |
echo "Selected Region: $VALID_REGION"
- echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV
+ echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV
- name: Setup Azure CLI
run: |
@@ -77,8 +77,7 @@ jobs:
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_PREFIX: ${UNIQUE_RG_NAME}"
-
+ echo "Generated Resource_GROUP_PREFIX: ${UNIQUE_RG_NAME}"
- name: Check and Create Resource Group
id: check_create_rg
@@ -93,7 +92,6 @@ jobs:
echo "Resource group already exists."
fi
-
- name: Deploy Bicep Template
id: deploy
run: |
@@ -113,7 +111,7 @@ jobs:
if: failure()
run: |
RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
-
+
# Construct the email body
EMAIL_BODY=$(cat <> $GITHUB_ENV
+ echo "AZURE_LOCATION=$VALID_REGION" >> $GITHUB_ENV
- name: Setup Azure CLI
run: |
@@ -72,90 +88,165 @@ jobs:
- name: Generate Resource Group Name
id: generate_rg_name
run: |
- echo "Generating a unique resource group name..."
- ACCL_NAME="macae" # Account name as specified
+ ACCL_NAME="macae"
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_PREFIX: ${UNIQUE_RG_NAME}"
-
+ echo "Generated Resource_GROUP_PREFIX: ${UNIQUE_RG_NAME}"
- name: Check and Create Resource Group
id: check_create_rg
run: |
- set -e
- echo "Checking if resource group exists..."
+ set -e
rg_exists=$(az group exists --name ${{ env.RESOURCE_GROUP_NAME }})
if [ "$rg_exists" = "false" ]; then
- echo "Resource group does not exist. Creating..."
- az group create --name ${{ env.RESOURCE_GROUP_NAME }} --location ${{ env.AZURE_LOCATION }} || { echo "Error creating resource group"; exit 1; }
- else
- echo "Resource group already exists."
+ az group create --name ${{ env.RESOURCE_GROUP_NAME }} --location ${{ env.AZURE_LOCATION }}
fi
+ echo "RESOURCE_GROUP_NAME=${{ env.RESOURCE_GROUP_NAME }}" >> $GITHUB_OUTPUT
+ - name: Generate Unique Solution Prefix
+ id: generate_solution_prefix
+ run: |
+ COMMON_PART="macae"
+ TIMESTAMP=$(date +%s)
+ UPDATED_TIMESTAMP=$(echo $TIMESTAMP | tail -c 6)
+ UNIQUE_SOLUTION_PREFIX="${COMMON_PART}${UPDATED_TIMESTAMP}"
+ echo "SOLUTION_PREFIX=${UNIQUE_SOLUTION_PREFIX}" >> $GITHUB_ENV
- name: Deploy Bicep Template
id: deploy
run: |
- set -e
+ if [[ "${{ env.BRANCH_NAME }}" == "main" ]]; then
+ IMAGE_TAG="latest"
+ elif [[ "${{ env.BRANCH_NAME }}" == "dev" ]]; then
+ IMAGE_TAG="dev"
+ elif [[ "${{ env.BRANCH_NAME }}" == "hotfix" ]]; then
+ IMAGE_TAG="hotfix"
+ else
+ IMAGE_TAG="latest"
+ fi
+
az deployment group create \
--resource-group ${{ env.RESOURCE_GROUP_NAME }} \
--template-file infra/main.bicep \
--parameters \
+ solutionPrefix=${{ env.SOLUTION_PREFIX }} \
+ solutionLocation="${{ env.AZURE_LOCATION }}" \
+ modelDeploymentType="GlobalStandard" \
+ gptModelName="gpt-4o" \
+ gptModelVersion="2024-08-06" \
+ imageTag="${IMAGE_TAG}" \
useWafAlignedArchitecture=false \
aiDeploymentsLocation='${{ env.AZURE_LOCATION }}' \
- gptModelCapacity=5 \
+ gptModelCapacity=150 \
logAnalyticsWorkspaceConfiguration='{"dataRetentionInDays": 30, "existingWorkspaceResourceId": ""}' \
applicationInsightsConfiguration='{"retentionInDays": 30}' \
virtualNetworkConfiguration='{"enabled": false}' \
- webServerFarmConfiguration='{"skuCapacity": 1, "skuName": "B2"}'
+ webServerFarmConfiguration='{"skuCapacity": 1, "skuName": "B2"}' \
+ --output json
+ - name: Extract Web App and API App URLs
+ id: get_output
+ run: |
+ WEBAPP_NAMES=$(az webapp list --resource-group ${{ env.RESOURCE_GROUP_NAME }} --query "[].name" -o tsv)
+ for NAME in $WEBAPP_NAMES; do
+ if [[ $NAME == app-* ]]; then
+ WEBAPP_URL="https://${NAME}.azurewebsites.net"
+ echo "WEBAPP_URL=$WEBAPP_URL" >> $GITHUB_OUTPUT
+ fi
+ done
- - name: Send Notification on Failure
- if: failure()
+ - name: Get Container App Backend URL
+ id: get_backend_url
run: |
- RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
-
- # Construct the email body
- EMAIL_BODY=$(cat <Dear Team,
We would like to inform you that the Multi-Agent-Custom-Automation-Engine-Solution-Accelerator Automation process has encountered an issue and has failed to complete successfully.
Build URL: ${RUN_URL} ${OUTPUT}
Please investigate the matter at your earliest convenience.
Best regards, Your Automation Team
"
- }
- EOF
- )
-
- # Send the notification
- curl -X POST "${{ secrets.LOGIC_APP_URL }}" \
- -H "Content-Type: application/json" \
- -d "$EMAIL_BODY" || echo "Failed to send notification"
-
-
+ CONTAINER_APP_NAME=$(az containerapp list \
+ --resource-group ${{ env.RESOURCE_GROUP_NAME }} \
+ --query "[0].name" -o tsv)
+
+ MACAE_URL_API=$(az containerapp show \
+ --name "$CONTAINER_APP_NAME" \
+ --resource-group ${{ env.RESOURCE_GROUP_NAME }} \
+ --query "properties.configuration.ingress.fqdn" -o tsv)
+
+ echo "MACAE_URL_API=https://${MACAE_URL_API}" >> $GITHUB_OUTPUT
+ echo "CONTAINER_APP=${CONTAINER_APP_NAME}" >> $GITHUB_OUTPUT
+
+ - name: Set Deployment Status
+ id: deployment_status
+ if: always()
+ run: |
+ if [ "${{ job.status }}" == "success" ]; then
+ echo "SUCCESS=true" >> $GITHUB_OUTPUT
+ else
+ echo "SUCCESS=false" >> $GITHUB_OUTPUT
+ fi
+
+ e2e-test:
+ needs: deploy
+ if: needs.deploy.outputs.DEPLOYMENT_SUCCESS == 'true'
+ uses: ./.github/workflows/test-automation.yml
+ with:
+ MACAE_WEB_URL: ${{ needs.deploy.outputs.WEBAPP_URL }}
+ MACAE_URL_API: ${{ needs.deploy.outputs.MACAE_URL_API }}
+ MACAE_RG: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
+ MACAE_CONTAINER_APP: ${{ needs.deploy.outputs.CONTAINER_APP }}
+ secrets: inherit
+
+ cleanup-deployment:
+ if: always() && needs.deploy.outputs.RESOURCE_GROUP_NAME != ''
+ needs: [deploy, e2e-test]
+ runs-on: ubuntu-latest
+ env:
+ RESOURCE_GROUP_NAME: ${{ needs.deploy.outputs.RESOURCE_GROUP_NAME }}
+ steps:
+ - name: Setup Azure CLI
+ run: |
+ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
+ az --version
+ - name: Login to Azure
+ run: |
+ az login --service-principal -u ${{ secrets.AZURE_CLIENT_ID }} -p ${{ secrets.AZURE_CLIENT_SECRET }} --tenant ${{ secrets.AZURE_TENANT_ID }}
+ az account set --subscription "${{ secrets.AZURE_SUBSCRIPTION_ID }}"
+
+ - name: Extract AI Services and Key Vault Names
+ if: always()
+ run: |
+ echo "Fetching AI Services and Key Vault names before deletion..."
+
+ # Get Key Vault name
+ KEYVAULT_NAME=$(az resource list --resource-group "${{ env.RESOURCE_GROUP_NAME }}" --resource-type "Microsoft.KeyVault/vaults" --query "[].name" -o tsv)
+ echo "Detected Key Vault: $KEYVAULT_NAME"
+ echo "KEYVAULT_NAME=$KEYVAULT_NAME" >> $GITHUB_ENV
+ # Extract AI Services names
+ echo "Fetching AI Services..."
+ AI_SERVICES=$(az resource list --resource-group '${{ env.RESOURCE_GROUP_NAME }}' --resource-type "Microsoft.CognitiveServices/accounts" --query "[].name" -o tsv)
+ # Flatten newline-separated values to space-separated
+ AI_SERVICES=$(echo "$AI_SERVICES" | paste -sd ' ' -)
+ echo "Detected AI Services: $AI_SERVICES"
+ echo "AI_SERVICES=$AI_SERVICES" >> $GITHUB_ENV
+
- name: Get OpenAI Resource from Resource Group
id: get_openai_resource
run: |
-
set -e
echo "Fetching OpenAI resource from resource group ${{ env.RESOURCE_GROUP_NAME }}..."
-
+
# Run the az resource list command to get the OpenAI resource name
openai_resource_name=$(az resource list --resource-group ${{ env.RESOURCE_GROUP_NAME }} --resource-type "Microsoft.CognitiveServices/accounts" --query "[0].name" -o tsv)
if [ -z "$openai_resource_name" ]; then
echo "No OpenAI resource found in resource group ${{ env.RESOURCE_GROUP_NAME }}."
- exit 1
+ exit 0
else
echo "OPENAI_RESOURCE_NAME=${openai_resource_name}" >> $GITHUB_ENV
- echo "OpenAI resource name: ${openai_resource_name}"
+ echo "OpenAI resource name: ${openai_resource_name}"
fi
-
-
-
- name: Delete Bicep Deployment
if: always()
run: |
- set -e
+ set -e
echo "Checking if resource group exists..."
rg_exists=$(az group exists --name ${{ env.RESOURCE_GROUP_NAME }})
if [ "$rg_exists" = "true" ]; then
@@ -169,11 +260,9 @@ jobs:
echo "Resource group does not exists."
fi
-
- name: Wait for resource deletion to complete
run: |
-
# Add resources to the array
resources_to_check=("${{ env.OPENAI_RESOURCE_NAME }}")
@@ -221,12 +310,11 @@ jobs:
fi
done
-
- name: Purging the Resources
if: always()
run: |
- set -e
+ set -e
echo "Azure OpenAI: ${{ env.OPENAI_RESOURCE_NAME }}"
# Purge OpenAI Resource
@@ -238,3 +326,26 @@ jobs:
fi
echo "Resource purging completed successfully"
+
+ - name: Send Notification on Failure
+ if: failure()
+ run: |
+ RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
+
+ # Construct the email body
+ EMAIL_BODY=$(cat <Dear Team,
We would like to inform you that the Multi-Agent-Custom-Automation-Engine-Solution-Accelerator Automation process has encountered an issue and has failed to complete successfully.
Build URL: ${RUN_URL} ${OUTPUT}
Please investigate the matter at your earliest convenience.
We would like to inform you that the ${{ env.accelerator_name }} Test Automation process has encountered an issue and has failed to complete successfully.
We would like to inform you that the ${{ env.accelerator_name }} Test Automation process has encountered an issue and has failed to complete successfully.