From 0fc8f2fdd45912cace4bf1e252fc3ca37e1d88c5 Mon Sep 17 00:00:00 2001 From: Erik VanderWerf Date: Tue, 20 Aug 2024 00:37:44 -0700 Subject: [PATCH] Add option to skip merging spec files Introduced a new property `inputSpecRootDirectorySkipMerge` to conditionally skip the merging step of the specification files. Updated the logic to honor this new property, ensuring merging only occurs if it is explicitly not skipped. Enabled configuration via Gradle build file. --- .../gradle/plugin/OpenApiGeneratorPlugin.kt | 1 + .../OpenApiGeneratorGenerateExtension.kt | 17 ++++++++++- .../gradle/plugin/tasks/GenerateTask.kt | 29 ++++++++++++++++--- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt index f1b1d9e74edf..bd8f7767bed1 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt @@ -98,6 +98,7 @@ class OpenApiGeneratorPlugin : Plugin { outputDir.set(generate.outputDir) inputSpec.set(generate.inputSpec) inputSpecRootDirectory.set(generate.inputSpecRootDirectory) + inputSpecRootDirectorySkipMerge.set(generate.inputSpecRootDirectorySkipMerge) remoteInputSpec.set(generate.remoteInputSpec) templateDir.set(generate.templateDir) templateResourcePath.set(generate.templateResourcePath) diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt index 48c5e88259f6..8d7d31d5d1fb 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt @@ -51,14 +51,28 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { /** * The Open API 2.0/3.x specification location. + * + * Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of + * changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to + * an entire directory of spec files. */ val inputSpec = project.objects.property() /** - * Local root folder with spec files + * Local root folder with spec files. + * + * By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the + * `inputSpecRootDirectorySkipMerge` property. */ val inputSpecRootDirectory = project.objects.property() + /** + * Skip bundling all spec files into a merged spec file, if true. + * + * Default false. + */ + val inputSpecRootDirectorySkipMerge = project.objects.property() + /** * The remote Open API 2.0/3.x specification URL location. */ @@ -400,6 +414,7 @@ open class OpenApiGeneratorGenerateExtension(project: Project) { @Suppress("MemberVisibilityCanBePrivate") fun applyDefaults() { releaseNote.set("Minor update") + inputSpecRootDirectorySkipMerge.set(false) modelNamePrefix.set("") modelNameSuffix.set("") apiNameSuffix.set("") diff --git a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt index a96e31d8f96e..8da6bc79b0b7 100644 --- a/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt +++ b/modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt @@ -106,6 +106,10 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac /** * The Open API 2.0/3.x specification location. + * + * Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of + * changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to + * an entire directory of spec files. */ @Optional @get:InputFile @@ -113,13 +117,23 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac val inputSpec = project.objects.property() /** - * Local root folder with spec files + * Local root folder with spec files. + * + * By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the + * `inputSpecRootDirectorySkipMerge` property. */ @Optional @get:InputDirectory @PathSensitive(PathSensitivity.RELATIVE) val inputSpecRootDirectory = project.objects.property(); + /** + * Skip bundling all spec files into a merged spec file, if true. + */ + @Input + @Optional + val inputSpecRootDirectorySkipMerge = project.objects.property() + /** * Name of the file that will contain all merged specs */ @@ -625,9 +639,16 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac } inputSpecRootDirectory.ifNotEmpty { inputSpecRootDirectoryValue -> - run { - resolvedInputSpec = MergedSpecBuilder(inputSpecRootDirectoryValue, mergedFileName.getOrElse("merged")).buildMergedSpec() - logger.info("Merge input spec would be used - {}", resolvedInputSpec) + val skipMerge = inputSpecRootDirectorySkipMerge.get() + val runMergeSpec = !skipMerge + if (runMergeSpec) { + run { + resolvedInputSpec = MergedSpecBuilder( + inputSpecRootDirectoryValue, + mergedFileName.getOrElse("merged") + ).buildMergedSpec() + logger.info("Merge input spec would be used - {}", resolvedInputSpec) + } } }