Communitygithub.com

verificacao-quarkus

Loop de verificação para projetos Quarkus: build, análise estática, testes com cobertura, varreduras de segurança, compilação nativa e revisão de diff antes de release ou PR.

O que é verificacao-quarkus?

A skill de Verificação Quarkus fornece um pipeline completo e automatizado para garantir a qualidade e segurança de projetos baseados em Quarkus antes de PRs, grandes mudanças ou deploys. O loop abrange desde o build inicial até a compilação nativa com GraalVM, passando por análise estática (Checkstyle, PMD, SpotBugs, SonarQube), execução de testes unitários, de integração e de API com cobertura mínima de 80%, varredura de vulnerabilidades de dependências (OWASP Dependency-Check), auditoria de segurança do Quarkus, testes de segurança de API com OWASP ZAP e verificação de health checks. Também inclui testes de desempenho com K6, construção de imagem de contêiner e validação de configuração específica de ambiente. O resultado é um checklist de verificação abrangente e scripts prontos para integração em pipelines CI/CD, como GitHub Actions. Essa skill é projetada para desenvolvedores e equipes que precisam de uma abordagem estruturada e rigorosa para garantir que suas aplicações Quarkus estejam prontas para produção, com foco em qualidade de código, segurança, desempenho e compatibilidade nativa.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/quarkus-verification

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Loop de Verificação Quarkus

Execute antes de PRs, após grandes alterações e antes de implantar.

Quando Ativar

  • Antes de abrir um pull request para um serviço Quarkus
  • Após grandes refatorações ou upgrades de dependências
  • Verificação pré-implantação para staging ou produção
  • Executar pipeline completa de build → lint → teste → varredura de segurança → compilação nativa
  • Validar se a cobertura de testes atende aos limites (80%+)
  • Testar compatibilidade de imagem nativa

Fase 1: Build

# Maven
mvn clean verify -DskipTests

# Gradle
./gradlew clean assemble -x test

Se o build falhar, pare e corrija os erros de compilação.

Fase 2: Análise Estática

Checkstyle, PMD, SpotBugs (Maven)

mvn checkstyle:check pmd:check spotbugs:check

SonarQube (se configurado)

mvn sonar:sonar \
  -Dsonar.projectKey=meu-projeto-quarkus \
  -Dsonar.host.url=http://localhost:9000 \
  -Dsonar.login=${SONAR_TOKEN}

Problemas Comuns a Resolver

  • Imports ou variáveis não utilizadas
  • Métodos complexos (alta complexidade ciclomática)
  • Possíveis desreferências de ponteiro nulo
  • Problemas de segurança sinalizados pelo SpotBugs

Fase 3: Testes + Cobertura

# Executar todos os testes
mvn clean test

# Gerar relatório de cobertura
mvn jacoco:report

# Aplicar limite de cobertura (80%)
mvn jacoco:check

# Ou com Gradle
./gradlew test jacocoTestReport jacocoTestCoverageVerification

Categorias de Teste

Testes Unitários

Testar a lógica do serviço com dependências simuladas:

@ExtendWith(MockitoExtension.class)
class UserServiceTest {
  @Mock UserRepository userRepository;
  @InjectMocks UserService userService;

  @Test
  void createUser_inputValido_retornaUsuario() {
    var dto = new CreateUserDto("Alice", "[email protected]");

    // Panache persist() retorna void — use doNothing + verify
    doNothing().when(userRepository).persist(any(User.class));

    User result = userService.create(dto);

    assertThat(result.name).isEqualTo("Alice");
    verify(userRepository).persist(any(User.class));
  }
}

Testes de Integração

Testar com banco de dados real (Testcontainers):

@QuarkusTest
@QuarkusTestResource(PostgresTestResource.class)
class UserRepositoryIntegrationTest {

  @Inject
  UserRepository userRepository;

  @Test
  @Transactional
  void findByEmail_usuarioExistente_retornaUsuario() {
    User user = new User();
    user.name = "Alice";
    user.email = "[email protected]";
    userRepository.persist(user);

    Optional<User> found = userRepository.findByEmail("[email protected]");

    assertThat(found).isPresent();
    assertThat(found.get().name).isEqualTo("Alice");
  }
}

Testes de API

Testar endpoints REST com REST Assured:

@QuarkusTest
class UserResourceTest {

  @Test
  void createUser_inputValido_retorna201() {
    given()
        .contentType(ContentType.JSON)
        .body("""
            {"name": "Alice", "email": "[email protected]"}
            """)
        .when().post("/api/users")
        .then()
        .statusCode(201)
        .body("name", equalTo("Alice"));
  }

  @Test
  void createUser_emailInvalido_retorna400() {
    given()
        .contentType(ContentType.JSON)
        .body("""
            {"name": "Alice", "email": "invalido"}
            """)
        .when().post("/api/users")
        .then()
        .statusCode(400);
  }
}

Relatório de Cobertura

Verifique target/site/jacoco/index.html para cobertura detalhada:

  • Cobertura geral de linhas (alvo: 80%+)
  • Cobertura de branches (alvo: 70%+)
  • Identificar caminhos críticos não cobertos

Fase 4: Varredura de Segurança

Vulnerabilidades de Dependências (Maven)

mvn org.owasp:dependency-check-maven:check

Revise target/dependency-check-report.html para CVEs.

Auditoria de Segurança do Quarkus

# Verificar extensões vulneráveis
mvn quarkus:audit

# Listar todas as extensões
mvn quarkus:list-extensions

OWASP ZAP (Teste de Segurança de API)

docker run -t ghcr.io/zaproxy/zaproxy:stable zap-api-scan.py \
  -t http://localhost:8080/q/openapi \
  -f openapi

Verificações Comuns de Segurança

  • Todos os segredos em variáveis de ambiente (não no código)
  • Validação de entrada em todos os endpoints
  • Autenticação/autorização configurada
  • CORS configurado corretamente
  • Headers de segurança configurados
  • Senhas com hash BCrypt
  • Proteção contra SQL injection (consultas parametrizadas)
  • Limitação de taxa em endpoints públicos

Fase 5: Compilação Nativa

Testar compatibilidade de imagem nativa GraalVM:

# Compilar executável nativo
mvn package -Dnative

# Ou com contêiner
mvn package -Dnative -Dquarkus.native.container-build=true

