import { criarOcorrencia } from '../../../types/index.js';
export const detectorJenkinsBestPractices = {
    nome: 'detector-jenkins-best-practices',
    categoria: 'boas-praticas',
    descricao: 'Detecta violações de boas práticas em Jenkinsfiles',
    test: (relPath) => relPath.toLowerCase().includes('jenkinsfile'),
    aplicar: (src, relPath) => {
        if (!src)
            return [];
        const ocorrencias = [];
        if (!/timeout\s*\(.*\)/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'jenkins-missing-timeout',
                nivel: 'aviso',
                mensagem: 'Timeout não configurado no pipeline ou stage',
                relPath,
                linha: 1,
                sugestao: 'Adicione um bloco "options { timeout(time: 30, unit: \'MINUTES\') }" para evitar jobs zumbis'
            }));
        }
        if (!/cleanWs\s*\(\)/i.test(src) && !/deleteDir\s*\(\)/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'jenkins-missing-cleanup',
                nivel: 'info',
                mensagem: 'Limpeza de workspace (cleanWs) não detectada no post-build',
                relPath,
                linha: 1,
                sugestao: 'Use "cleanWs()" no bloco post { always { ... } } para evitar problemas de disco no agente'
            }));
        }
        const stageCount = (src.match(/stage\s*\(/g) || []).length;
        if (stageCount > 4 && !/parallel\s*\{/i.test(src)) {
            ocorrencias.push(criarOcorrencia({
                tipo: 'jenkins-optimization-parallel',
                nivel: 'info',
                mensagem: `Pipeline longo detectado (${stageCount} stages) sem paralelismo`,
                relPath,
                linha: 1,
                sugestao: 'Considere usar o bloco "parallel" para executar testes ou builds independentes simultaneamente'
            }));
        }
        return ocorrencias;
    }
};
//# sourceMappingURL=detector-jenkins-best-practices.js.map