Skip to content

Commit 585d98b

Browse files
fix: melhora detecção de mudanças no workflow terraform apply
- Implementa detecção robusta de PRs mergeados (3 métodos) - Adiciona lógica para mudanças em módulos aplicarem em todos ambientes - Melhora análise de commits e merges - Adiciona logs detalhados para debugging - Resolve problema de mudanças não detectadas automaticamente
1 parent 6bdf1d3 commit 585d98b

File tree

1 file changed

+73
-9
lines changed

1 file changed

+73
-9
lines changed

.github/workflows/tf_apply.yaml

Lines changed: 73 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,26 @@ jobs:
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

Comments
 (0)