diff --git a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/application/OpenApiContractApplicationService.java b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/application/OpenApiContractApplicationService.java
index ababf0dc218..9b517557c55 100644
--- a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/application/OpenApiContractApplicationService.java
+++ b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/application/OpenApiContractApplicationService.java
@@ -17,4 +17,8 @@ public OpenApiContractApplicationService() {
public JHipsterModule buildModule(JHipsterModuleProperties properties) {
return factory.buildModule(properties);
}
+
+ public JHipsterModule buildBackwardsCompatibilityCheckModule(JHipsterModuleProperties properties) {
+ return factory.buildBackwardsCompatibilityCheckModule(properties);
+ }
}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactory.java b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactory.java
index 3fb5dff6ded..d15b68ca0c6 100644
--- a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactory.java
+++ b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactory.java
@@ -56,4 +56,29 @@ private MavenPlugin openApiPluginManagement(JHipsterModuleProperties properties)
)
.build();
}
+
+ public JHipsterModule buildBackwardsCompatibilityCheckModule(JHipsterModuleProperties properties) {
+ Assert.notNull("properties", properties);
+
+ //@formatter:off
+ return moduleBuilder(properties)
+ .mavenPlugins()
+ .pluginManagement(openApiBackwardsCompatPluginManagement())
+ .plugin(openApiBackwardsCompatPlugin().build())
+ .and()
+ .build();
+ //@formatter:on
+ }
+
+ private MavenPlugin openApiBackwardsCompatPluginManagement() {
+ return openApiBackwardsCompatPlugin()
+ .versionSlug("openapi-backwards-compat-maven-plugin")
+ .configuration("${project.build.directory}")
+ .addExecution(pluginExecution().goals("backwards-compatibility-check"))
+ .build();
+ }
+
+ private MavenPluginOptionalBuilder openApiBackwardsCompatPlugin() {
+ return mavenPlugin().groupId("io.kemtoa.openapi").artifactId("openapi-backwards-compat-maven-plugin");
+ }
}
diff --git a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/infrastructure/primary/OpenApiContractModuleConfiguration.java b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/infrastructure/primary/OpenApiContractModuleConfiguration.java
index 2821b740747..31cfd9959a7 100644
--- a/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/infrastructure/primary/OpenApiContractModuleConfiguration.java
+++ b/src/main/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/infrastructure/primary/OpenApiContractModuleConfiguration.java
@@ -21,4 +21,15 @@ JHipsterModuleResource openApiContractModule(OpenApiContractApplicationService o
.tags("server", "spring", "spring-boot", "documentation", "swagger", "openapi")
.factory(openApiContract::buildModule);
}
+
+ @Bean
+ JHipsterModuleResource openApiBackwardsCompatibilityCheckModule(OpenApiContractApplicationService openApiContract) {
+ return JHipsterModuleResource.builder()
+ .slug(OPENAPI_BACKWARDS_COMPATIBILITY_CHECK)
+ .propertiesDefinition(JHipsterModulePropertiesDefinition.EMPTY)
+ .apiDoc("Spring Boot - OpenAPI", "Check backwards incompatible changes to OpenAPI contract during build")
+ .organization(JHipsterModuleOrganization.builder().addDependency(OPENAPI_CONTRACT).build())
+ .tags("server", "spring", "spring-boot", "documentation", "swagger", "openapi")
+ .factory(openApiContract::buildBackwardsCompatibilityCheckModule);
+ }
}
diff --git a/src/main/java/tech/jhipster/lite/generator/slug/domain/JHLiteModuleSlug.java b/src/main/java/tech/jhipster/lite/generator/slug/domain/JHLiteModuleSlug.java
index b3f80462ed4..18ffdffc0c8 100644
--- a/src/main/java/tech/jhipster/lite/generator/slug/domain/JHLiteModuleSlug.java
+++ b/src/main/java/tech/jhipster/lite/generator/slug/domain/JHLiteModuleSlug.java
@@ -81,6 +81,7 @@ public enum JHLiteModuleSlug implements JHipsterModuleSlugFactory {
NEO4J("neo4j"),
NEO4J_MIGRATIONS("neo4j-migrations"),
OPENAPI_CONTRACT("openapi-contract"),
+ OPENAPI_BACKWARDS_COMPATIBILITY_CHECK("openapi-backwards-compatibility-check"),
OPTIONAL_TYPESCRIPT("optional-typescript"),
PAGINATION_DOMAIN("pagination-domain"),
PLAYWRIGHT_COMPONENT_TESTS("playwright-component-tests"),
diff --git a/src/main/resources/generator/dependencies/pom.xml b/src/main/resources/generator/dependencies/pom.xml
index 52f49b42571..3dfb14268fe 100644
--- a/src/main/resources/generator/dependencies/pom.xml
+++ b/src/main/resources/generator/dependencies/pom.xml
@@ -70,6 +70,7 @@
3.5.0
3.0.0
0.0.20
+ 1.0.1
@@ -400,6 +401,11 @@
openapi-maven-plugin
${openapi-maven-plugin.version}
+
+ io.kemtoa.openapi
+ openapi-backwards-compat-maven-plugin
+ ${openapi-backwards-compat-maven-plugin.version}
+
diff --git a/src/test/features/server/springboot/openapi-contract.feature b/src/test/features/server/springboot/openapi-contract.feature
index 78a69513468..7982a33dd62 100644
--- a/src/test/features/server/springboot/openapi-contract.feature
+++ b/src/test/features/server/springboot/openapi-contract.feature
@@ -4,3 +4,8 @@ Feature: OpenAPI contract generation
When I apply "openapi-contract" module to default project with maven file
| packageName | tech.jhipster.chips |
Then I should have "openapi-maven-plugin" in "pom.xml"
+
+ Scenario: Should apply OpenAPI backwards compatibility check module
+ When I apply "openapi-backwards-compatibility-check" module to default project with maven file
+ | packageName | tech.jhipster.chips |
+ Then I should have "openapi-backwards-compat-maven-plugin" in "pom.xml"
diff --git a/src/test/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactoryTest.java b/src/test/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactoryTest.java
index a6ab0b5e3d7..e98114a96d8 100644
--- a/src/test/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactoryTest.java
+++ b/src/test/java/tech/jhipster/lite/generator/server/springboot/apidocumentation/openapicontract/domain/OpenApiContractModuleFactoryTest.java
@@ -16,7 +16,7 @@ class OpenApiContractModuleFactoryTest {
private static final OpenApiContractModuleFactory factory = new OpenApiContractModuleFactory();
@Test
- void shouldBuildModuleOnProjectWithoutDefaultGoal() {
+ void shouldBuildOpenApiContractModule() {
JHipsterModuleProperties properties = propertiesBuilder(tmpDirForTest()).basePackage("tech.jhipster.jhlitest").build();
JHipsterModule module = factory.buildModule(properties);
@@ -72,4 +72,43 @@ void shouldBuildModuleOnProjectWithoutDefaultGoal() {
"""
);
}
+
+ @Test
+ void shouldBuildOpenApiBackwardsCompatibilityCheckModule() {
+ JHipsterModuleProperties properties = propertiesBuilder(tmpDirForTest()).build();
+
+ JHipsterModule module = factory.buildBackwardsCompatibilityCheckModule(properties);
+
+ assertThatModuleWithFiles(module, pomFile())
+ .hasFile("pom.xml")
+ .containing(
+ // language=xml
+ """
+
+ io.kemtoa.openapi
+ openapi-backwards-compat-maven-plugin
+ \
+ """
+ )
+ .containing(
+ // language=xml
+ """
+
+ io.kemtoa.openapi
+ openapi-backwards-compat-maven-plugin
+ ${openapi-backwards-compat-maven-plugin.version}
+
+
+
+ backwards-compatibility-check
+
+
+
+
+ ${project.build.directory}
+
+ \
+ """
+ );
+ }
}
diff --git a/tests-ci/generate.sh b/tests-ci/generate.sh
index 451948e2e7e..c6cc189b5b9 100755
--- a/tests-ci/generate.sh
+++ b/tests-ci/generate.sh
@@ -138,6 +138,7 @@ elif [[ $application == 'fullapp' ]]; then
"spring-boot-async" \
"spring-boot-devtools" \
"openapi-contract" \
+ "openapi-backwards-compatibility-check" \
"logstash" \
"jib" \
"dockerfile-${java_build_tool}" \