Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
fd6512c
Change Docker tag name from 'latest_waf' to 'latest'
Harmanpreet-Microsoft Jan 2, 2026
89ad24b
Add name to create-release workflow
Harmanpreet-Microsoft Jan 2, 2026
9d45dfe
Merge pull request #51 from Harmanpreet-Microsoft/main
Jan 2, 2026
5c51d18
Merge pull request #54 from microsoft/dev
Roopan-Microsoft Jan 5, 2026
0a9c4a8
Merge pull request #59 from microsoft/dev
Roopan-Microsoft Jan 12, 2026
da012db
Merge pull request #64 from microsoft/dev
Roopan-Microsoft Jan 19, 2026
36e8d26
Implement Test Automation Workflow v2 and Refactor Agent Scripts
Jan 27, 2026
204d277
Trim whitespace from environment variables in checkquota.sh
Jan 27, 2026
d827883
Update test automation workflow name and description for clarity
Jan 27, 2026
bf49fd6
Add WAF support for enabling and restoring public network access for …
Jan 27, 2026
b0ea1d5
Refactor validation regex for AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID in…
Jan 27, 2026
471198c
Update AI Services public access management to use Azure REST API for…
Jan 27, 2026
7f3aebf
Enhance public access management for AI Services and AI Search in dep…
Jan 27, 2026
f08a49e
Add wait step for data propagation in deployment workflows
Jan 27, 2026
15cc948
Merge pull request #14 from microsoft/dev
Harmanpreet-Microsoft Jan 27, 2026
11fa07f
feat: Enhance public access management for Cosmos DB and AI Services …
Jan 27, 2026
dac19a8
feat: Update deployment scripts to enhance AI Services access managem…
Jan 27, 2026
98d604f
fix: Simplify condition for cleanup-deployment job in deployment orch…
Jan 27, 2026
30dd63a
feat: Refactor AI Services account retrieval and role assignment in d…
Jan 27, 2026
0fac0b3
feat: Extend Cosmos DB connectivity checks and increase wait time for…
Jan 28, 2026
6d36958
fix: Correct JSON file path in constants for E2E tests
Jan 28, 2026
e32bd1b
fix: Update condition for cleanup-deployment job to always execute
Jan 28, 2026
7c2b8d1
feat: Enhance Cosmos DB access management by adding runner IP to fire…
Jan 28, 2026
3279ee0
refactor: Comment out run_e2e_tests configurations and validations ac…
Jan 28, 2026
64aa2e3
Merge pull request #71 from microsoft/dev
Roopan-Microsoft Jan 28, 2026
ba17ef1
fix: Update QUOTA_FAILED validation to allow empty input and default …
Jan 28, 2026
ffdc708
feat: Refactor data upload script to enhance parameter handling and a…
Jan 28, 2026
deca2f6
fix: Adjust formatting of enable_public_access function for consistency
Jan 28, 2026
075b42e
feat: Refactor data upload script to improve parameter handling and r…
Jan 28, 2026
b6f78a9
fix: Enhance Python command detection to ensure it executes correctly…
Jan 28, 2026
2beee01
Merge pull request #77 from microsoft/dev
Avijit-Microsoft Jan 29, 2026
8839834
Merge pull request #80 from microsoft/dev
Jan 29, 2026
49f9cde
feat: Add run_e2e_tests input option to deployment workflows for enha…
Jan 30, 2026
1e637ac
feat: Add E2E_TEST input option and wait step for app readiness in de…
Jan 30, 2026
9d7973e
feat: Update app readiness wait condition for E2E tests in deployment…
Jan 30, 2026
a30b49a
feat: Enhance response verification in ask_question_and_verify method…
Jan 30, 2026
6c1611e
feat: Implement get_latest_ai_response method for improved AI respons…
Jan 30, 2026
62a485b
Merge pull request #15 from microsoft/main
Harmanpreet-Microsoft Feb 3, 2026
f6b41bb
Temporarily enable public network access for Cosmos DB and AI Foundry…
Feb 4, 2026
0820256
Fixed postdeployment authentication issue
AjitPadhi-Microsoft Feb 5, 2026
d2081c6
Merge pull request #90 from microsoft/PSL-BUG-33521
Feb 5, 2026
1a95ca7
vscode web url issue fix
AjitPadhi-Microsoft Feb 5, 2026
0ccd132
Merge pull request #91 from microsoft/web-url-fix
Feb 5, 2026
dc7a7b9
authentication issue fix
AjitPadhi-Microsoft Feb 5, 2026
918cc54
Merge pull request #92 from microsoft/PSL-BUG-33521
Feb 5, 2026
5684c3a
Update Troubleshoot doc
NirajC-Microsoft Feb 9, 2026
75b8843
Merge pull request #86 from microsoft/dev
Avijit-Microsoft Feb 16, 2026
5887048
Merge pull request #100 from microsoft/dev
Feb 16, 2026
0b17563
Merge upstream/main into dev1 - Smart merge preserving service princi…
Harmanpreet-Microsoft Feb 16, 2026
4998f89
Enhance Cosmos DB firewall configuration to support multiple IPs for …
Harmanpreet-Microsoft Feb 16, 2026
c36aa39
Merge origin/main into psl-mtroubleshootdoc - resolved conflict
NirajC-Microsoft Feb 17, 2026
e7575e3
Merge pull request #96 from microsoft/psl-mtroubleshootdoc
Roopan-Microsoft Feb 17, 2026
c2fe7b2
Readme update for vs code web link
AjitPadhi-Microsoft Feb 17, 2026
add91aa
Merge pull request #102 from microsoft/readme-update
Feb 17, 2026
6b57644
Merge pull request #88 from Harmanpreet-Microsoft/dev1
Feb 18, 2026
c4a67ec
docs: Update README with new solution accelerators and playbooks
Feb 19, 2026
17ae2ec
Merge pull request #105 from microsoft/cross-link-references
Roopan-Microsoft Feb 19, 2026
1c32e67
Merge pull request #109 from microsoft/dev
Roopan-Microsoft Feb 23, 2026
db29e7a
Post deployment issue fix for opentelemetry
AjitPadhi-Microsoft Feb 23, 2026
1e0c6f0
Merge pull request #111 from microsoft/PSL-BUG-35221
Feb 24, 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
267 changes: 267 additions & 0 deletions .github/workflows/deploy-linux.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,267 @@
name: Deploy-Test-Cleanup (v2) Linux
permissions:
contents: read
actions: read
on:
workflow_run:
workflows: ["Build Docker and Optional Push"]
types:
- completed
branches:
- main
- dev
- demo
workflow_dispatch:
inputs:
azure_location:
description: 'Azure Location For Deployment'
required: false
default: 'australiaeast'
type: choice
options:
- 'australiaeast'
- 'centralus'
- 'eastasia'
- 'eastus2'
- 'japaneast'
- 'northeurope'
- 'southeastasia'
- 'uksouth'
resource_group_name:
description: 'Resource Group Name (Optional)'
required: false
default: ''
type: string
waf_enabled:
description: 'Enable WAF'
required: false
default: false
type: boolean
EXP:
description: 'Enable EXP'
required: false
default: false
type: boolean
build_docker_image:
description: 'Build & Push Docker Image (Optional)'
required: false
default: false
type: boolean
cleanup_resources:
description: 'Cleanup Deployed Resources'
required: false
default: false
type: boolean
run_e2e_tests:
description: 'Run End-to-End Tests'
required: false
default: 'GoldenPath-Testing'
type: choice
options:
- 'GoldenPath-Testing'
- 'Smoke-Testing'
- 'None'
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID:
description: 'Log Analytics Workspace ID (Optional)'
required: false
default: ''
type: string
AZURE_EXISTING_AI_PROJECT_RESOURCE_ID:
description: 'AI Project Resource ID (Optional)'
required: false
default: ''
type: string
existing_webapp_url:
description: 'Existing Container WebApp URL (Skips Deployment)'
required: false
default: ''
type: string

