Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
42b3e12
Reafctor MACAE-V4 UI
NirajC-Microsoft Mar 4, 2026
2bb1a62
resolve copilot comment
NirajC-Microsoft Mar 11, 2026
85a1ef4
fix docker file error
NirajC-Microsoft Mar 11, 2026
6039776
revert fix for docker file error
NirajC-Microsoft Mar 11, 2026
f2d7e0e
fix for docker file error in pipeline
NirajC-Microsoft Mar 11, 2026
d691a46
revert fix for docker file error 1
NirajC-Microsoft Mar 11, 2026
8dc1603
update package.json file with redux toolkit
NirajC-Microsoft Mar 11, 2026
c3962e4
update package-lock.json file
NirajC-Microsoft Mar 11, 2026
43ef8dd
Resolve copilot comments
NirajC-Microsoft Mar 11, 2026
65620e0
update console.log content
NirajC-Microsoft Mar 11, 2026
20f52f0
Resolved the maintainability issues
Prekshith-Microsoft Mar 19, 2026
3a41d94
Resolved copilot review comments
Prekshith-Microsoft Mar 19, 2026
d92d38b
Remove deprecated Bicep modules for Cognitive Services, Key Vault exp…
Pavan-Microsoft Mar 30, 2026
dc04f8a
Update AZD template validation workflow to use new environment variab…
Pavan-Microsoft Mar 30, 2026
c8ba449
Update AZD template validation workflow to use environment variable f…
Pavan-Microsoft Mar 30, 2026
e4f3a45
Update AZD template validation workflow to use variable for OpenAI lo…
Pavan-Microsoft Mar 30, 2026
5e46ef1
UI folder structure and update imports and readme files accordingly
NirajC-Microsoft Mar 31, 2026
2ec385d
Add cleanup step to Azure Dev Deploy workflow for environment teardown
Pavan-Microsoft Mar 31, 2026
afaace7
Remove cleanup step from Azure Dev Deploy workflow to streamline depl…
Pavan-Microsoft Mar 31, 2026
e3891ea
Resolve conflicts
NirajC-Microsoft Apr 1, 2026
f55ecde
add updated package-lock.json
NirajC-Microsoft Apr 1, 2026
6a7e7cf
Add timestamp setting to AZD template validation workflow for dynamic…
Pavan-Microsoft Apr 2, 2026
1330c9a
Remove AZURE_ENV_NAME from environment variables and set it dynamical…
Pavan-Microsoft Apr 2, 2026
0066919
clean up empty code change sections in the changes log- high and crit…
Akhileswara-Microsoft Apr 3, 2026
2e91311
Add Bicep parameter validation workflow and script
Harsh-Microsoft Apr 3, 2026
3b494e6
Remove push trigger from Bicep validation workflow and refine notific…
Harsh-Microsoft Apr 3, 2026
93942e4
Filter the paths for pipeline run
Prekshith-Microsoft Apr 3, 2026
46367a0
Add validate_bicep_params.py to workflow paths for parameter validation
Harsh-Microsoft Apr 3, 2026
f907df1
Moderate issues p1 update dependencies in frontend and mcp_server
Akhileswara-Microsoft Apr 6, 2026
66305f1
Moderate issues p2 Add requests library to dependencies across multip…
Akhileswara-Microsoft Apr 6, 2026
6c79997
low priority Refactor code structure for improved readability and mai…
Akhileswara-Microsoft Apr 7, 2026
33e33e2
Update dependency versions and clean up unused packages in configurat…
Akhileswara-Microsoft Apr 7, 2026
6e95e44
copilot review fix changes
Akhileswara-Microsoft Apr 7, 2026
c56be6f
Merge pull request #844 from microsoft/psl-macae-uirefactor
Roopan-Microsoft Apr 7, 2026
cdb8055
fix: remove axios dependency from package.json and package-lock.json
Abdul-Microsoft Apr 7, 2026
e98f209
Merge pull request #865 from microsoft/code-quaissue
Roopan-Microsoft Apr 8, 2026
cfb4ba2
Add system-assigned managed identities to web site module configuration
Pavan-Microsoft Apr 8, 2026
be0cfdb
Merge pull request #887 from Pavan-Microsoft/psl-pk-azd-template-vali…
Prajwal-Microsoft Apr 8, 2026
ce0fb52
Merge remote-tracking branch 'origin/dev-v4' into DependentBotFix_Akh…
Akhileswara-Microsoft Apr 8, 2026
87fe453
Merge pull request #898 from microsoft/DependentBotFix_Akhileswar
Roopan-Microsoft Apr 8, 2026
c3ae40c
Merge branch 'dev-v4' into fix/remove-axios-dependency
Abdul-Microsoft Apr 8, 2026
8adc036
Azure Cognitive Search deployment fails issue fixed
AjitPadhi-Microsoft Apr 8, 2026
2d6a164
Merge pull request #905 from microsoft/PSL-BUG-39448
Roopan-Microsoft Apr 8, 2026
2a01fe6
fix: add bicep version requirement (>= 0.33.0) to azure.yaml
Roopan-Microsoft Apr 9, 2026
1ba4be8
fix: Remove create-release.yml path filter changes
Prekshith-Microsoft Apr 9, 2026
3f8c512
fix: add bicep version requirement (>= 0.33.0) to azure.yaml
Avijit-Microsoft Apr 9, 2026
a302e0d
Merge pull request #903 from microsoft/fix/remove-axios-dependency
Roopan-Microsoft Apr 9, 2026
2680e07
Merge pull request #895 from microsoft/hb-psl-38859
Roopan-Microsoft Apr 9, 2026
fb68962
Resolve Copilto Comment - remove unused import
NirajC-Microsoft Apr 9, 2026
89d5a19
Merge pull request #912 from microsoft/psl-resolvecopilotcomment
Roopan-Microsoft Apr 9, 2026
054ad3a
refactor: remove allowedFqdnList from main.waf.parameters.json and im…
Pavan-Microsoft Apr 9, 2026
313a9cf
Merge pull request #913 from microsoft/psl-pk-pipelinefix
Roopan-Microsoft Apr 9, 2026
9b7a7e4
Merge pull request #896 from microsoft/psl-pathfiler
Roopan-Microsoft Apr 9, 2026
aee32c3
Update README with security and quota notes
Thanusree-Microsoft Apr 10, 2026
e1027fa
Update Deployment Guide with security note
Thanusree-Microsoft Apr 10, 2026
afa587c
Merge pull request #914 from microsoft/psl-thsfichange
Roopan-Microsoft Apr 10, 2026
7615c3c
Fixed a copilot suggestion
Prekshith-Microsoft Apr 10, 2026
67e7204
Merge pull request #915 from microsoft/psl-copilot-fix
Roopan-Microsoft Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .azdo/pipelines/azure-dev.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,20 @@
# Run when commits are pushed to mainline branch (main or master)
# Set this to the mainline branch you are using
trigger:
- main
branches:
include:
- main
paths:
include:
- src/*
- infra/*
- azure.yaml
- azure_custom.yaml
- .azdo/pipelines/azure-dev.yml
exclude:
- '*.md'
- docs/*
- data/*

# Azure Pipelines workflow to deploy to Azure using azd
# To configure required secrets and service connection for connecting to Azure, simply run `azd pipeline config --provider azdo`
Expand Down
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ updates:
- "*"

- package-ecosystem: "pip"
directory: "/src/frontend"
directory: "/src/App"
schedule:
interval: "monthly"
commit-message:
Expand Down
41 changes: 41 additions & 0 deletions .github/workflows/azd-template-validation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: AZD Template Validation
on:
schedule:
- cron: '30 1 * * 4' # Every Thursday at 7:00 AM IST (1:30 AM UTC)
workflow_dispatch:

permissions:
contents: read
id-token: write
pull-requests: write

jobs:
template_validation:
runs-on: ubuntu-latest
name: azd template validation
environment: production
steps:
- uses: actions/checkout@v4

- name: Set timestamp
run: echo "HHMM=$(date -u +'%H%M')" >> $GITHUB_ENV

- uses: microsoft/template-validation-action@v0.4.3
with:
validateAzd: ${{ vars.TEMPLATE_VALIDATE_AZD }}
validateTests: ${{ vars.TEMPLATE_VALIDATE_TESTS }}
useDevContainer: ${{ vars.TEMPLATE_USE_DEV_CONTAINER }}
id: validation
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: azd-${{ vars.AZURE_ENV_NAME }}-${{ env.HHMM }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_ENV_OPENAI_LOCATION : ${{ vars.AZURE_AI_DEPLOYMENT_LOCATION }}
AZURE_ENV_MODEL_CAPACITY: 1
AZURE_ENV_MODEL_4_1_CAPACITY: 1 # keep low to avoid potential quota issues
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: print result
run: cat ${{ steps.validation.outputs.resultFile }}
77 changes: 48 additions & 29 deletions .github/workflows/azure-dev.yml
Original file line number Diff line number Diff line change
@@ -1,40 +1,59 @@
name: Azure Template Validation
name: Azure Dev Deploy

on:
workflow_dispatch:

permissions:
contents: read
id-token: write
pull-requests: write

jobs:
template_validation_job:
deploy:
runs-on: ubuntu-latest
environment: production
name: template validation
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_LOCATION: ${{ vars.AZURE_LOCATION }}
AZURE_ENV_OPENAI_LOCATION : ${{ vars.AZURE_AI_DEPLOYMENT_LOCATION }}
AZURE_ENV_MODEL_CAPACITY: 1
AZURE_ENV_MODEL_4_1_CAPACITY: 1
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}
steps:
# Step 1: Checkout the code from your repository
- name: Checkout code
uses: actions/checkout@v4
# Step 2: Validate the Azure template using microsoft/template-validation-action
- name: Validate Azure Template
uses: microsoft/template-validation-action@bae4895d0a8abd4f0d5aad68ae8647b3027f4c91
with:
validateAzd: true
useDevContainer: false
id: validation
env:
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
AZURE_ENV_NAME: ${{ secrets.AZURE_ENV_NAME }}
AZURE_LOCATION: ${{ secrets.AZURE_LOCATION }}
AZURE_ENV_OPENAI_LOCATION : ${{ secrets.AZURE_AI_DEPLOYMENT_LOCATION }}
AZURE_ENV_MODEL_CAPACITY: 1
AZURE_ENV_MODEL_4_1_CAPACITY: 1
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AZURE_DEV_COLLECT_TELEMETRY: ${{ vars.AZURE_DEV_COLLECT_TELEMETRY }}

# Step 3: Print the result of the validation
- name: print result
run: cat ${{ steps.validation.outputs.resultFile }}
- name: Checkout Code
uses: actions/checkout@v4

- name: Set timestamp and env name
run: |
HHMM=$(date -u +'%H%M')
echo "AZURE_ENV_NAME=azd-${{ vars.AZURE_ENV_NAME }}-${HHMM}" >> $GITHUB_ENV

- name: Install azd
uses: Azure/setup-azd@v2

- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZURE_CLIENT_ID }}
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}

- name: Login to AZD
shell: bash
run: |
azd auth login \
--client-id "$AZURE_CLIENT_ID" \
--federated-credential-provider "github" \
--tenant-id "$AZURE_TENANT_ID"

- name: Provision and Deploy
shell: bash
run: |
if ! azd env select "$AZURE_ENV_NAME"; then
azd env new "$AZURE_ENV_NAME" --subscription "$AZURE_SUBSCRIPTION_ID" --location "$AZURE_LOCATION" --no-prompt
fi
azd config set defaults.subscription "$AZURE_SUBSCRIPTION_ID"
azd env set AZURE_ENV_OPENAI_LOCATION="$AZURE_ENV_OPENAI_LOCATION"
azd up --no-prompt
6 changes: 6 additions & 0 deletions .github/workflows/deploy-waf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,12 @@ on:
push:
branches:
- main
paths:
- 'src/**'
- 'infra/**'
- 'azure.yaml'
- 'azure_custom.yaml'
- '.github/workflows/deploy-waf.yml'
schedule:
- cron: "0 11,23 * * *" # Runs at 11:00 AM and 11:00 PM GMT

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docker-build-and-push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
- demo-v4
- hotfix
paths:
- 'src/frontend/**'
- 'src/App/**'
- 'src/backend/**'
- 'src/mcp_server/**'
- '.github/workflows/docker-build-and-push.yml'
Expand All @@ -31,7 +31,7 @@ on:
- demo-v4
- hotfix
paths:
- 'src/frontend/**'
- 'src/App/**'
- 'src/backend/**'
- 'src/mcp_server/**'
- '.github/workflows/docker-build-and-push.yml'
Expand Down Expand Up @@ -117,8 +117,8 @@ jobs:
- name: Build and optionally push Frontend Docker image
uses: docker/build-push-action@v6
with:
context: ./src/frontend
file: ./src/frontend/Dockerfile
context: ./src/App
file: ./src/App/Dockerfile
push: ${{ env.TAG != 'pullrequest-ignore' }}
tags: |
${{ steps.registry.outputs.ext_registry }}/macaefrontend:${{ env.TAG }}
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/job-docker-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ jobs:
env:
DOCKER_BUILD_SUMMARY: false
with:
context: ./src/frontend
file: ./src/frontend/Dockerfile
context: ./src/App
file: ./src/App/Dockerfile
push: true
tags: |
${{ secrets.ACR_TEST_LOGIN_SERVER }}/macaefrontend:${{ steps.generate_docker_tag.outputs.IMAGE_TAG }}
Expand Down
108 changes: 108 additions & 0 deletions .github/workflows/validate-bicep-params.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
name: Validate Bicep Parameters

permissions:
contents: read

on:
schedule:
- cron: '30 6 * * 3' # Wednesday 12:00 PM IST (6:30 AM UTC)
pull_request:
branches:
- main
- dev
paths:
- 'infra/**/*.bicep'
- 'infra/**/*.parameters.json'
- 'infra/scripts/validate_bicep_params.py'
workflow_dispatch:

