Add a binary-compatibility check to catch unintended ABI breaks between releases
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 58/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- java
- Área
- build-system
Línea de trabajo
Empieza inspeccionando la configuración de Groovy Gradle para los módulos java-spiffe-core y java-spiffe-provider y cómo se resuelven los artefactos publicados desde Maven Central. Configura el plugin japicmp Gradle para comparar cada módulo con su última versión publicada y, a continuación, verifica que el build marque un cambio incompatible en la API pública, permitiendo al mismo tiempo las rupturas intencionadas documentadas mediante una allowlist explícita y una nota en el changelog.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Some releases change the public binary API without it being flagged as a breaking change, which surfaces for consumers as a runtime NoSuchMethodError/NoClassDefFoundError (from a jar compiled against the previous version) rather than a compile error that would be caught early.
The clearest recent example is 0.8.15: #377 removed Lombok and hand-wrote the builders, which renamed the generated builder class DefaultX509Source.X509SourceOptions.X509SourceOptionsBuilder → Builder. Code compiled against <= 0.8.14 then fails at runtime against >= 0.8.15:
java.lang.NoSuchMethodError: 'io.spiffe.workloadapi.DefaultX509Source$X509SourceOptions$X509SourceOptionsBuilder io.spiffe.workloadapi.DefaultX509Source$X509SourceOptions.builder()'
It was listed under "Dependency updates" in the 0.8.15 notes, so the ABI impact appears to have been unintentional.
Proposal
Add a binary-compatibility gate to the build that diffs each build's public API against the last published release and fails on binary-incompatible changes, applied to the consumer-facing modules (java-spiffe-core, java-spiffe-provider).
For this repo specifically (Groovy Gradle, pure Java, multi-module, published to Maven Central via com.vanniktech.maven.publish), the japicmp Gradle plugin looks like the best fit: it applies per subproject and can resolve the previous release from Maven Central as the baseline automatically, so there's no per-release config to maintain. revapi is a more powerful alternative if richer rules are ever needed, though it is likely heavier than this project requires.
This wouldn't block intentional breaking changes; it would make them explicit (an allowlist entry plus a changelog note) instead of silent, so consumers can plan for them.
We're happy to open a PR to wire this up.
- Lenguaje dominante
- Java
- Estrellas
- 46
- Forks
- 28
- Merge medio
- 11 d 6 h
- PR fusionados (30 d)
- 6
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de spiffe/java-spiffe
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
spiffe/java-spiffe#108 · 1 reacción ·
-
Manage Dependencies of Netty and gRPC with their respective BOMsQuizá libre de nuevo @maxlambrecht la tomó hace 1367 días y no hay ningún pull request abierto. Abierto
spiffe/java-spiffe#106 · 2 reacciones · 1 asignado ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
spiffe/java-spiffe#80 · 6 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
spiffe/java-spiffe#79 · 2 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
spiffe/java-spiffe#76 · 7 comentarios ·
Todos los issues de spiffe/java-spiffe
Issues similares
-
[BUG] S3 CORS responses omit Access-Control-Allow-Credentials for matched originsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
floci-io/floci#5369 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
sqlcipher/sqlcipher-android#97 · 1 comentario ·
-
area-integrations
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
bug IIIF interoperability
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100