schedule:
- cron: '0 5,17 * * *' # Runs at 5:00 AM and 5:00 PM GMT

jobs:
validate-inputs:
runs-on: ubuntu-latest
outputs:
validation_passed: ${{ steps.validate.outputs.passed }}
azure_location: ${{ steps.validate.outputs.azure_location }}
resource_group_name: ${{ steps.validate.outputs.resource_group_name }}
waf_enabled: ${{ steps.validate.outputs.waf_enabled }}
exp: ${{ steps.validate.outputs.exp }}
build_docker_image: ${{ steps.validate.outputs.build_docker_image }}
cleanup_resources: ${{ steps.validate.outputs.cleanup_resources }}
run_e2e_tests: ${{ steps.validate.outputs.run_e2e_tests }}
azure_env_log_analytics_workspace_id: ${{ steps.validate.outputs.azure_env_log_analytics_workspace_id }}
azure_existing_ai_project_resource_id: ${{ steps.validate.outputs.azure_existing_ai_project_resource_id }}
existing_webapp_url: ${{ steps.validate.outputs.existing_webapp_url }}
steps:
- name: Validate Workflow Input Parameters
id: validate
shell: bash
env:
INPUT_AZURE_LOCATION: ${{ github.event.inputs.azure_location }}
INPUT_RESOURCE_GROUP_NAME: ${{ github.event.inputs.resource_group_name }}
INPUT_WAF_ENABLED: ${{ github.event.inputs.waf_enabled }}
INPUT_EXP: ${{ github.event.inputs.EXP }}
INPUT_BUILD_DOCKER_IMAGE: ${{ github.event.inputs.build_docker_image }}
INPUT_CLEANUP_RESOURCES: ${{ github.event.inputs.cleanup_resources }}
INPUT_RUN_E2E_TESTS: ${{ github.event.inputs.run_e2e_tests }}
INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: ${{ github.event.inputs.AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID }}
INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ github.event.inputs.AZURE_EXISTING_AI_PROJECT_RESOURCE_ID }}
INPUT_EXISTING_WEBAPP_URL: ${{ github.event.inputs.existing_webapp_url }}
run: |
echo "🔍 Validating workflow input parameters..."
VALIDATION_FAILED=false

