From e3958cba75a89a07f8f18a2fef06a1763232fe5d Mon Sep 17 00:00:00 2001 From: Valerio Santinelli Date: Wed, 11 Oct 2023 10:00:19 +0200 Subject: [PATCH] Added support to skip creation of go.mod and go.sum in the Go client generator (#16766) This adds support to avoid generating go.mod and go.sum for Go client. By default it is set to true to keep compatibility with previous version of the tool. It can be set to false using --additional-properties=withGoMod=false --- docs/generators/go.md | 1 + .../codegen/CodegenConstants.java | 2 + .../codegen/languages/AbstractGoCodegen.java | 5 +++ .../codegen/languages/GoClientCodegen.java | 16 ++++++- .../codegen/go/GoClientCodegenTest.java | 42 +++++++++++++++++++ .../codegen/go/GoClientOptionsTest.java | 1 + .../options/GoClientOptionsProvider.java | 2 + 7 files changed, 67 insertions(+), 2 deletions(-) diff --git a/docs/generators/go.md b/docs/generators/go.md index e8f9946fbcc..7120de8ba6b 100644 --- a/docs/generators/go.md +++ b/docs/generators/go.md @@ -29,6 +29,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |structPrefix|whether to prefix struct with the class name. e.g. DeletePetOpts => PetApiDeletePetOpts| |false| |useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false| |withAWSV4Signature|whether to include AWS v4 signature support| |false| +|withGoMod|Generate go.mod and go.sum| |true| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index edc2ef10c09..43e7a7af86e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -429,4 +429,6 @@ public class CodegenConstants { "
  • setting additionalProperties: false in your schemas
  • "; public static final String FASTAPI_IMPLEMENTATION_PACKAGE = "fastapiImplementationPackage"; + + public static final String WITH_GO_MOD = "withGoMod"; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 99df1b1c325..38d2513ab3a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -49,6 +49,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege protected boolean enumClassPrefix = false; protected boolean structPrefix = false; protected boolean generateInterfaces = false; + protected boolean withGoMod = false; protected String packageName = "openapi"; protected Set numberTypes; @@ -804,6 +805,10 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege this.generateInterfaces = generateInterfaces; } + public void setWithGoMod(boolean withGoMod) { + this.withGoMod = withGoMod; + } + @Override public String toDefaultValue(Schema schema) { schema = unaliasSchema(schema); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java index 47a9316b46d..4cbb6045ca0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java @@ -56,6 +56,7 @@ public class GoClientCodegen extends AbstractGoCodegen { public static final String WITH_AWSV4_SIGNATURE = "withAWSV4Signature"; public static final String GENERATE_INTERFACES = "generateInterfaces"; public static final String MODEL_FILE_FOLDER = "modelFileFolder"; + public static final String WITH_GO_MOD = "withGoMod"; protected String goImportAlias = "openapiclient"; protected boolean isGoSubmodule = false; protected boolean useOneOfDiscriminatorLookup = false; // use oneOf discriminator's mapping for model lookup @@ -137,6 +138,8 @@ public class GoClientCodegen extends AbstractGoCodegen { disallowAdditionalPropertiesIfNotPresentOpt.setEnum(disallowAdditionalPropertiesIfNotPresentOpts); cliOptions.add(disallowAdditionalPropertiesIfNotPresentOpt); this.setDisallowAdditionalPropertiesIfNotPresent(true); + cliOptions.add(CliOption.newBoolean(WITH_GO_MOD, "Generate go.mod and go.sum", true)); + this.setWithGoMod(true); } /** @@ -262,6 +265,13 @@ public class GoClientCodegen extends AbstractGoCodegen { modelFileFolder = additionalProperties.get(MODEL_FILE_FOLDER).toString(); } + if (additionalProperties.containsKey(WITH_GO_MOD)) { + setWithGoMod(Boolean.parseBoolean(additionalProperties.get(WITH_GO_MOD).toString())); + additionalProperties.put(WITH_GO_MOD, withGoMod); + } else { + additionalProperties.put(WITH_GO_MOD, true); + } + // add lambda for mustache templates to handle oneOf/anyOf naming // e.g. []string => ArrayOfString additionalProperties.put("lambda.type-to-name", (Mustache.Lambda) (fragment, writer) -> writer.write(typeToName(fragment.execute()))); @@ -273,8 +283,10 @@ public class GoClientCodegen extends AbstractGoCodegen { supportingFiles.add(new SupportingFile("configuration.mustache", "", "configuration.go")); supportingFiles.add(new SupportingFile("client.mustache", "", "client.go")); supportingFiles.add(new SupportingFile("response.mustache", "", "response.go")); - supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); - supportingFiles.add(new SupportingFile("go.sum.mustache", "", "go.sum")); + if ((boolean)additionalProperties.get(WITH_GO_MOD)) { + supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); + supportingFiles.add(new SupportingFile("go.sum.mustache", "", "go.sum")); + } supportingFiles.add(new SupportingFile(".travis.yml", "", ".travis.yml")); supportingFiles.add(new SupportingFile("utils.mustache", "", "utils.go")); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java index ce22ca83f46..cbf73e2877b 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java @@ -291,4 +291,46 @@ public class GoClientCodegenTest { "httpRes, err := apiClient.PetAPI.PetDelete(context.Background()).Execute()"); } + @Test + public void testAdditionalPropertiesWithGoMod() throws Exception { + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("go") + .setInputSpec("src/test/resources/3_0/petstore_oas3_test.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(configurator.toClientOptInput()).generate(); + System.out.println(files); + files.forEach(File::deleteOnExit); + + Path goModFile = Paths.get(output + "/go.mod"); + TestUtils.assertFileExists(goModFile); + Path goSumFile = Paths.get(output + "/go.sum"); + TestUtils.assertFileExists(goSumFile); + } + + @Test + public void testAdditionalPropertiesWithoutGoMod() throws Exception { + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("go") + .setInputSpec("src/test/resources/3_0/petstore_oas3_test.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")) + .addAdditionalProperty(GoClientCodegen.WITH_GO_MOD, false); + + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(configurator.toClientOptInput()).generate(); + System.out.println(files); + files.forEach(File::deleteOnExit); + + Path goModFile = Paths.get(output + "/go.mod"); + TestUtils.assertFileNotExists(goModFile); + Path goSumFile = Paths.get(output + "/go.sum"); + TestUtils.assertFileNotExists(goSumFile); + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java index 7ace9c09cab..c8650aa4f34 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java @@ -51,5 +51,6 @@ public class GoClientOptionsTest extends AbstractOptionsTest { verify(clientCodegen).setStructPrefix(GoClientOptionsProvider.STRUCT_PREFIX_VALUE); verify(clientCodegen).setWithAWSV4Signature(GoClientOptionsProvider.WITH_AWSV4_SIGNATURE); verify(clientCodegen).setUseOneOfDiscriminatorLookup(GoClientOptionsProvider.USE_ONE_OF_DISCRIMINATOR_LOOKUP_VALUE); + verify(clientCodegen).setWithGoMod(GoClientOptionsProvider.WITH_GO_MOD_VALUE); } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java index ef8fa66558b..d23d34f2b5c 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java @@ -36,6 +36,7 @@ public class GoClientOptionsProvider implements OptionsProvider { public static final boolean GENERATE_INTERFACES_VALUE = true; public static final boolean DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT_VALUE = true; public static final boolean USE_ONE_OF_DISCRIMINATOR_LOOKUP_VALUE = true; + public static final boolean WITH_GO_MOD_VALUE = true; @Override public String getLanguage() { @@ -56,6 +57,7 @@ public class GoClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.WITH_AWSV4_SIGNATURE_COMMENT, "true") .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") .put(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, "true") + .put(CodegenConstants.WITH_GO_MOD, "true") .put("generateInterfaces", "true") .put("structPrefix", "true") .build();