From 0cb8fbf6c2122a04d92ff24f4442a4c4c9e8fa89 Mon Sep 17 00:00:00 2001 From: Erik VanderWerf Date: Sat, 1 Feb 2025 13:10:54 -0700 Subject: [PATCH] Enabled configuration via Gradle build file, and improved documentation. --- .../gradle/plugin/OpenApiGeneratorPlugin.kt | 1 + .../OpenApiGeneratorGenerateExtension.kt | 17 ++++++++++++++++- .../gradle/plugin/tasks/GenerateTask.kt | 16 ++++++++++++---- 3 files changed, 29 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 f1b1d9e74edf9..bd8f7767bed1b 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 48c5e88259f65..8d7d31d5d1fbb 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 a3a72eb215d98..ce324eb99dcbf 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 @@ -97,6 +97,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 @@ -104,7 +108,10 @@ 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 @@ -112,7 +119,7 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac val inputSpecRootDirectory = project.objects.property(); /** - * Skip merge spec files step + * Skip bundling all spec files into a merged spec file, if true. */ @Input @Optional @@ -623,8 +630,9 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac } inputSpecRootDirectory.ifNotEmpty { inputSpecRootDirectoryValue -> - var runMergeSpec = true - inputSpecRootDirectorySkipMerge.ifNotEmpty { skipMergeValue -> { runMergeSpec = !skipMergeValue } } + val skipMerge = inputSpecRootDirectorySkipMerge.get() + val runMergeSpec = !skipMerge + System.err.println("Checking: $runMergeSpec / $inputSpecRootDirectorySkipMerge / ${inputSpecRootDirectorySkipMerge.get()} / ${inputSpecRootDirectorySkipMerge.get()::class.java}.") if (runMergeSpec) { run { resolvedInputSpec = MergedSpecBuilder(