3838 - name : Get PR Number
3939 id : get_pr
4040 run : |
41- PR_NUMBER=$(gh pr list --state merged --json number,mergeCommit --jq ".[] | select(.mergeCommit.oid == \"${{ github.sha }}\") | .number")
41+ # Tentar múltiplas abordagens para encontrar o PR
42+ echo "Searching for PR associated with commit ${{ github.sha }}..."
43+
44+ # Método 1: Buscar por merge commit
45+ PR_NUMBER=$(gh pr list --state merged --json number,mergeCommit --jq ".[] | select(.mergeCommit.oid == \"${{ github.sha }}\") | .number" | head -1)
46+
47+ # Método 2: Buscar por commit na branch (caso seja squash merge)
4248 if [ -z "$PR_NUMBER" ]; then
43- echo "No PR found for this commit. Will apply all environments as fallback."
49+ echo "Trying to find PR by commit message..."
50+ PR_NUMBER=$(gh pr list --state merged --json number,title --jq ".[] | select(.title | contains(\"${{ github.event.head_commit.message }}\")) | .number" | head -1)
51+ fi
52+
53+ # Método 3: Buscar PRs mergeados nas últimas 2 horas
54+ if [ -z "$PR_NUMBER" ]; then
55+ echo "Searching recent merged PRs..."
56+ PR_NUMBER=$(gh pr list --state merged --json number,mergedAt --jq ".[] | select(.mergedAt > (now - 7200)) | .number" | head -1)
57+ fi
58+
59+ if [ -z "$PR_NUMBER" ]; then
60+ echo "No PR found for this commit. Will detect changes via git diff."
4461 echo "pr_number=" >> $GITHUB_OUTPUT
4562 else
4663 echo "Found PR number: $PR_NUMBER"
@@ -59,28 +76,75 @@ jobs:
5976 echo "Changed files from PR $PR_NUMBER:"
6077 echo "$FILES"
6178 else
62- # Método 2: Detectar via git diff do commit atual
79+ # Método 2: Detectar via git diff
6380 echo "No PR found. Detecting changes from commit diff..."
64- FILES=$(git diff --name-only HEAD~1 HEAD)
65- echo "Changed files from commit ${{ github.sha }}:"
81+
82+ # Tentar diferentes abordagens para capturar mudanças
83+ if git merge-base --is-ancestor HEAD~1 HEAD; then
84+ FILES=$(git diff --name-only HEAD~1 HEAD)
85+ else
86+ # Para merges, comparar com o primeiro parent
87+ FILES=$(git diff --name-only HEAD^1 HEAD)
88+ fi
89+
90+ # Se ainda não encontrou mudanças, usar diff dos últimos 2 commits
91+ if [ -z "$FILES" ]; then
92+ FILES=$(git diff --name-only HEAD~2 HEAD)
93+ fi
94+
95+ echo "Changed files from commit analysis:"
6696 echo "$FILES"
6797 fi
6898
6999 # Verificar mudanças no ambiente dev (terraform/env/dev/)
70100 if echo "$FILES" | grep -q "^terraform/env/dev/"; then
71- echo "Dev environment changes detected"
101+ echo "✅ Dev environment changes detected"
72102 echo "has_dev=true" >> $GITHUB_OUTPUT
73103 else
74- echo "No dev environment changes detected"
104+ echo "❌ No dev environment changes detected"
105+ echo "has_dev=false" >> $GITHUB_OUTPUT
75106 fi
76107
77108 # Verificar mudanças na infraestrutura compartilhada (terraform/ excluindo terraform/env/)
78109 if echo "$FILES" | grep "^terraform/" | grep -v "^terraform/env/" | grep -q .; then
79- echo "Shared infrastructure changes detected"
110+ echo "✅ Shared infrastructure changes detected"
80111 echo "has_shared=true" >> $GITHUB_OUTPUT
81112 else
82- echo "No shared infrastructure changes detected"
113+ echo "❌ No shared infrastructure changes detected"
114+ echo "has_shared=false" >> $GITHUB_OUTPUT
115+ fi
116+
117+ # NOVA LÓGICA: Verificar mudanças nos módulos que afetam TODOS os ambientes
118+ if echo "$FILES" | grep -q "^terraform/modules/"; then
119+ echo "🔄 Module changes detected - will apply to ALL environments"
120+ echo "has_modules=true" >> $GITHUB_OUTPUT
121+ # Sobrescrever as flags para garantir que ambos ambientes sejam aplicados
122+ sed -i 's/has_dev=false/has_dev=true/' $GITHUB_OUTPUT
123+ sed -i 's/has_shared=false/has_shared=true/' $GITHUB_OUTPUT
124+ else
125+ echo "has_modules=false" >> $GITHUB_OUTPUT
83126 fi
127+
128+ # Ler os valores finais para debug
129+ HAS_SHARED=$(grep "has_shared=" $GITHUB_OUTPUT | cut -d'=' -f2 | tail -1)
130+ HAS_DEV=$(grep "has_dev=" $GITHUB_OUTPUT | cut -d'=' -f2 | tail -1)
131+ HAS_MODULES=$(grep "has_modules=" $GITHUB_OUTPUT | cut -d'=' -f2 | tail -1)
132+
133+ # Debug: Mostrar o que será aplicado
134+ echo "=== SUMMARY ==="
135+ echo "Shared infrastructure: $([ "$HAS_SHARED" = "true" ] && echo "✅ YES" || echo "❌ NO")"
136+ echo "Dev environment: $([ "$HAS_DEV" = "true" ] && echo "✅ YES" || echo "❌ NO")"
137+ echo "Module changes: $([ "$HAS_MODULES" = "true" ] && echo "✅ YES" || echo "❌ NO")"
138+
139+ - name : Debug Detection Results
140+ run : |
141+ echo "=== DETECTION RESULTS ==="
142+ echo "PR Number: ${{ steps.get_pr.outputs.pr_number }}"
143+ echo "Has Shared: ${{ steps.detect.outputs.has_shared }}"
144+ echo "Has Dev: ${{ steps.detect.outputs.has_dev }}"
145+ echo "Has Modules: ${{ steps.detect.outputs.has_modules }}"
146+ echo "Commit SHA: ${{ github.sha }}"
147+ echo "Event: ${{ github.event_name }}"
84148
85149 - name : Apply Shared Infrastructure
86150 if : steps.detect.outputs.has_shared == 'true'
0 commit comments