env:
accelerator_name: "MACAE"

jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'

- name: Validate infra/ parameters
id: validate_infra
continue-on-error: true
run: |
set +e
python infra/scripts/validate_bicep_params.py --dir infra --strict --no-color --json-output infra_results.json 2>&1 | tee infra_output.txt
EXIT_CODE=${PIPESTATUS[0]}
set -e
echo "## Infra Param Validation" >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
cat infra_output.txt >> "$GITHUB_STEP_SUMMARY"
echo '```' >> "$GITHUB_STEP_SUMMARY"
exit $EXIT_CODE

- name: Set overall result
id: result
run: |
if [[ "${{ steps.validate_infra.outcome }}" == "failure" ]]; then
echo "status=failure" >> "$GITHUB_OUTPUT"
else
echo "status=success" >> "$GITHUB_OUTPUT"
fi

- name: Upload validation results
if: always()
uses: actions/upload-artifact@v4
with:
name: bicep-validation-results
path: |
infra_results.json
retention-days: 30

- name: Send schedule notification on failure
if: github.event_name == 'schedule' && steps.result.outputs.status == 'failure'
env:
LOGICAPP_URL: ${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_RUN_ID: ${{ github.run_id }}
ACCELERATOR_NAME: ${{ env.accelerator_name }}
run: |
RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
INFRA_OUTPUT=$(sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' infra_output.txt)

jq -n \
--arg name "${ACCELERATOR_NAME}" \
--arg infra "$INFRA_OUTPUT" \
--arg url "$RUN_URL" \
'{subject: ("Bicep Parameter Validation Report - " + $name + " - Issues Detected"), body: ("<p>Dear Team,</p><p>The scheduled <strong>Bicep Parameter Validation</strong> for <strong>" + $name + "</strong> has detected parameter mapping errors.</p><p><strong>infra/ Results:</strong></p><pre>" + $infra + "</pre><p><strong>Run URL:</strong> <a href=\"" + $url + "\">" + $url + "</a></p><p>Please fix the parameter mapping issues at your earliest convenience.</p><p>Best regards,<br>Your Automation Team</p>")}' \
| curl -X POST "${LOGICAPP_URL}" \
-H "Content-Type: application/json" \
-d @- || echo "Failed to send notification"

- name: Send schedule notification on success
if: github.event_name == 'schedule' && steps.result.outputs.status == 'success'
env:
LOGICAPP_URL: ${{ secrets.EMAILNOTIFICATION_LOGICAPP_URL_TA }}
GITHUB_REPOSITORY: ${{ github.repository }}
GITHUB_RUN_ID: ${{ github.run_id }}
ACCELERATOR_NAME: ${{ env.accelerator_name }}
run: |
RUN_URL="https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
INFRA_OUTPUT=$(sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g' infra_output.txt)

jq -n \
--arg name "${ACCELERATOR_NAME}" \
--arg infra "$INFRA_OUTPUT" \
--arg url "$RUN_URL" \
'{subject: ("Bicep Parameter Validation Report - " + $name + " - Passed"), body: ("<p>Dear Team,</p><p>The scheduled <strong>Bicep Parameter Validation</strong> for <strong>" + $name + "</strong> has completed successfully. All parameter mappings are valid.</p><p><strong>infra/ Results:</strong></p><pre>" + $infra + "</pre><p><strong>Run URL:</strong> <a href=\"" + $url + "\">" + $url + "</a></p><p>Best regards,<br>Your Automation Team</p>")}' \
| curl -X POST "${LOGICAPP_URL}" \
-H "Content-Type: application/json" \
-d @- || echo "Failed to send notification"

- name: Fail if errors found
if: steps.result.outputs.status == 'failure'
run: exit 1
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"path": "."
},
// {
// "path": "./src/frontend"
// "path": "./src/App"
// },
// {
// "path": "./src/backend"
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ Follow the quick deploy steps on the deployment guide to deploy this solution to

<br/>

> **Note**: Some tenants may have additional security restrictions that run periodically and could impact the application (e.g., blocking public network access). If you experience issues or the application stops working, check if these restrictions are the cause. In such cases, consider deploying the WAF-supported version to ensure compliance. To configure, [Click here](./docs/DeploymentGuide.md#31-choose-deployment-type-optional).

> ⚠️ **Important: Check Azure OpenAI Quota Availability**
<br/>To ensure sufficient quota is available in your subscription, please follow [quota check instructions guide](./docs/quota_check.md) before you deploy the solution.

Expand Down
1 change: 1 addition & 0 deletions azure.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ metadata:
template: multi-agent-custom-automation-engine-solution-accelerator@1.0
requiredVersions:
azd: '>= 1.18.0 != 1.23.9'
bicep: '>= 0.33.0'
hooks:
postdeploy:
windows:
Expand Down
2 changes: 1 addition & 1 deletion azure_custom.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ services:
remoteBuild: true

frontend:
project: ./src/frontend
project: ./src/App
language: py
host: appservice
dist: ./dist
Expand Down
2 changes: 2 additions & 0 deletions docs/DeploymentGuide.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ This guide walks you through deploying the Multi Agent Custom Automation Engine

🆘 **Need Help?** If you encounter any issues during deployment, check our [Troubleshooting Guide](./TroubleShootingSteps.md) for solutions to common problems.

> **Note**: Some tenants may have additional security restrictions that run periodically and could impact the application (e.g., blocking public network access). If you experience issues or the application stops working, check if these restrictions are the cause. In such cases, consider deploying the WAF-supported version to ensure compliance. To configure, [Click here](#31-choose-deployment-type-optional).

## Step 1: Prerequisites & Setup

### 1.1 Azure Account Requirements
Expand Down
Loading
Loading