Skip to content

Conversation

@anaalves-asaas
Copy link
Contributor

@anaalves-asaas anaalves-asaas commented Jan 22, 2026

Impacto

Esta alteração corrige falsos positivos no bloqueio de merge do codenarc-action e aprimora a exibição da prioridade das violações do CodeNarc nos logs.

Problema anterior:

  • O script bloqueava o merge quando detectava violações de Prioridade 1 (P1) em um arquivo e qualquer violação em linhas alteradas, mesmo que a P1 não estivesse na linha alterada, resultando em falsos positivos.
  • Não havia uma forma precisa de identificar se uma violação específica em uma linha alterada era de fato uma P1, pois o formato compact do CodeNarc não fornecia a prioridade individualmente.

Solução implementada:

  • Extração precisa de Prioridade: O CodeNarc agora gera seu relatório em formato JSON, que inclui explicitamente a prioridade (priority) de cada violação.
  • Parseamento e Filtragem: Um script jq foi integrado para extrair seletivamente as violações de Prioridade 1 (P1) do relatório JSON e formatá-las em um output compacto.
  • Verificação no Diff Aprimorada: Apenas as violações P1 que estão explicitamente localizadas em linhas alteradas no diff de código bloqueiam o merge, eliminando os falsos positivos.
  • Logs Claros: As violações exibidas nos logs agora incluem as tags [P1], [P2], [P3], facilitando a identificação e a depuração.
  • Integração com Reviewdog: O reviewdog processa o output formatado (agora contendo a prioridade) utilizando errorformat (-efm). Violações baseadas em linha são reportadas como github-pr-review e violações baseadas em arquivo como github-pr-check.

Observação sobre SARIF:
A utilização do formato SARIF do CodeNarc, embora inicialmente considerada e um padrão mais robusto, foi adiada. O suporte a SARIF no CodeNarc é uma funcionalidade muito recente (implementada na branch master e sem uma versão estável/tag liberada no momento). Para garantir a estabilidade e evitar dependências em funcionalidades instáveis, optou-se por uma abordagem alternativa robusta que atinge os mesmos objetivos de precisão e exibição de prioridade, utilizando as versões estáveis existentes do CodeNarc e Reviewdog.

Link da tarefa no JIRA

https://asaas.atlassian.net/browse/DVT-1005

Mudanças técnicas:

  • CodeNarc: Mantido na versão estável 3.6.0-groovy3.0.23. A configuração de output foi alterada para JSON para incluir a priority de cada violação.
  • Reviewdog: Mantido na versão v0.13.0. A integração é feita via errorformat (-efm), sem a necessidade de suporte direto a SARIF.
  • Dockerfile: Adicionado jq para o parseamento do JSON do CodeNarc. O script entrypoint.sh teve chmod +x adicionado.
  • Script entrypoint.sh:
    • Atualizado para gerar o relatório do CodeNarc em JSON.
    • Implementado um novo método convert_json_to_compact que utiliza jq para formatar o JSON em um formato legível, incluindo a prioridade ([P1]).
    • A lógica em check_blocking_rules foi revisada para extrair apenas P1s do JSON, verificar sua presença em linhas alteradas e bloquear o merge de forma precisa.
    • A forma como o reviewdog é alimentado foi adaptada para o formato compacto (errorformat).

Cenários testados

Bloqueio correto (sem falsos positivos)

Cenário 1: P1 fora do diff + P2 dentro → NÃO deve bloquear ✅

https://github.com/asaasdev/test-workflows-run/pull/907

https://github.com/asaasdev/test-workflows-run/actions/runs/21264924084/job/61290272849?pr=907

image image image
Cenário 2: P1 dentro do diff → DEVE bloquear ❌

https://github.com/asaasdev/test-workflows-run/pull/908

https://github.com/asaasdev/test-workflows-run/actions/runs/21265632030/job/61290264034?pr=908

image image image
Cenário 3: Apenas P2 → NÃO deve bloquear ✅

https://github.com/asaasdev/test-workflows-run/pull/914

https://github.com/asaasdev/test-workflows-run/actions/runs/21293863565/job/61294428119?pr=914