# Validate azure_location (Azure region format)
LOCATION="${INPUT_AZURE_LOCATION:-australiaeast}"

if [[ ! "$LOCATION" =~ ^[a-z0-9]+$ ]]; then
echo "❌ ERROR: azure_location '$LOCATION' is invalid. Must contain only lowercase letters and numbers"
VALIDATION_FAILED=true
else
echo "✅ azure_location: '$LOCATION' is valid"
fi

# Validate resource_group_name (Azure naming convention, optional)
if [[ -n "$INPUT_RESOURCE_GROUP_NAME" ]]; then
if [[ ! "$INPUT_RESOURCE_GROUP_NAME" =~ ^[a-zA-Z0-9._\(\)-]+$ ]] || [[ "$INPUT_RESOURCE_GROUP_NAME" =~ \.$ ]]; then
echo "❌ ERROR: resource_group_name '$INPUT_RESOURCE_GROUP_NAME' is invalid. Must contain only alphanumerics, periods, underscores, hyphens, and parentheses. Cannot end with period."
VALIDATION_FAILED=true
elif [[ ${#INPUT_RESOURCE_GROUP_NAME} -gt 90 ]]; then
echo "❌ ERROR: resource_group_name '$INPUT_RESOURCE_GROUP_NAME' exceeds 90 characters (length: ${#INPUT_RESOURCE_GROUP_NAME})"
VALIDATION_FAILED=true
else
echo "✅ resource_group_name: '$INPUT_RESOURCE_GROUP_NAME' is valid"
fi
else
echo "✅ resource_group_name: Not provided (will be auto-generated)"
fi

# Validate waf_enabled (boolean)
WAF_ENABLED="${INPUT_WAF_ENABLED:-false}"
if [[ "$WAF_ENABLED" != "true" && "$WAF_ENABLED" != "false" ]]; then
echo "❌ ERROR: waf_enabled must be 'true' or 'false', got: '$WAF_ENABLED'"
VALIDATION_FAILED=true
else
echo "✅ waf_enabled: '$WAF_ENABLED' is valid"
fi

# Validate EXP (boolean)
EXP_ENABLED="${INPUT_EXP:-false}"
if [[ "$EXP_ENABLED" != "true" && "$EXP_ENABLED" != "false" ]]; then
echo "❌ ERROR: EXP must be 'true' or 'false', got: '$EXP_ENABLED'"
VALIDATION_FAILED=true
else
echo "✅ EXP: '$EXP_ENABLED' is valid"
fi

# Validate build_docker_image (boolean)
BUILD_DOCKER="${INPUT_BUILD_DOCKER_IMAGE:-false}"
if [[ "$BUILD_DOCKER" != "true" && "$BUILD_DOCKER" != "false" ]]; then
echo "❌ ERROR: build_docker_image must be 'true' or 'false', got: '$BUILD_DOCKER'"
VALIDATION_FAILED=true
else
echo "✅ build_docker_image: '$BUILD_DOCKER' is valid"
fi

# Validate cleanup_resources (boolean)
CLEANUP_RESOURCES="${INPUT_CLEANUP_RESOURCES:-false}"
if [[ "$CLEANUP_RESOURCES" != "true" && "$CLEANUP_RESOURCES" != "false" ]]; then
echo "❌ ERROR: cleanup_resources must be 'true' or 'false', got: '$CLEANUP_RESOURCES'"
VALIDATION_FAILED=true
else
echo "✅ cleanup_resources: '$CLEANUP_RESOURCES' is valid"
fi

# Validate run_e2e_tests (specific allowed values)
TEST_OPTION="${INPUT_RUN_E2E_TESTS:-GoldenPath-Testing}"
if [[ "$TEST_OPTION" != "GoldenPath-Testing" && "$TEST_OPTION" != "Smoke-Testing" && "$TEST_OPTION" != "None" ]]; then
echo "❌ ERROR: run_e2e_tests must be one of: GoldenPath-Testing, Smoke-Testing, None, got: '$TEST_OPTION'"
VALIDATION_FAILED=true
else
echo "✅ run_e2e_tests: '$TEST_OPTION' is valid"
fi

# Validate AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID (optional, Azure Resource ID format)
if [[ -n "$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" ]]; then
if [[ ! "$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" =~ ^/subscriptions/[a-fA-F0-9-]+/[rR]esource[gG]roups/[^/]+/providers/[mM]icrosoft\.[oO]perational[iI]nsights/workspaces/[^/]+$ ]]; then
echo "❌ ERROR: AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID is invalid. Must be a valid Azure Resource ID format:"
echo " /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.OperationalInsights/workspaces/{workspaceName}"
echo " Got: '$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID'"
VALIDATION_FAILED=true
else
echo "✅ AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: Valid Resource ID format"
fi
else
echo "✅ AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: Not provided (optional)"
fi

# Validate AZURE_EXISTING_AI_PROJECT_RESOURCE_ID (optional, Azure Resource ID format)
if [[ -n "$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" ]]; then
if [[ ! "$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" =~ ^/subscriptions/[a-fA-F0-9-]+/resourceGroups/[^/]+/providers/(Microsoft\.MachineLearningServices/(workspaces|projects)/[^/]+|Microsoft\.CognitiveServices/accounts/[^/]+/projects/[^/]+)$ ]]; then
echo "❌ ERROR: AZURE_EXISTING_AI_PROJECT_RESOURCE_ID is invalid. Must be a valid Azure Resource ID format:"
echo " /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/projects/{projectName}"
echo " Got: '$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID'"
VALIDATION_FAILED=true
else
echo "✅ AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: Valid Resource ID format"
fi
else
echo "✅ AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: Not provided (optional)"
fi

# Validate existing_webapp_url (optional, must start with https)
if [[ -n "$INPUT_EXISTING_WEBAPP_URL" ]]; then
if [[ ! "$INPUT_EXISTING_WEBAPP_URL" =~ ^https:// ]]; then
echo "❌ ERROR: existing_webapp_url must start with 'https://', got: '$INPUT_EXISTING_WEBAPP_URL'"
VALIDATION_FAILED=true
else
echo "✅ existing_webapp_url: '$INPUT_EXISTING_WEBAPP_URL' is valid"
fi
else
echo "✅ existing_webapp_url: Not provided (will perform deployment)"
fi

# Fail workflow if any validation failed
if [[ "$VALIDATION_FAILED" == "true" ]]; then
echo ""
echo "❌ Parameter validation failed. Please correct the errors above and try again."
exit 1
fi

echo ""
echo "✅ All input parameters validated successfully!"

# Output validated values
echo "passed=true" >> $GITHUB_OUTPUT
echo "azure_location=$LOCATION" >> $GITHUB_OUTPUT
echo "resource_group_name=$INPUT_RESOURCE_GROUP_NAME" >> $GITHUB_OUTPUT
echo "waf_enabled=$WAF_ENABLED" >> $GITHUB_OUTPUT
echo "exp=$EXP_ENABLED" >> $GITHUB_OUTPUT
echo "build_docker_image=$BUILD_DOCKER" >> $GITHUB_OUTPUT
echo "cleanup_resources=$CLEANUP_RESOURCES" >> $GITHUB_OUTPUT
echo "run_e2e_tests=$TEST_OPTION" >> $GITHUB_OUTPUT
echo "azure_env_log_analytics_workspace_id=$INPUT_AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID" >> $GITHUB_OUTPUT
echo "azure_existing_ai_project_resource_id=$INPUT_AZURE_EXISTING_AI_PROJECT_RESOURCE_ID" >> $GITHUB_OUTPUT
echo "existing_webapp_url=$INPUT_EXISTING_WEBAPP_URL" >> $GITHUB_OUTPUT

Run:
needs: validate-inputs
if: needs.validate-inputs.outputs.validation_passed == 'true'
uses: ./.github/workflows/deploy-orchestrator.yml
with:
runner_os: ubuntu-latest
azure_location: ${{ needs.validate-inputs.outputs.azure_location }}
resource_group_name: ${{ needs.validate-inputs.outputs.resource_group_name }}
waf_enabled: ${{ needs.validate-inputs.outputs.waf_enabled == 'true' }}
EXP: ${{ needs.validate-inputs.outputs.exp == 'true' }}
build_docker_image: ${{ needs.validate-inputs.outputs.build_docker_image == 'true' }}
cleanup_resources: ${{ needs.validate-inputs.outputs.cleanup_resources == 'true' }}
run_e2e_tests: ${{ needs.validate-inputs.outputs.run_e2e_tests }}
AZURE_ENV_LOG_ANALYTICS_WORKSPACE_ID: ${{ needs.validate-inputs.outputs.azure_env_log_analytics_workspace_id }}
AZURE_EXISTING_AI_PROJECT_RESOURCE_ID: ${{ needs.validate-inputs.outputs.azure_existing_ai_project_resource_id }}
existing_webapp_url: ${{ needs.validate-inputs.outputs.existing_webapp_url }}
trigger_type: ${{ github.event_name }}
secrets: inherit
Loading
Loading