
Spring Boot Verification
FreeAutomate your Spring Boot project checks before deployment.
Free · Opens the source repo
What Spring Boot Verification does
The Spring Boot Verification skill provides a comprehensive verification loop designed specifically for Spring Boot projects. It ensures that your code is thoroughly checked before merging pull requests, after significant changes, and prior to deployment. This skill automates multiple stages of the verification process, including building the project, performing static analysis, running tests with coverage checks, conducting security scans, and reviewing code diffs. By integrating these checks into your workflow, you can maintain high code quality and security standards throughout your development process.
The verification loop is structured into several phases. It begins with the build phase, where either Maven or Gradle commands are executed to compile the project. If the build fails, the process stops, prompting developers to address the issues immediately. Next, static analysis is performed using tools like Spotbugs, PMD, and Checkstyle to catch potential code quality issues early. This is followed by running unit tests and generating coverage reports to ensure that the code meets predefined coverage thresholds.
In addition to testing, the skill includes a security scanning phase that checks for known vulnerabilities in dependencies and searches for hardcoded secrets in the codebase. Finally, the verification loop concludes with a diff review to ensure that no unwanted changes have been introduced. The output report summarizes the results of each phase, allowing developers to quickly assess the readiness of their code for production.
This skill is particularly useful for teams working on Spring Boot applications who want to enforce a rigorous verification process before code changes are integrated into the main branch or deployed to production. By automating these checks, developers can focus on writing code while ensuring that quality and security are not compromised.
When to use it
Use this skill before opening pull requests, after major refactoring, and prior to deploying applications to staging or production environments.
When not to use it
This skill may not be suitable for projects that do not use Spring Boot or for teams that prefer a more manual verification process.
What you can build with it
Pre-Pull Request Checks
Run the verification loop before opening a pull request to ensure code quality and security.
Post-Refactoring Validation
Use the skill after significant code changes to validate that everything still works as expected.
Deployment Readiness
Execute the verification loop before deploying to staging or production to catch any issues early.
How to install Spring Boot Verification
View source1. Install with the skills CLI
npx skills add affaan-m/ecc/springboot-verification --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by affaan-mBucle de Verificación Spring Boot
Ejecutar antes de PRs, después de cambios importantes y antes del despliegue.
Cuándo Activar
- Antes de abrir un pull request para un servicio Spring Boot
- Después de refactorizaciones importantes o actualizaciones de dependencias
- Verificación previa al despliegue para staging o producción
- Ejecutar el pipeline completo de build → lint → test → escaneo de seguridad
- Validar que la cobertura de pruebas cumpla los umbrales
Fase 1: Build
mvn -T 4 clean verify -DskipTests
# o
./gradlew clean assemble -x test
Si el build falla, detener y corregir.
Fase 2: Análisis Estático
Maven (plugins comunes):
mvn -T 4 spotbugs:check pmd:check checkstyle:check
Gradle (si está configurado):
./gradlew checkstyleMain pmdMain spotbugsMain
Fase 3: Pruebas + Cobertura
mvn -T 4 test
mvn jacoco:report # verificar cobertura 80%+
# o
./gradlew test jacocoTestReport
Reporte:
- Total de pruebas, pasadas/fallidas
- % de cobertura (líneas/ramas)
Pruebas Unitarias
Probar la lógica del servicio en aislamiento con dependencias mockeadas:
@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);
}
}
Pruebas de Integración con Testcontainers
Probar contra una base de datos real en lugar 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");
}
}
Pruebas de API con MockMvc
Probar la capa controller con el contexto completo de Spring:
@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: Escaneo de Seguridad
# CVEs de dependencias
mvn org.owasp:dependency-check-maven:check
# o
./gradlew dependencyCheckAnalyze
# Secretos en código fuente
grep -rn "password\s*=\s*\"" src/ --include="*.java" --include="*.yml" --include="*.properties"
grep -rn "sk-\|api_key\|secret" src/ --include="*.java" --include="*.yml"
# Secretos (historial de git)
git secrets --scan # si está configurado
Hallazgos Comunes de Seguridad
# Verificar System.out.println (usar logger en su lugar)
grep -rn "System\.out\.print" src/main/ --include="*.java"
# Verificar mensajes de excepción en bruto en respuestas
grep -rn "e\.getMessage()" src/main/ --include="*.java"
# Verificar CORS comodín
grep -rn "allowedOrigins.*\*" src/main/ --include="*.java"
Fase 5: Lint/Formato (compuerta opcional)
mvn spotless:apply # si se usa el plugin Spotless
./gradlew spotlessApply
Fase 6: Revisión de Diff
git diff --stat
git diff
Lista de verificación:
- Sin logs de depuración residuales (
System.out,log.debugsin guardias) - Errores y códigos HTTP con significado
- Transacciones y validación presentes donde se necesitan
- Cambios de configuración documentados
Plantilla de Salida
REPORTE DE VERIFICACIÓN
=======================
Build: [PASS/FAIL]
Estático: [PASS/FAIL] (spotbugs/pmd/checkstyle)
Pruebas: [PASS/FAIL] (X/Y pasadas, Z% cobertura)
Seguridad: [PASS/FAIL] (hallazgos CVE: N)
Diff: [X archivos modificados]
General: [LISTO / NO LISTO]
Problemas a Corregir:
1. ...
2. ...
Modo Continuo
- Volver a ejecutar las fases ante cambios significativos o cada 30–60 minutos en sesiones largas
- Mantener un bucle corto:
mvn -T 4 test+ spotbugs para retroalimentación rápida
Recuerda: La retroalimentación rápida supera las sorpresas tardías. Mantener la compuerta estricta — tratar las advertencias como defectos en sistemas de producción.
Frequently asked questions about Spring Boot Verification
Similar skills
Turborepo
Optimized build system for JavaScript/TypeScript monorepos.
Azure Pipelines Validation
Streamline your Azure DevOps pipeline changes locally.
Azure Developer CLI
Streamline your Azure project workflows with best practices.
Azure Container Registry CLI
Manage Azure Container Registry resources with ease.
Aspire
Build and orchestrate polyglot distributed applications seamlessly.
Vercel CLI
Manage and deploy Vercel projects from the command line.
