springboot-verification
Ajuda seu agente a verificar completamente um projeto Spring Boot. Ele executa testes, análises de segurança e de código, gerando um relatório final.
O que ela faz
Esta ferramenta verifica automaticamente se o seu código Spring Boot está pronto para ser enviado. Ela compila o código, analisa a qualidade, executa testes e verifica a segurança.
Quando usar
- ✓Antes de enviar uma alteração (pull request).
- ✓Após atualizar bibliotecas importantes.
- ✓Antes de colocar o código em produção.
Exemplo do que pedir para a IA
“Verifique meu código Spring Boot antes de enviar.”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela executa várias etapas: compilação, análise de código estático (qualidade), testes (unitários e de integração) e verificações de segurança. No final, ela gera um relatório indicando se tudo está 'Pronto' ou se há 'Problemas'.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill springboot-verificationOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/springboot-verification/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Loop de Verificação do Spring Boot
Execute antes de Pull Requests (PRs), após grandes mudanças e antes da implantação.
Quando Ativar
- Antes de abrir um pull request para um serviço Spring Boot
- Após refatorações importantes ou atualizações de dependências
- Verificação pré-implantação para staging ou produção
- Execução do pipeline completo: build → lint → test → security scan
- Validação se a cobertura de testes atende aos limites
Fase 1: Build
mvn -T 4 clean verify -DskipTests
# or
./gradlew clean assemble -x test
Se o build falhar, pare e corrija.
Fase 2: Análise Estática
Maven (plugins comuns):
mvn -T 4 spotbugs:check pmd:check checkstyle:check
Gradle (se configurado):
./gradlew checkstyleMain pmdMain spotbugsMain
Fase 3: Testes + Cobertura
mvn -T 4 test
mvn jacoco:report # verify 80%+ coverage
# or
./gradlew test jacocoTestReport
Relatório:
- Total de testes, aprovados/reprovados
- % de cobertura (linhas/ramos)
Testes de Unidade
Teste a lógica do serviço isoladamente com dependências mockadas:
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock private UserRepository userRepository;
@InjectMocks private UserService userService;
@Test
void createUser_validInput_returnsUser() {
var dto = new CreateUserDto("Alice", "alice@example.com");
var expected = new User(1L, "Alice", "alice@example.com");
when(userRepository.save(any(User.class))).thenReturn(expected);
var result = userService.create(dto);
assertThat(result.name()).isEqualTo("Alice");
verify(userRepository).save(any(User.class));
}
@Test
void createUser_duplicateEmail_throwsException() {
var dto = new CreateUserDto("Alice", "existing@example.com");
when(userRepository.existsByEmail(dto.email())).thenReturn(true);
assertThatThrownBy(() -> userService.create(dto))
.isInstanceOf(DuplicateEmailException.class);
}
}
Testes de Integração com Testcontainers
Teste contra um banco de dados real em vez de H2:
@SpringBootTest
@Testcontainers
class UserRepositoryIntegrationTest {
@Container
static PostgreSQLContainer<?> postgres = new PostgreSQLContainer<>("postgres:16-alpine")
.withDatabaseName("testdb");
@DynamicPropertySource
static void configureProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.url", postgres::getJdbcUrl);
registry.add("spring.datasource.username", postgres::getUsername);
registry.add("spring.datasource.password", postgres::getPassword);
}
@Autowired private UserRepository userRepository;
@Test
void findByEmail_existingUser_returnsUser() {
userRepository.save(new User("Alice", "alice@example.com"));
var found = userRepository.findByEmail("alice@example.com");
assertThat(found).isPresent();
assertThat(found.get().getName()).isEqualTo("Alice");
}
}
Testes de API com MockMvc
Teste a camada de controller com o contexto Spring completo:
@WebMvcTest(UserController.class)
class UserControllerTest {
@Autowired private MockMvc mockMvc;
@MockBean private UserService userService;
@Test
void createUser_validInput_returns201() throws Exception {
var user = new UserDto(1L, "Alice", "alice@example.com");
when(userService.create(any())).thenReturn(user);
mockMvc.perform(post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content("""
{"name": "Alice", "email": "alice@example.com"}
"""))
.andExpect(status().isCreated())
.andExpect(jsonPath("$.name").value("Alice"));
}
@Test
void createUser_invalidEmail_returns400() throws Exception {
mockMvc.perform(post("/api/users")
.contentType(MediaType.APPLICATION_JSON)
.content("""
{"name": "Alice", "email": "not-an-email"}
"""))
.andExpect(status().isBadRequest());
}
}
Fase 4: Verificação de Segurança
# Dependency CVEs
mvn org.owasp:dependency-check-maven:check
# or
./gradlew dependencyCheckAnalyze
# Secrets in source
grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
# Secrets (git history)
git secrets --scan # if configured
Achados Comuns de Segurança
# Verifique por System.out.println (use logger em vez disso)
grep -rn "System\.out\.print" src/main/ --include="*.java"
# Verifique por mensagens de exceção cruas em respostas
…
Perguntas frequentes
O que são testes de unidade e integração?
Testes de unidade verificam pequenas partes do código isoladamente. Testes de integração verificam como diferentes partes do código funcionam juntas, usando ferramentas como bancos de dados reais.
O que são análises estáticas?
São verificações automáticas que procuram por erros comuns de programação, má prática ou código que não segue o padrão definido, sem precisar executar o programa.
O que o relatório final mostra?
Ele resume o resultado de cada etapa (compilação, análise, testes, segurança) e indica se o código está pronto para ser enviado ou se precisa de correções.
Detalhes
Descrição original do autor
Run the full Spring Boot verification loop — Maven or Gradle build, SpotBugs, PMD, and Checkstyle static analysis, unit and Testcontainers integration tests with JaCoCo coverage, OWASP dependency and secret scans, and diff review — producing a pass/fail readiness report. Use when preparing a Spring Boot pull request, validating coverage thresholds, or running pre-deploy verification.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #123
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
webapp-testing
Permite testar aplicações web locais, verificar funcionalidades e depurar o comportamento da interface. Captura screenshots e logs do navegador.
anthropics/skills
ponytail-audit
Faz uma auditoria completa do código. Ele encontra bugs, falhas de segurança, código lento e sugere o que remover ou melhorar.
DietrichGebert/ponytail
ponytail-review
Revisa a qualidade de uma mudança no código. Verifica se a lógica está correta, se é segura, rápida e se todas as linhas são necessárias.
DietrichGebert/ponytail