# Testar executável nativo
./target/*-runner

# Executar testes smoke básicos
curl http://localhost:8080/q/health/live
curl http://localhost:8080/q/health/ready

Solução de Problemas de Imagem Nativa

Problemas comuns:

  • Reflexão: Adicione configuração de reflexão para classes dinâmicas
  • Recursos: Inclua recursos com quarkus.native.resources.includes
  • JNI: Registre classes JNI se estiver usando bibliotecas nativas

Exemplo de configuração de reflexão:

@RegisterForReflection(targets = {MyDynamicClass.class})
public class ReflectionConfiguration {}

Fase 6: Teste de Performance

Teste de Carga com K6

// load-test.js
import http from 'k6/http';
import { check } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 50 },
    { duration: '1m', target: 100 },
    { duration: '30s', target: 0 },
  ],
};

export default function () {
  const res = http.get('http://localhost:8080/api/markets');
  check(res, {
    'status é 200': (r) => r.status === 200,
    'tempo de resposta < 200ms': (r) => r.timings.duration < 200,
  });
}

Execute:

k6 run load-test.js

Métricas a Monitorar

  • Tempo de resposta (p50, p95, p99)
  • Taxa de transferência (requests/sec)
  • Taxa de erro
  • Uso de memória
  • Uso de CPU

Fase 7: Health Checks

# Liveness
curl http://localhost:8080/q/health/live

# Readiness
curl http://localhost:8080/q/health/ready

# Todos os health checks
curl http://localhost:8080/q/health

# Métricas (se habilitado)
curl http://localhost:8080/q/metrics

Respostas esperadas:

{
  "status": "UP",
  "checks": [
    {
      "name": "Conexão com banco de dados",
      "status": "UP"
    }
  ]
}

Fase 8: Build da Imagem do Contêiner

# Build da imagem do contêiner
mvn package -Dquarkus.container-image.build=true

# Ou com registro específico
mvn package \
  -Dquarkus.container-image.build=true \
  -Dquarkus.container-image.registry=docker.io \
  -Dquarkus.container-image.group=myorg \
  -Dquarkus.container-image.tag=1.0.0

# Testar contêiner
docker run -p 8080:8080 myorg/my-quarkus-app:1.0.0

Varredura de Segurança do Contêiner

# Trivy
trivy image myorg/my-quarkus-app:1.0.0

# Grype
grype myorg/my-quarkus-app:1.0.0

Fase 9: Validação de Configuração

# Verificar todas as propriedades de configuração
mvn quarkus:info

# Listar todas as fontes de configuração
curl http://localhost:8080/q/dev/io.quarkus.quarkus-vertx-http/config

Verificações Específicas de Ambiente

  • URLs de banco de dados configuradas por ambiente
  • Segredos externalizados (Vault, variáveis de ambiente)
  • Níveis de log apropriados
  • Origens CORS configuradas corretamente
  • Limitação de taxa configurada
  • Monitoramento/rastreamento habilitado

Fase 10: Revisão de Documentação

  • Documentação OpenAPI/Swagger atualizada (/q/swagger-ui)
  • README com instruções de configuração
  • Mudanças na API documentadas
  • Guia de migração para mudanças que quebram compatibilidade
  • Propriedades de configuração documentadas

Gere a especificação OpenAPI:

curl http://localhost:8080/q/openapi -o openapi.json

Checklist de Verificação

Qualidade do Código

  • Build passa sem warnings
  • Análise estática limpa (sem problemas altos/médios)
  • Código segue as convenções da equipe
  • Nenhum código comentado ou TODOs no PR

Testes

  • Todos os testes passam
  • Cobertura de código ≥ 80%
  • Testes de integração com banco de dados real
  • Testes de segurança passam
  • Performance dentro dos limites aceitáveis

Segurança

  • Nenhuma vulnerabilidade de dependência
  • Autenticação/autorização testada
  • Validação de entrada completa
  • Segredos não presentes no código fonte
  • Headers de segurança configurados

Implantação

  • Compilação nativa bem-sucedida
  • Imagem do contêiner é construída
  • Health checks respondem corretamente
  • Configuração válida para o ambiente alvo

Imagem Nativa

  • Executável nativo é construído
  • Testes nativos passam
  • Tempo de inicialização < 100ms
  • Consumo de memória aceitável

Script de Verificação Automatizada

#!/bin/bash
set -e

echo "=== Fase 1: Build ==="
mvn clean verify -DskipTests

echo "=== Fase 2: Análise Estática ==="
mvn checkstyle:check pmd:check spotbugs:check

echo "=== Fase 3: Testes + Cobertura ==="
mvn test jacoco:report jacoco:check

echo "=== Fase 4: Varredura de Segurança ==="
mvn org.owasp:dependency-check-maven:check

echo "=== Fase 5: Compilação Nativa ==="
mvn package -Dnative -Dquarkus.native.container-build=true

echo "=== Todas as Fases Concluídas ==="
echo "Revise os relatórios:"
echo "  - Cobertura: target/site/jacoco/index.html"
echo "  - Segurança: target/dependency-check-report.html"
echo "  - Nativo: target/*-runner"

Integração CI/CD

Exemplo de GitHub Actions

name: Verificação

on: [push, pull_request]

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7

      - name: Configurar JDK 21
        uses: actions/setup-java@v5
        with:
          java-version: '21'
          distribution: 'temurin'

      - name: Cache de pacotes Maven
        uses: actions/cache@v6
        with:
          path: ~/.m2
          key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}

      - name: Build
        run: mvn clean verify -DskipTests

      - name: Testes com Cobertura
        run: mvn test jacoco:report jacoco:check

      - name: Varredura de Segurança
        run: mvn org.owasp:dependency-check-maven:check

      - name: Upload de Cobertura
        uses: codecov/codecov-action@v7
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: target/site/jacoco/jacoco.xml

Melhores Práticas

  • Execute o loop de verificação antes de cada PR
  • Automatize no pipeline CI/CD
  • Corrija problemas imediatamente; não acumule dívida técnica
  • Mantenha a cobertura acima de 80%
  • Atualize dependências regularmente
  • Teste a compilação nativa periodicamente
  • Monitore as tendências de desempenho
  • Documente mudanças que quebram compatibilidade
  • Revise os resultados da varredura de segurança
  • Valide a configuração para cada ambiente

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Habilidades Relacionadas