Skip to content
Merged
Changes from 16 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
b5b0da7
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
f141e88
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
065bfdf
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
66b641b
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
df19d66
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
d7f5d71
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
5a4b61c
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
1ce8e7e
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
6e8a0a2
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
693b302
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
e935b6c
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
c52e66b
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
dceefde
removendo logs de debug
anaalves-asaas Dec 17, 2025
9d388c4
ajusta logica do bloqueio de merge do codenarc para quebrar apenas em…
anaalves-asaas Dec 17, 2025
08d0ec9
exit 1 temporiamente desabilitado
anaalves-asaas Dec 17, 2025
6deceea
ajuste do shellcheck
anaalves-asaas Dec 17, 2025
4d36d7c
melhorias
anaalves-asaas Dec 18, 2025
0bc4145
validacao
anaalves-asaas Dec 19, 2025
645a9a1
testando abordagem hibrida reviewdog
anaalves-asaas Dec 19, 2025
b351f1c
testando abordagem hibrida reviewdog
anaalves-asaas Dec 19, 2025
17ccafa
testando abordagem hibrida reviewdog
anaalves-asaas Dec 19, 2025
60e2cb6
removendo comentarios de debug
anaalves-asaas Dec 19, 2025
298dd84
removendo comentarios de debug
anaalves-asaas Dec 19, 2025
45b9f68
adicionando logs de debug
anaalves-asaas Dec 19, 2025
daf4cb3
removendo logs de debug
anaalves-asaas Dec 19, 2025
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
151 changes: 136 additions & 15 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,27 +1,37 @@
#!/bin/sh
set -e
trap 'rm -f result.txt >/dev/null 2>&1' EXIT
trap 'cleanup_temp_files' EXIT

CODENARC_RESULT="result.txt"
VIOLATIONS_FLAG="/tmp/found_violations.txt"
ALL_DIFF="/tmp/all_diff.txt"
CHANGED_LINES_CACHE="/tmp/changed_lines.txt"

cleanup_temp_files() {
rm -f "$CODENARC_RESULT" "$VIOLATIONS_FLAG" "$ALL_DIFF" "$CHANGED_LINES_CACHE" >/dev/null 2>&1
}

run_codenarc() {
report="${INPUT_REPORT:-compact:stdout}"
includes_arg=""

if [ -n "$INPUT_SOURCE_FILES" ]; then
includes_arg="-includes=${INPUT_SOURCE_FILES}"
fi

echo "🔍 Executando CodeNarc..."
java -jar /lib/codenarc-all.jar \
-report="$report" \
-rulesetfiles="${INPUT_RULESETFILES}" \
-basedir="." \
$includes_arg \
Comment thread
anaalves-asaas marked this conversation as resolved.
Comment thread
anaalves-asaas marked this conversation as resolved.
> result.txt
> "$CODENARC_RESULT"
}

