Skip to content

Commit 0fc8f2f

Browse files
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.
1 parent 187af2e commit 0fc8f2f

File tree

3 files changed

+42
-5
lines changed

3 files changed

+42
-5
lines changed

modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/OpenApiGeneratorPlugin.kt

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ class OpenApiGeneratorPlugin : Plugin<Project> {
9898
outputDir.set(generate.outputDir)
9999
inputSpec.set(generate.inputSpec)
100100
inputSpecRootDirectory.set(generate.inputSpecRootDirectory)
101+
inputSpecRootDirectorySkipMerge.set(generate.inputSpecRootDirectorySkipMerge)
101102
remoteInputSpec.set(generate.remoteInputSpec)
102103
templateDir.set(generate.templateDir)
103104
templateResourcePath.set(generate.templateResourcePath)

modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/extensions/OpenApiGeneratorGenerateExtension.kt

+16-1
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,28 @@ open class OpenApiGeneratorGenerateExtension(project: Project) {
5151

5252
/**
5353
* The Open API 2.0/3.x specification location.
54+
*
55+
* Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of
56+
* changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to
57+
* an entire directory of spec files.
5458
*/
5559
val inputSpec = project.objects.property<String>()
5660

5761
/**
58-
* Local root folder with spec files
62+
* Local root folder with spec files.
63+
*
64+
* By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the
65+
* `inputSpecRootDirectorySkipMerge` property.
5966
*/
6067
val inputSpecRootDirectory = project.objects.property<String>()
6168

69+
/**
70+
* Skip bundling all spec files into a merged spec file, if true.
71+
*
72+
* Default false.
73+
*/
74+
val inputSpecRootDirectorySkipMerge = project.objects.property<Boolean>()
75+
6276
/**
6377
* The remote Open API 2.0/3.x specification URL location.
6478
*/
@@ -400,6 +414,7 @@ open class OpenApiGeneratorGenerateExtension(project: Project) {
400414
@Suppress("MemberVisibilityCanBePrivate")
401415
fun applyDefaults() {
402416
releaseNote.set("Minor update")
417+
inputSpecRootDirectorySkipMerge.set(false)
403418
modelNamePrefix.set("")
404419
modelNameSuffix.set("")
405420
apiNameSuffix.set("")

modules/openapi-generator-gradle-plugin/src/main/kotlin/org/openapitools/generator/gradle/plugin/tasks/GenerateTask.kt

+25-4
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,34 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac
106106

107107
/**
108108
* The Open API 2.0/3.x specification location.
109+
*
110+
* Be default, Gradle will treat the openApiGenerate task as up-to-date based only on this file, regardless of
111+
* changes to any $ref referenced files. Use the `inputSpecRootDirectory` property to have Gradle track changes to
112+
* an entire directory of spec files.
109113
*/
110114
@Optional
111115
@get:InputFile
112116
@PathSensitive(PathSensitivity.RELATIVE)
113117
val inputSpec = project.objects.property<String>()
114118

115119
/**
116-
* Local root folder with spec files
120+
* Local root folder with spec files.
121+
*
122+
* By default, a merged spec file will be generated based on the contents of the directory. To disable this, set the
123+
* `inputSpecRootDirectorySkipMerge` property.
117124
*/
118125
@Optional
119126
@get:InputDirectory
120127
@PathSensitive(PathSensitivity.RELATIVE)
121128
val inputSpecRootDirectory = project.objects.property<String>();
122129

130+
/**
131+
* Skip bundling all spec files into a merged spec file, if true.
132+
*/
133+
@Input
134+
@Optional
135+
val inputSpecRootDirectorySkipMerge = project.objects.property<Boolean>()
136+
123137
/**
124138
* Name of the file that will contain all merged specs
125139
*/
@@ -625,9 +639,16 @@ open class GenerateTask @Inject constructor(private val objectFactory: ObjectFac
625639
}
626640

627641
inputSpecRootDirectory.ifNotEmpty { inputSpecRootDirectoryValue ->
628-
run {
629-
resolvedInputSpec = MergedSpecBuilder(inputSpecRootDirectoryValue, mergedFileName.getOrElse("merged")).buildMergedSpec()
630-
logger.info("Merge input spec would be used - {}", resolvedInputSpec)
642+
val skipMerge = inputSpecRootDirectorySkipMerge.get()
643+
val runMergeSpec = !skipMerge
644+
if (runMergeSpec) {
645+
run {
646+
resolvedInputSpec = MergedSpecBuilder(
647+
inputSpecRootDirectoryValue,
648+
mergedFileName.getOrElse("merged")
649+
).buildMergedSpec()
650+
logger.info("Merge input spec would be used - {}", resolvedInputSpec)
651+
}
631652
}
632653
}
633654

0 commit comments

Comments
 (0)