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}" \