Enhanced documentation, introducing evaluations framework, bug fixes and deployment fixes #35
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test AZD Hooks | |
| on: | |
| push: | |
| branches: [main, staging] | |
| paths: | |
| - 'devops/scripts/azd/**' | |
| - 'azure.yaml' | |
| - '.github/workflows/test-azd-hooks.yml' | |
| pull_request: | |
| branches: [main, staging] | |
| paths: | |
| - 'devops/scripts/azd/**' | |
| - 'azure.yaml' | |
| - '.github/workflows/test-azd-hooks.yml' | |
| workflow_dispatch: | |
| inputs: | |
| debug_enabled: | |
| description: 'Enable debug mode' | |
| required: false | |
| default: false | |
| type: boolean | |
| env: | |
| CI: true | |
| AZD_SKIP_INTERACTIVE: true | |
| # Mock environment for hook testing | |
| AZURE_ENV_NAME: ci-test | |
| AZURE_LOCATION: eastus2 | |
| LOCAL_STATE: true | |
| permissions: | |
| contents: read | |
| pull-requests: read | |
| jobs: | |
| # ============================================================================ | |
| # JOB: Lint Shell Scripts | |
| # ============================================================================ | |
| lint: | |
| name: 🔍 Lint Shell Scripts | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: 📦 Install ShellCheck | |
| run: sudo apt-get update && sudo apt-get install -y shellcheck | |
| - name: 🔍 Lint preprovision.sh | |
| run: shellcheck -x devops/scripts/azd/preprovision.sh || true | |
| continue-on-error: true | |
| - name: 🔍 Lint postprovision.sh | |
| run: shellcheck -x devops/scripts/azd/postprovision.sh || true | |
| continue-on-error: true | |
| - name: 🔍 Lint helper scripts | |
| run: | | |
| for script in devops/scripts/azd/helpers/*.sh; do | |
| echo "Checking $script..." | |
| shellcheck -x "$script" || true | |
| done | |
| continue-on-error: true | |
| - name: 📋 Summary | |
| run: | | |
| echo "## 🔍 Shell Script Linting" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "ShellCheck analysis complete. Review warnings above." >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Test Hooks on Linux | |
| # ============================================================================ | |
| test-linux: | |
| name: 🐧 Test on Linux | |
| runs-on: ubuntu-latest | |
| needs: lint | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: ⚙️ Setup AZD | |
| uses: Azure/setup-azd@v2 | |
| - name: 🔧 Setup jq | |
| run: | | |
| which jq || sudo apt-get update && sudo apt-get install -y jq | |
| jq --version | |
| - name: 🔧 Setup Azure CLI | |
| run: | | |
| # Azure CLI is pre-installed on GitHub runners, verify it | |
| az version | |
| echo "✅ Azure CLI available" | |
| - name: 🔧 Create Mock Environment | |
| run: | | |
| # Create azd environment without Azure login | |
| mkdir -p .azure/${{ env.AZURE_ENV_NAME }} | |
| # Create mock .env file for azd | |
| cat > .azure/${{ env.AZURE_ENV_NAME }}/.env << 'EOF' | |
| AZURE_ENV_NAME="${{ env.AZURE_ENV_NAME }}" | |
| AZURE_LOCATION="${{ env.AZURE_LOCATION }}" | |
| LOCAL_STATE="true" | |
| DB_INITIALIZED="true" | |
| PREFLIGHT_LIVE_CHECKS="false" | |
| EOF | |
| echo "Created mock azd environment" | |
| ls -la .azure/${{ env.AZURE_ENV_NAME }}/ | |
| - name: 📜 Validate Script Syntax (preprovision.sh) | |
| run: bash -n devops/scripts/azd/preprovision.sh | |
| - name: 📜 Validate Script Syntax (postprovision.sh) | |
| run: bash -n devops/scripts/azd/postprovision.sh | |
| - name: 📜 Validate Helper Scripts Syntax | |
| run: | | |
| for script in devops/scripts/azd/helpers/*.sh; do | |
| echo "Validating syntax: $script" | |
| bash -n "$script" | |
| done | |
| - name: 🧪 Test Preflight Checks (Dry Run) | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| # Source the script to test individual functions | |
| source preflight-checks.sh | |
| # Test logging functions | |
| echo "Testing logging functions..." | |
| log "Test log message" | |
| info "Test info message" | |
| success "Test success message" | |
| warn "Test warning message" | |
| echo "" | |
| echo "✅ Logging functions work correctly" | |
| continue-on-error: true | |
| - name: 🧪 Test Location Resolution | |
| run: | | |
| cd devops/scripts/azd | |
| # Create test tfvars file | |
| mkdir -p ../../../infra/terraform/params | |
| echo '{"location": "eastus2", "environment": "test"}' > ../../../infra/terraform/params/main.tfvars.ci-test.json | |
| # Test that location can be resolved from tfvars | |
| export AZURE_ENV_NAME="ci-test" | |
| export AZURE_LOCATION="eastus2" | |
| # Just verify the tfvars file was created correctly | |
| echo "Testing tfvars file creation..." | |
| if [[ -f ../../../infra/terraform/params/main.tfvars.ci-test.json ]]; then | |
| echo "✅ tfvars file created:" | |
| cat ../../../infra/terraform/params/main.tfvars.ci-test.json | |
| else | |
| echo "❌ tfvars file not created" | |
| exit 1 | |
| fi | |
| continue-on-error: true | |
| - name: 🧪 Test Backend Configuration | |
| run: | | |
| cd infra/terraform | |
| export AZURE_ENV_NAME="ci-test" | |
| export AZURE_LOCATION="eastus2" | |
| export LOCAL_STATE="true" | |
| # Test local backend configuration by creating the file directly | |
| echo "Testing local backend configuration..." | |
| cat > backend.tf << 'BACKEND_EOF' | |
| # Auto-generated by preprovision hook | |
| # Using local state for development/testing | |
| terraform { | |
| backend "local" { | |
| path = "terraform.tfstate" | |
| } | |
| } | |
| BACKEND_EOF | |
| # Verify backend.tf was created | |
| if [[ -f backend.tf ]]; then | |
| echo "✅ backend.tf created:" | |
| cat backend.tf | |
| rm backend.tf # Clean up | |
| else | |
| echo "❌ backend.tf not created" | |
| exit 1 | |
| fi | |
| - name: 🚀 Run Preprovision Hook via AZD | |
| run: | | |
| # Initialize azd environment properly | |
| azd env select ${{ env.AZURE_ENV_NAME }} 2>/dev/null || azd env new ${{ env.AZURE_ENV_NAME }} --no-prompt | |
| azd env set AZURE_LOCATION ${{ env.AZURE_LOCATION }} | |
| azd env set LOCAL_STATE true | |
| azd env set PREFLIGHT_LIVE_CHECKS false | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| echo "Running: azd hooks run preprovision" | |
| azd hooks run preprovision | |
| echo "" | |
| echo "✅ Preprovision hook executed successfully via azd" | |
| - name: 📦 Run Postprovision Hook via AZD | |
| run: | | |
| # Use existing azd environment | |
| azd env select ${{ env.AZURE_ENV_NAME }} | |
| # Set mock values that postprovision expects | |
| azd env set DB_INITIALIZED true | |
| azd env set AZURE_APPCONFIG_ENDPOINT "https://mock-appconfig.azconfig.io" | |
| azd env set BACKEND_API_URL "https://mock-backend.azurecontainerapps.io" | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| export CI=true | |
| echo "Running: azd hooks run postprovision" | |
| azd hooks run postprovision | |
| echo "" | |
| echo "✅ Postprovision hook executed successfully via azd" | |
| - name: 📋 Linux Test Summary | |
| run: | | |
| echo "## 🐧 Linux Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Script Syntax | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Helper Scripts | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Logging Functions | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Location Resolution | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Backend Config | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run preprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run postprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Test Hooks on macOS | |
| # ============================================================================ | |
| test-macos: | |
| name: 🍎 Test on macOS | |
| runs-on: macos-latest | |
| needs: lint | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: ⚙️ Setup AZD | |
| uses: Azure/setup-azd@v2 | |
| - name: 🔧 Setup jq | |
| run: | | |
| which jq || brew install jq | |
| jq --version | |
| - name: 🔧 Setup Azure CLI | |
| run: | | |
| # Install Azure CLI if not present | |
| which az || brew install azure-cli | |
| az version | |
| echo "✅ Azure CLI available" | |
| - name: 🔧 Create Mock Environment | |
| run: | | |
| mkdir -p .azure/${{ env.AZURE_ENV_NAME }} | |
| cat > .azure/${{ env.AZURE_ENV_NAME }}/.env << 'EOF' | |
| AZURE_ENV_NAME="${{ env.AZURE_ENV_NAME }}" | |
| AZURE_LOCATION="${{ env.AZURE_LOCATION }}" | |
| LOCAL_STATE="true" | |
| DB_INITIALIZED="true" | |
| PREFLIGHT_LIVE_CHECKS="false" | |
| EOF | |
| - name: 📜 Validate Script Syntax (preprovision.sh) | |
| run: bash -n devops/scripts/azd/preprovision.sh | |
| - name: 📜 Validate Script Syntax (postprovision.sh) | |
| run: bash -n devops/scripts/azd/postprovision.sh | |
| - name: 📜 Validate Helper Scripts Syntax | |
| run: | | |
| for script in devops/scripts/azd/helpers/*.sh; do | |
| echo "Validating syntax: $script" | |
| bash -n "$script" | |
| done | |
| - name: 🧪 Test Preflight Checks (Dry Run) | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| source preflight-checks.sh | |
| # Test logging functions | |
| log "Test log message (macOS)" | |
| info "Test info message (macOS)" | |
| success "Test success message (macOS)" | |
| warn "Test warning message (macOS)" | |
| echo "✅ macOS logging functions work correctly" | |
| continue-on-error: true | |
| - name: 🧪 Test Regional Availability Logic | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| # Source the script | |
| source preflight-checks.sh | |
| # Test with cached data (no Azure auth needed) | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| echo "Testing regional availability checks (cached mode)..." | |
| for region in eastus2 swedencentral westus2 australiaeast; do | |
| export AZURE_LOCATION="$region" | |
| echo "" | |
| echo "📍 Testing region: $region" | |
| check_regional_availability || true | |
| done | |
| continue-on-error: true | |
| - name: 🧪 Test Helper Functions | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| source preflight-checks.sh | |
| # Test check_provider_region function exists | |
| echo "Testing helper functions..." | |
| # Test that functions are defined | |
| if declare -f check_provider_region > /dev/null; then | |
| echo "✅ check_provider_region function defined" | |
| else | |
| echo "❌ check_provider_region function not found" | |
| fi | |
| if declare -f check_cognitive_services_region > /dev/null; then | |
| echo "✅ check_cognitive_services_region function defined" | |
| else | |
| echo "❌ check_cognitive_services_region function not found" | |
| fi | |
| if declare -f get_provider_regions > /dev/null; then | |
| echo "✅ get_provider_regions function defined" | |
| else | |
| echo "❌ get_provider_regions function not found" | |
| fi | |
| - name: 🚀 Run Preprovision Hook via AZD | |
| run: | | |
| # Initialize azd environment properly | |
| azd env select ${{ env.AZURE_ENV_NAME }} 2>/dev/null || azd env new ${{ env.AZURE_ENV_NAME }} --no-prompt | |
| azd env set AZURE_LOCATION ${{ env.AZURE_LOCATION }} | |
| azd env set LOCAL_STATE true | |
| azd env set PREFLIGHT_LIVE_CHECKS false | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| echo "Running: azd hooks run preprovision" | |
| azd hooks run preprovision | |
| echo "" | |
| echo "✅ Preprovision hook executed successfully via azd (macOS)" | |
| - name: 📦 Run Postprovision Hook via AZD | |
| run: | | |
| # Use existing azd environment | |
| azd env select ${{ env.AZURE_ENV_NAME }} | |
| # Set mock values that postprovision expects | |
| azd env set DB_INITIALIZED true | |
| azd env set AZURE_APPCONFIG_ENDPOINT "https://mock-appconfig.azconfig.io" | |
| azd env set BACKEND_API_URL "https://mock-backend.azurecontainerapps.io" | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| export CI=true | |
| echo "Running: azd hooks run postprovision" | |
| azd hooks run postprovision | |
| echo "" | |
| echo "✅ Postprovision hook executed successfully via azd (macOS)" | |
| - name: 📋 macOS Test Summary | |
| run: | | |
| echo "## 🍎 macOS Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Script Syntax | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Helper Scripts | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Logging Functions | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Regional Checks | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run preprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run postprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Test Hooks on Windows | |
| # ============================================================================ | |
| test-windows: | |
| name: 🪟 Test on Windows | |
| runs-on: windows-latest | |
| needs: lint | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: ⚙️ Setup AZD | |
| uses: Azure/setup-azd@v2 | |
| - name: 🔧 Setup Git Bash | |
| run: | | |
| echo "Git Bash version:" | |
| & "C:\Program Files\Git\bin\bash.exe" --version | |
| - name: 🔧 Setup Azure CLI | |
| run: | | |
| # Azure CLI is pre-installed on Windows GitHub runners | |
| az version | |
| Write-Host "✅ Azure CLI available" | |
| - name: 🔧 Create Mock Environment | |
| shell: bash | |
| run: | | |
| mkdir -p .azure/${{ env.AZURE_ENV_NAME }} | |
| cat > .azure/${{ env.AZURE_ENV_NAME }}/.env << 'EOF' | |
| AZURE_ENV_NAME="${{ env.AZURE_ENV_NAME }}" | |
| AZURE_LOCATION="${{ env.AZURE_LOCATION }}" | |
| LOCAL_STATE="true" | |
| DB_INITIALIZED="true" | |
| PREFLIGHT_LIVE_CHECKS="false" | |
| EOF | |
| - name: 📜 Validate Script Syntax (preprovision.sh) | |
| shell: bash | |
| run: bash -n devops/scripts/azd/preprovision.sh | |
| - name: 📜 Validate Script Syntax (postprovision.sh) | |
| shell: bash | |
| run: bash -n devops/scripts/azd/postprovision.sh | |
| - name: 📜 Validate Helper Scripts Syntax | |
| shell: bash | |
| run: | | |
| for script in devops/scripts/azd/helpers/*.sh; do | |
| echo "Validating syntax: $script" | |
| bash -n "$script" | |
| done | |
| - name: 🧪 Test Logging Functions (Windows/Git Bash) | |
| shell: bash | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| source preflight-checks.sh | |
| # Test logging functions | |
| log "Test log message (Windows)" | |
| info "Test info message (Windows)" | |
| success "Test success message (Windows)" | |
| warn "Test warning message (Windows)" | |
| echo "✅ Windows/Git Bash logging functions work correctly" | |
| continue-on-error: true | |
| - name: 🚀 Run Preprovision Hook via AZD | |
| shell: bash | |
| run: | | |
| # Initialize azd environment properly | |
| azd env select ${{ env.AZURE_ENV_NAME }} 2>/dev/null || azd env new ${{ env.AZURE_ENV_NAME }} --no-prompt | |
| azd env set AZURE_LOCATION ${{ env.AZURE_LOCATION }} | |
| azd env set LOCAL_STATE true | |
| azd env set PREFLIGHT_LIVE_CHECKS false | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| echo "Running: azd hooks run preprovision" | |
| azd hooks run preprovision | |
| echo "" | |
| echo "✅ Preprovision hook executed successfully via azd (Windows)" | |
| - name: 📦 Run Postprovision Hook via AZD | |
| shell: bash | |
| run: | | |
| # Use existing azd environment | |
| azd env select ${{ env.AZURE_ENV_NAME }} | |
| # Set mock values that postprovision expects | |
| azd env set DB_INITIALIZED true | |
| azd env set AZURE_APPCONFIG_ENDPOINT "https://mock-appconfig.azconfig.io" | |
| azd env set BACKEND_API_URL "https://mock-backend.azurecontainerapps.io" | |
| # Export vars for the hook script | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export LOCAL_STATE=true | |
| export CI=true | |
| echo "Running: azd hooks run postprovision" | |
| azd hooks run postprovision | |
| echo "" | |
| echo "✅ Postprovision hook executed successfully via azd (Windows)" | |
| - name: 📋 Windows Test Summary | |
| shell: bash | |
| run: | | |
| echo "## 🪟 Windows Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Script Syntax | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Helper Scripts | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🧪 Logging Functions | ✓ Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run preprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run postprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Test in Dev Container (Codespaces-like environment) | |
| # ============================================================================ | |
| test-devcontainer: | |
| name: 🐳 Test in Dev Container | |
| runs-on: ubuntu-latest | |
| needs: lint | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: 🐳 Build and Test in Dev Container | |
| uses: devcontainers/[email protected] | |
| with: | |
| runCmd: | | |
| echo "╭─────────────────────────────────────────────────────────────" | |
| echo "│ 🐳 Testing AZD Hooks in Dev Container" | |
| echo "├─────────────────────────────────────────────────────────────" | |
| # Verify environment | |
| echo "│ Environment:" | |
| echo "│ OS: $(uname -a)" | |
| echo "│ Shell: $SHELL" | |
| echo "│ User: $(whoami)" | |
| echo "" | |
| # Check installed tools | |
| echo "│ Installed Tools:" | |
| echo "│ Azure CLI: $(az --version 2>/dev/null | head -1 || echo 'not found')" | |
| echo "│ AZD: $(azd version 2>/dev/null | head -1 || echo 'not found')" | |
| echo "│ Terraform: $(terraform version 2>/dev/null | head -1 || echo 'not found')" | |
| echo "│ Node.js: $(node --version 2>/dev/null || echo 'not found')" | |
| echo "│ Python: $(python3 --version 2>/dev/null || echo 'not found')" | |
| echo "│ jq: $(jq --version 2>/dev/null || echo 'not found')" | |
| echo "│ Docker: $(docker --version 2>/dev/null || echo 'not found')" | |
| echo "" | |
| # Validate script syntax | |
| echo "│ Validating script syntax..." | |
| bash -n devops/scripts/azd/preprovision.sh && echo "│ ✓ preprovision.sh" | |
| bash -n devops/scripts/azd/postprovision.sh && echo "│ ✓ postprovision.sh" | |
| for script in devops/scripts/azd/helpers/*.sh; do | |
| bash -n "$script" && echo "│ ✓ $(basename $script)" | |
| done | |
| echo "" | |
| # Create mock azd environment | |
| export CI=true | |
| export AZURE_ENV_NAME=ci-devcontainer | |
| export AZURE_LOCATION=eastus2 | |
| export LOCAL_STATE=true | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| mkdir -p .azure/$AZURE_ENV_NAME | |
| cat > .azure/$AZURE_ENV_NAME/.env << EOF | |
| AZURE_ENV_NAME="$AZURE_ENV_NAME" | |
| AZURE_LOCATION="$AZURE_LOCATION" | |
| LOCAL_STATE="true" | |
| DB_INITIALIZED="true" | |
| PREFLIGHT_LIVE_CHECKS="false" | |
| EOF | |
| # Initialize azd environment | |
| azd env select $AZURE_ENV_NAME 2>/dev/null || azd env new $AZURE_ENV_NAME --no-prompt | |
| azd env set AZURE_LOCATION $AZURE_LOCATION | |
| azd env set LOCAL_STATE true | |
| azd env set PREFLIGHT_LIVE_CHECKS false | |
| # Run preprovision hook | |
| echo "│ Running preprovision hook..." | |
| azd hooks run preprovision | |
| echo "│ ✓ Preprovision hook completed" | |
| echo "" | |
| # Set mock values for postprovision | |
| azd env set DB_INITIALIZED true | |
| azd env set AZURE_APPCONFIG_ENDPOINT "https://mock-appconfig.azconfig.io" | |
| azd env set BACKEND_API_URL "https://mock-backend.azurecontainerapps.io" | |
| # Run postprovision hook | |
| echo "│ Running postprovision hook..." | |
| azd hooks run postprovision | |
| echo "│ ✓ Postprovision hook completed" | |
| echo "" | |
| echo "╰─────────────────────────────────────────────────────────────" | |
| echo "✅ Dev Container tests passed!" | |
| - name: 📋 Dev Container Test Summary | |
| run: | | |
| echo "## 🐳 Dev Container Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🐳 Dev Container Build | ✓ Built |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🔧 Tools Installed | ✓ Verified |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📜 Script Syntax | ✓ Validated |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run preprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 azd hooks run postprovision | ✓ Executed |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "This validates the same environment users get in **GitHub Codespaces**." >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Integration Test (Requires Azure Auth - Optional) | |
| # ============================================================================ | |
| integration-test: | |
| name: 🔗 Integration Test | |
| runs-on: ubuntu-latest | |
| needs: [test-linux, test-macos, test-windows] | |
| if: github.event_name == 'workflow_dispatch' | |
| environment: dev | |
| env: | |
| AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} | |
| AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} | |
| AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} | |
| steps: | |
| - name: 🛒 Checkout | |
| uses: actions/checkout@v4 | |
| - name: ⚙️ Setup Tools | |
| uses: Azure/setup-azd@v2 | |
| - name: 🔧 Setup Terraform | |
| uses: hashicorp/setup-terraform@v3 | |
| with: | |
| terraform_version: 1.9.0 | |
| - name: 🔐 Azure Login (OIDC) | |
| uses: azure/login@v2 | |
| id: azure-login | |
| with: | |
| client-id: ${{ env.AZURE_CLIENT_ID }} | |
| tenant-id: ${{ env.AZURE_TENANT_ID }} | |
| subscription-id: ${{ env.AZURE_SUBSCRIPTION_ID }} | |
| continue-on-error: true | |
| - name: 🔐 AZD Login | |
| if: steps.azure-login.outcome == 'success' | |
| run: | | |
| azd auth login \ | |
| --client-id "$AZURE_CLIENT_ID" \ | |
| --federated-credential-provider github \ | |
| --tenant-id "$AZURE_TENANT_ID" | |
| continue-on-error: true | |
| - name: ⚙️ Create Test Environment | |
| run: | | |
| azd env new ci-integration-test --no-prompt || true | |
| azd env select ci-integration-test | |
| azd env set AZURE_LOCATION eastus2 | |
| azd env set LOCAL_STATE true | |
| continue-on-error: true | |
| - name: 🧪 Test Live Regional Availability Checks | |
| if: steps.azure-login.outcome == 'success' | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| source preflight-checks.sh | |
| # Enable live checks with Azure auth | |
| export PREFLIGHT_LIVE_CHECKS=true | |
| export AZURE_LOCATION=eastus2 | |
| echo "🔍 Testing LIVE regional availability checks with Azure CLI..." | |
| echo "" | |
| # Test individual helper functions | |
| echo "Testing check_provider_region for Cosmos DB..." | |
| if check_provider_region "Microsoft.DocumentDB" "databaseAccounts" "eastus2"; then | |
| echo "✅ Cosmos DB available in eastus2" | |
| else | |
| echo "⚠️ Cosmos DB check returned false (may still be available)" | |
| fi | |
| echo "" | |
| echo "Testing check_cognitive_services_region for Speech..." | |
| if check_cognitive_services_region "SpeechServices" "eastus2"; then | |
| echo "✅ Speech Services available in eastus2" | |
| else | |
| echo "⚠️ Speech Services check returned false" | |
| fi | |
| echo "" | |
| echo "Testing check_openai_model_region..." | |
| if check_openai_model_region "eastus2"; then | |
| echo "✅ Azure OpenAI available in eastus2" | |
| else | |
| echo "⚠️ Azure OpenAI check returned false" | |
| fi | |
| echo "" | |
| echo "Getting available regions for Container Apps..." | |
| regions=$(get_provider_regions "Microsoft.App" "containerApps") | |
| echo "Container Apps regions: $regions" | |
| echo "" | |
| echo "Running full regional availability check..." | |
| check_regional_availability | |
| continue-on-error: true | |
| - name: 🧪 Test Cached Regional Checks (Fallback) | |
| run: | | |
| cd devops/scripts/azd/helpers | |
| source preflight-checks.sh | |
| # Force cached mode | |
| export PREFLIGHT_LIVE_CHECKS=false | |
| export CI=true | |
| echo "Testing cached regional availability checks..." | |
| for region in eastus2 swedencentral westus2 westeurope japaneast; do | |
| export AZURE_LOCATION="$region" | |
| echo "" | |
| echo "📍 Region: $region" | |
| check_regional_availability || true | |
| done | |
| continue-on-error: true | |
| - name: 🧪 Run Preprovision Hook (Dry Run) | |
| run: | | |
| export LOCAL_STATE=true | |
| export AZURE_ENV_NAME=ci-integration-test | |
| export AZURE_LOCATION=eastus2 | |
| export PREFLIGHT_LIVE_CHECKS=${{ steps.azure-login.outcome == 'success' && 'true' || 'false' }} | |
| echo "Running preprovision hook..." | |
| echo " LOCAL_STATE=$LOCAL_STATE" | |
| echo " PREFLIGHT_LIVE_CHECKS=$PREFLIGHT_LIVE_CHECKS" | |
| bash devops/scripts/azd/preprovision.sh terraform || true | |
| continue-on-error: true | |
| - name: 📋 Integration Test Summary | |
| if: always() | |
| run: | | |
| echo "## 🔗 Integration Test Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Test | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🔐 Azure Login | ${{ steps.azure-login.outcome == 'success' && '🟢 Authenticated' || '⚪ Skipped' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🌍 Live Region Checks | ${{ steps.azure-login.outcome == 'success' && '🟢 Tested' || '⚪ Skipped (no auth)' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 📦 Cached Region Checks | 🟢 Tested |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🚀 Preprovision Hook | 🟢 Executed |" >> $GITHUB_STEP_SUMMARY | |
| # ============================================================================ | |
| # JOB: Summary | |
| # ============================================================================ | |
| summary: | |
| name: 📊 Test Summary | |
| runs-on: ubuntu-latest | |
| needs: [lint, test-linux, test-macos, test-windows, test-devcontainer] | |
| if: always() | |
| steps: | |
| - name: 📊 Generate Summary | |
| run: | | |
| echo "# 🧪 AZD Hooks Test Summary" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "## Platform Results" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Platform | Status |" >> $GITHUB_STEP_SUMMARY | |
| echo "|----------|--------|" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🔍 Lint | ${{ needs.lint.result == 'success' && '🟢 Passed' || '🔴 Failed' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🐧 Linux | ${{ needs.test-linux.result == 'success' && '🟢 Passed' || '🔴 Failed' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🍎 macOS | ${{ needs.test-macos.result == 'success' && '🟢 Passed' || '🔴 Failed' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🪟 Windows | ${{ needs.test-windows.result == 'success' && '🟢 Passed' || '🔴 Failed' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "| 🐳 Dev Container | ${{ needs.test-devcontainer.result == 'success' && '🟢 Passed' || '🔴 Failed' }} |" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "## Tested Scripts" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "- \`devops/scripts/azd/preprovision.sh\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- \`devops/scripts/azd/postprovision.sh\`" >> $GITHUB_STEP_SUMMARY | |
| echo "- \`devops/scripts/azd/helpers/*.sh\`" >> $GITHUB_STEP_SUMMARY | |
| - name: ✅ Check Results | |
| run: | | |
| if [[ "${{ needs.test-linux.result }}" != "success" ]] || \ | |
| [[ "${{ needs.test-macos.result }}" != "success" ]] || \ | |
| [[ "${{ needs.test-windows.result }}" != "success" ]] || \ | |
| [[ "${{ needs.test-devcontainer.result }}" != "success" ]]; then | |
| echo "❌ Some platform tests failed" | |
| exit 1 | |
| fi | |
| echo "✅ All platform tests passed!" |