run_reviewdog() {
echo "📤 Enviando resultados para reviewdog..."
< result.txt reviewdog -efm="%f:%l:%m" -efm="%f:%r:%m" \
< "$CODENARC_RESULT" reviewdog \
-efm="%f:%l:%m" -efm="%f:%r:%m" \
-name="codenarc" \
-reporter="${INPUT_REPORTER:-github-pr-check}" \
-filter-mode="${INPUT_FILTER_MODE}" \
Expand All @@ -30,19 +40,130 @@ run_reviewdog() {
${INPUT_REVIEWDOG_FLAGS}
}

check_blocking_rules() {
echo "🔎 Verificando violacoes bloqueantes (priority 1)..."
generate_all_diff() {
if [ -n "$GITHUB_BASE_SHA" ] && [ -n "$GITHUB_HEAD_SHA" ]; then
git fetch origin "$GITHUB_BASE_SHA" --depth=1 2>/dev/null || true
git fetch origin "$GITHUB_HEAD_SHA" --depth=1 2>/dev/null || true
git diff -U0 "$GITHUB_BASE_SHA" "$GITHUB_HEAD_SHA" -- '*.groovy' > "$ALL_DIFF" 2>/dev/null || true
else
git diff -U0 HEAD~1 -- '*.groovy' > "$ALL_DIFF" 2>/dev/null || true
fi
}

build_changed_lines_cache() {
true > "$CHANGED_LINES_CACHE"
current_file=""

while read -r line; do
if echo "$line" | grep -q "^diff --git"; then
current_file=$(echo "$line" | sed 's|^diff --git a/\(.*\) b/.*|\1|')
elif echo "$line" | grep -q "^@@"; then
if [ -n "$current_file" ]; then
range=$(echo "$line" | sed 's/.*+\([0-9,]*\).*/\1/')
if echo "$range" | grep -q ","; then
start=$(echo "$range" | cut -d',' -f1)
count=$(echo "$range" | cut -d',' -f2)
else
start="$range"
count=1
fi

i="$start"
while [ "$i" -lt "$((start + count))" ]; do
echo "$current_file:$i" >> "$CHANGED_LINES_CACHE"
i=$((i + 1))
done
fi
fi
done < "$ALL_DIFF"
}

get_p1_violations_count() {
p1_count=$(grep -Eo "p1=[0-9]+" "$CODENARC_RESULT" | cut -d'=' -f2 | head -1)
echo "${p1_count:-0}"
}

parse_allowed_file_patterns() {
[ -n "$INPUT_SOURCE_FILES" ] && echo "$INPUT_SOURCE_FILES" | tr ',' '\n' | sed 's/\*\*/.*/g'
}

p1_count=$(grep -Eo "p1=[0-9]+" result.txt | cut -d'=' -f2 | head -1)
p1_count=${p1_count:-0}
file_matches_patterns() {
file="$1"
patterns="$2"

[ -z "$patterns" ] && return 0

for pattern in $patterns; do
if echo "$file" | grep -Eq "$pattern"; then
return 0
fi
done

return 1
}

echo "📊 Resumo CodeNarc → priority 1=${p1_count}"
parse_diff_range() {
range=$(echo "$1" | sed 's/.*+\([0-9,]*\).*/\1/')

if echo "$range" | grep -q ","; then
echo "$(echo "$range" | cut -d',' -f1) $(echo "$range" | cut -d',' -f2)"
else
echo "$range 1"
fi
}

line_is_in_changed_range() {
target_line="$1"
file="$2"

grep -q "^$file:$target_line$" "$CHANGED_LINES_CACHE"
}

check_blocking_rules() {
echo "🔎 Verificando violacoes bloqueantes (priority 1)..."

p1_count=$(get_p1_violations_count)
echo "📊 Total de P1 encontradas: $p1_count"

[ "$p1_count" -eq 0 ] && echo "✅ Nenhuma violacao P1 detectada." && return 0

echo "🔎 Gerando cache de linhas alteradas..."
generate_all_diff
build_changed_lines_cache

allowed_patterns=$(parse_allowed_file_patterns)
if [ -n "$allowed_patterns" ]; then
echo "🧩 Analisando apenas arquivos filtrados por INPUT_SOURCE_FILES"
fi

echo "0" > "$VIOLATIONS_FLAG"

grep -E ':[0-9]+:' "$CODENARC_RESULT" | while IFS=: read -r file line rest; do
[ -z "$file" ] && continue

echo "$file" | grep -q '\.groovy$' || continue

if ! file_matches_patterns "$file" "$allowed_patterns"; then
continue
fi

if line_is_in_changed_range "$line" "$file"; then
echo "🚨 Violacao P1 em linha alterada: $file:$line"
echo "1" > "$VIOLATIONS_FLAG"
fi
done

violations_in_diff=$(cat "$VIOLATIONS_FLAG")

if [ "$violations_in_diff" -eq 1 ]; then
# echo "⛔ Violacoes P1 encontradas em linhas alteradas - bloqueando merge"
# echo "💡 Corrija as violacoes ou utilize bypass autorizado"
# exit 1

if [ "$p1_count" -gt 0 ]; then
echo "⛔ Foram encontradas violacoes bloqueantes (priority 1)."
echo "💡 Corrija as violacoes ou use o bypass autorizado pelo coordenador."
echo "⛔ Violacoes P1 encontradas em linhas alteradas - DEVERIA bloquear merge"
echo "🔧 Exit desabilitado temporariamente para monitoramento"
else
echo "✅ Nenhuma violacao bloqueante (priority 1) encontrada."
echo "⚠️ Violacoes P1 existem mas fora das linhas alteradas - merge permitido"
fi
}

Expand All @@ -57,4 +178,4 @@ run_codenarc
run_reviewdog
check_blocking_rules

echo "🏁 Finalizado com sucesso."
echo "🏁 Concluido com sucesso"
Loading