design pattern 
      
    
      
      
        
        
      
      
        github actions 
      
    
      
      
        
        
      
      
        terraform 
      
    
   
  
    
      
       
  
  
This workflow is part of the Terraform-to-Azure deployment automation pipeline.  
The primary role is to detect changes to main.tf files  in pull requests or direct pushes to the main branch, and then trigger targeted downstream processing  for each changed file.
 
Purpose 
Change Detection:  Identify modifications to any main.tf file.Targeted Execution:  For each changed file, trigger a reusable downstream workflow to process, test, and deploy changes.Efficiency:  Avoid running unnecessary jobs when no main.tf changes are detected.Modularity:  Enable environment-specific or file-specific CI/CD runs. 
Workflow Jobs 
(1) Trigger Condition 
Aspect Description  
 
WHAT Workflow triggers when main.tf files are modified 
 
HOW Uses GitHub Actions paths filter: ["**/main.tf"] to monitor any main.tf file changes 
 
WHY Only runs when Terraform infrastructure code changes, avoiding unnecessary executions 
 
RESULT Efficient CI/CD that responds specifically to infrastructure changes in push events to main branch or pull requests 
 
 
on : 
   push : 
     branches :   [ main ] 
     paths :   [ "**/main.tf" ] 
   pull_request : 
     paths :   [ "**/main.tf" ] 
(2) Detect Repository Context 
Aspect Description  
 
WHAT Automatically detects which Azure environment a repository represents based on its name 
 
HOW Extracts repo name from github.repository and pattern matches: *prod* → PROD, *dev* → DEV, *staging* → STAGING, other → DEFAULT 
 
WHY Enables one centralized workflow to behave differently per environment without manual configuration 
 
RESULT Other steps can use the detected environment for environment-specific behavior (notifications, approvals, etc.) 
 
 
(3) Checkout Repository 
Aspect Description  
 
WHAT Downloads the repository code so the workflow can analyze which files changed 
 
HOW Uses actions/checkout@v4 with fetch-depth: 0 for complete git history and ref: ${{ github.ref }} for exact branch/commit 
 
WHY The workflow must see the git history to detect which main.tf files were modified between commits 
 
RESULT Workspace is prepared with full repository context for file change detection 
 
 
(4) Sync to Latest 
Aspect Description  
 
WHAT Ensures the workspace is synchronized with the latest main branch 
 
HOW Executes git fetch origin main, git checkout main, git reset --hard origin/main 
 
WHY Guarantees accurate file change detection by working from the most current main branch state 
 
RESULT Clean, up-to-date workspace ready for reliable change comparison 
 
 
(5) Detect Changed main.tf Files 
Aspect Description  
 
WHAT Identifies which main.tf files have been modified in the current event 
 
HOW Uses git diff to compare commits (PR: base vs head, Push: previous vs current) and filters for main.tf files, then converts results to JSON array 
 
WHY Enables targeted processing - only modified infrastructure files trigger downstream workflows 
 
RESULT JSON array output (changed_main_files) containing paths of all modified main.tf files for matrix processing 
 
 
(6) Early Exit 
Aspect Description  
 
WHAT Stops workflow execution if no main.tf files were changed 
 
HOW Checks if changed_main_files output is empty and exits with notice message 
 
WHY Saves compute resources and prevents unnecessary downstream processing when no infrastructure changes detected 
 
RESULT Efficient workflow that only continues when actual Terraform changes require validation 
 
 
(7) Process Changed main.tf Files 
Aspect Description  
 
WHAT Executes parallel processing jobs for each changed main.tf file using matrix strategy 
 
HOW Uses matrix.tfvars_file from JSON array with fail-fast: false, calls reusable workflow process-changed-main-files.yaml for each file 
 
WHY Enables concurrent validation of multiple infrastructure changes while ensuring isolated processing per file 
 
RESULT Complete Terraform validation pipeline (format, lint, plan, security scan, cost estimation) runs for each modified file 
 
 
Key Components 
Concurrency Control 
# Note: Concurrency control is handled by the calling workflow 
# to avoid deadlocks between parent and child workflows 
Reusable Workflow Design:  This workflow is called by subscription repositories, so concurrency is managed at the caller levelPrevents Deadlocks:  Avoids conflicts between parent (caller) and child (reusable) workflow concurrency groupsCaller Responsibility:  Each subscription repository implements its own concurrency control strategy 
Security Considerations 
Principle of Least Privilege:  Only required secrets are passed from calling repository to reusable workflowScoped Permissions:  
permissions : 
   contents :   write 
   checks :   write 
   id-token :   write 
Secrets Architecture: 
Repository-specific:  AZURE_DEPLOY_TO_MODULE_RO, AZURE_SUBSCRIPTION_ID, AZURE_CLIENT_IDOrganization-level:  AZURE_TENANT_ID, INFRACOST_API_KEY, SLACK_WEBHOOK_URL 
Secrets Inheritance:  Uses secrets: inherit pattern for seamless cross-repository workflow calls