image image image
Cenário 4: Violação file-based (PackageName) → Detectar corretamente

https://github.com/asaasdev/test-workflows-run/pull/915

https://github.com/asaasdev/test-workflows-run/actions/runs/21293864534/job/61294431297?pr=915

https://github.com/asaasdev/test-workflows-run/runs/61294483610

image image image
Cenário 5: Múltiplas P1 - algumas dentro, outras fora do diff → DEVE bloquear ❌

https://github.com/asaasdev/test-workflows-run/pull/916

https://github.com/asaasdev/test-workflows-run/actions/runs/21293865641/job/61294435683?pr=916

image image image
Cenário 6: Modo local (sem git diff) image

Logs exibem priority

  • Cada violação mostra [P1], [P2], [P3]
  • Lista de P1s exibida quando existem
  • Formato: arquivo:linha:Regra Mensagem [PX]

Reviewdog funciona

  • Comentários aparecem no PR (violações line-based → github-pr-review)
  • Checks de arquivo aparecem no PR (violações file-based → github-pr-check)
  • Modo local funciona com -reporter=local

Casos especiais

  • Violações a nível de arquivo (sem número de linha) são detectadas corretamente e bloqueiam se forem P1 em um arquivo alterado.
  • No modo local, todas as P1s são bloqueantes (não há verificação de diff).
  • Se o diff estiver vazio, todas as P1s são consideradas bloqueantes (medida de segurança).

@github-actions
Copy link
Contributor

@wiz-cce748eedd
Copy link

wiz-cce748eedd bot commented Jan 22, 2026

Wiz Scan Summary

Displaying only findings that violated a policy

Scanner Findings
Vulnerability Finding Vulnerabilities -
Data Finding Sensitive Data -
Secret Finding Secrets -
IaC Misconfiguration IaC Misconfigurations -
SAST Finding SAST Findings -
Software Management Finding Software Management Findings -
Total -

View scan details in Wiz

To detect these findings earlier in the dev lifecycle, try using Wiz Code VS Code Extension.

name="$4"
filter_mode="$5"
level="$6"
$includes_arg >/dev/null 2>&1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [shellcheck] reported by reviewdog 🐶
Double quote to prevent globbing and word splitting. SC2086

-name="codenarc" \
-filter-mode="${INPUT_FILTER_MODE}" \
-level="${INPUT_LEVEL}" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [shellcheck] reported by reviewdog 🐶
Double quote to prevent globbing and word splitting. SC2086

-name="codenarc" \
-filter-mode="${INPUT_FILTER_MODE}" \
-level="${INPUT_LEVEL}" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [shellcheck] reported by reviewdog 🐶
Double quote to prevent globbing and word splitting. SC2086

-name="codenarc" \
-filter-mode="nofilter" \
-level="warning" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📝 [shellcheck] reported by reviewdog 🐶
Double quote to prevent globbing and word splitting. SC2086

name="$4"
filter_mode="$5"
level="$6"
$includes_arg >/dev/null 2>&1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[shellcheck (suggestion)] reported by reviewdog 🐶

Suggested change
$includes_arg >/dev/null 2>&1
"$includes_arg" >/dev/null 2>&1

-name="codenarc" \
-filter-mode="${INPUT_FILTER_MODE}" \
-level="${INPUT_LEVEL}" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[shellcheck (suggestion)] reported by reviewdog 🐶

Suggested change
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
"${INPUT_REVIEWDOG_FLAGS}" >/dev/null || true

-name="codenarc" \
-filter-mode="${INPUT_FILTER_MODE}" \
-level="${INPUT_LEVEL}" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[shellcheck (suggestion)] reported by reviewdog 🐶

Suggested change
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
"${INPUT_REVIEWDOG_FLAGS}" >/dev/null || true

-name="codenarc" \
-filter-mode="nofilter" \
-level="warning" \
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[shellcheck (suggestion)] reported by reviewdog 🐶

Suggested change
${INPUT_REVIEWDOG_FLAGS} >/dev/null || true
"${INPUT_REVIEWDOG_FLAGS}" >/dev/null || true

@anaalves-asaas anaalves-asaas marked this pull request as ready for review January 23, 2026 16:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants