[cli][gradle] filter deprecated generators by default when listing available generators (#3612)

* Filter deprecated generators from CLI list by default.
* [gradle] Exclude deprecated generators from list by default, add "include" option to allow for customization of list task.
* Update scripts to support the --include option of the list command
* Update gradle/cli docs for generators listing with "include" option.
This commit is contained in:
Jim Schubert 2019-08-12 08:25:52 -04:00 committed by GitHub
parent 4a92cd8dca
commit a5349cfde5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 272 additions and 159 deletions

View File

@ -61,7 +61,6 @@ declare -a scripts=(
"./bin/meta-codegen.sh"
# OTHERS
"./bin/utils/export_docs_generators.sh"
"./bin/utils/export_generators_docusaurus_index.sh"
"./bin/utils/copy-to-website.sh"
"./bin/utils/export_generators_readme.sh")

View File

@ -5,7 +5,7 @@ echo "# START SCRIPT: ${SCRIPT}"
executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
for GENERATOR in $(java -jar ${executable} list --short | sed -e 's/,/\'$'\n''/g')
for GENERATOR in $(java -jar ${executable} list --short --include all | sed -e 's/,/\'$'\n''/g')
do
./bin/utils/export_generator.sh ${GENERATOR}
done

View File

@ -1,20 +0,0 @@
#!/bin/sh
SCRIPT="$0"
echo "# START SCRIPT: $SCRIPT"
executable="./modules/openapi-generator-cli/target/openapi-generator-cli.jar"
\rm -rf docs/generators.md
cat > docs/generators.md << EOF
---
id: generators
title: Generators List
---
EOF
java -jar $executable list --docsite >> docs/generators.md
echo "Wrote $(pwd)/docs/generators.md"

View File

@ -15,6 +15,6 @@ title: Generators List
EOF
java -jar $executable list | sed -e 's/\([A-Z]*\) generators:/* \1 generators:/g' -e 's/- \([a-z0-9\-]*\)/- [\1]\(generators\/\1.md\)/g' >> docs/generators.md
java -jar $executable list --docsite --include all >> docs/generators.md
echo "Wrote $(pwd)/docs/generators.md"

View File

@ -5,132 +5,132 @@ title: Generators List
The following generators are available:
* CLIENT generators:
- [ada](generators/ada.md)
- [android](generators/android.md)
- [apex](generators/apex.md)
- [bash](generators/bash.md)
- [c](generators/c.md)
- [clojure](generators/clojure.md)
- [cpp-qt5-client](generators/cpp-qt5-client.md)
- [cpp-restsdk](generators/cpp-restsdk.md)
- [cpp-tizen](generators/cpp-tizen.md)
- [csharp](generators/csharp.md)
- [csharp-dotnet2](generators/csharp-dotnet2.md) (deprecated)
- [csharp-netcore](generators/csharp-netcore.md)
- [dart](generators/dart.md)
- [dart-jaguar](generators/dart-jaguar.md)
- [eiffel](generators/eiffel.md)
- [elixir](generators/elixir.md)
- [elm](generators/elm.md)
- [erlang-client](generators/erlang-client.md)
- [erlang-proper](generators/erlang-proper.md)
- [flash](generators/flash.md)
- [go](generators/go.md)
- [go-experimental](generators/go-experimental.md)
- [groovy](generators/groovy.md)
- [haskell-http-client](generators/haskell-http-client.md)
- [java](generators/java.md)
- [javascript](generators/javascript.md)
- [javascript-closure-angular](generators/javascript-closure-angular.md)
- [javascript-flowtyped](generators/javascript-flowtyped.md)
- [jaxrs-cxf-client](generators/jaxrs-cxf-client.md)
- [jmeter](generators/jmeter.md)
- [kotlin](generators/kotlin.md)
- [lua](generators/lua.md)
- [objc](generators/objc.md)
- [ocaml](generators/ocaml.md)
- [perl](generators/perl.md)
- [php](generators/php.md)
- [powershell](generators/powershell.md)
- [python](generators/python.md)
- [python-experimental](generators/python-experimental.md)
- [r](generators/r.md)
- [ruby](generators/ruby.md)
- [rust](generators/rust.md)
- [scala-akka](generators/scala-akka.md)
- [scala-gatling](generators/scala-gatling.md)
- [scala-httpclient-deprecated](generators/scala-httpclient-deprecated.md) (deprecated)
- [scalaz](generators/scalaz.md)
- [swift2-deprecated](generators/swift2-deprecated.md) (deprecated)
- [swift3-deprecated](generators/swift3-deprecated.md) (deprecated)
- [swift4](generators/swift4.md)
- [typescript-angular](generators/typescript-angular.md)
- [typescript-angularjs](generators/typescript-angularjs.md)
- [typescript-aurelia](generators/typescript-aurelia.md)
- [typescript-axios](generators/typescript-axios.md)
- [typescript-fetch](generators/typescript-fetch.md)
- [typescript-inversify](generators/typescript-inversify.md)
- [typescript-jquery](generators/typescript-jquery.md)
- [typescript-node](generators/typescript-node.md)
- [typescript-rxjs](generators/typescript-rxjs.md)
## CLIENT generators
* [ada](generators/ada)
* [android](generators/android)
* [apex](generators/apex)
* [bash](generators/bash)
* [c](generators/c)
* [clojure](generators/clojure)
* [cpp-qt5-client](generators/cpp-qt5-client)
* [cpp-restsdk](generators/cpp-restsdk)
* [cpp-tizen](generators/cpp-tizen)
* [csharp](generators/csharp)
* [csharp-dotnet2 (deprecated)](generators/csharp-dotnet2)
* [csharp-netcore](generators/csharp-netcore)
* [dart](generators/dart)
* [dart-jaguar](generators/dart-jaguar)
* [eiffel](generators/eiffel)
* [elixir](generators/elixir)
* [elm](generators/elm)
* [erlang-client](generators/erlang-client)
* [erlang-proper](generators/erlang-proper)
* [flash](generators/flash)
* [go](generators/go)
* [go-experimental (experimental)](generators/go-experimental)
* [groovy](generators/groovy)
* [haskell-http-client](generators/haskell-http-client)
* [java](generators/java)
* [javascript](generators/javascript)
* [javascript-closure-angular](generators/javascript-closure-angular)
* [javascript-flowtyped](generators/javascript-flowtyped)
* [jaxrs-cxf-client](generators/jaxrs-cxf-client)
* [jmeter](generators/jmeter)
* [kotlin](generators/kotlin)
* [lua](generators/lua)
* [objc](generators/objc)
* [ocaml](generators/ocaml)
* [perl](generators/perl)
* [php](generators/php)
* [powershell](generators/powershell)
* [python](generators/python)
* [python-experimental (experimental)](generators/python-experimental)
* [r](generators/r)
* [ruby](generators/ruby)
* [rust](generators/rust)
* [scala-akka](generators/scala-akka)
* [scala-gatling](generators/scala-gatling)
* [scala-httpclient-deprecated (deprecated)](generators/scala-httpclient-deprecated)
* [scalaz](generators/scalaz)
* [swift2-deprecated (deprecated)](generators/swift2-deprecated)
* [swift3-deprecated (deprecated)](generators/swift3-deprecated)
* [swift4](generators/swift4)
* [typescript-angular](generators/typescript-angular)
* [typescript-angularjs](generators/typescript-angularjs)
* [typescript-aurelia](generators/typescript-aurelia)
* [typescript-axios](generators/typescript-axios)
* [typescript-fetch](generators/typescript-fetch)
* [typescript-inversify](generators/typescript-inversify)
* [typescript-jquery](generators/typescript-jquery)
* [typescript-node](generators/typescript-node)
* [typescript-rxjs](generators/typescript-rxjs)
* SERVER generators:
- [ada-server](generators/ada-server.md)
- [aspnetcore](generators/aspnetcore.md)
- [cpp-pistache-server](generators/cpp-pistache-server.md)
- [cpp-qt5-qhttpengine-server](generators/cpp-qt5-qhttpengine-server.md)
- [cpp-restbed-server](generators/cpp-restbed-server.md)
- [csharp-nancyfx](generators/csharp-nancyfx.md)
- [erlang-server](generators/erlang-server.md)
- [fsharp-giraffe-server](generators/fsharp-giraffe-server.md)
- [go-gin-server](generators/go-gin-server.md)
- [go-server](generators/go-server.md)
- [graphql-nodejs-express-server](generators/graphql-nodejs-express-server.md)
- [haskell](generators/haskell.md)
- [java-inflector](generators/java-inflector.md)
- [java-msf4j](generators/java-msf4j.md)
- [java-pkmst](generators/java-pkmst.md)
- [java-play-framework](generators/java-play-framework.md)
- [java-undertow-server](generators/java-undertow-server.md)
- [java-vertx](generators/java-vertx.md)
- [jaxrs-cxf](generators/jaxrs-cxf.md)
- [jaxrs-cxf-cdi](generators/jaxrs-cxf-cdi.md)
- [jaxrs-cxf-extended](generators/jaxrs-cxf-extended.md)
- [jaxrs-jersey](generators/jaxrs-jersey.md)
- [jaxrs-resteasy](generators/jaxrs-resteasy.md)
- [jaxrs-resteasy-eap](generators/jaxrs-resteasy-eap.md)
- [jaxrs-spec](generators/jaxrs-spec.md)
- [kotlin-server](generators/kotlin-server.md)
- [kotlin-spring](generators/kotlin-spring.md)
- [nodejs-express-server](generators/nodejs-express-server.md) (beta)
- [nodejs-server-deprecated](generators/nodejs-server-deprecated.md) (deprecated)
- [php-laravel](generators/php-laravel.md)
- [php-lumen](generators/php-lumen.md)
- [php-silex](generators/php-silex.md)
- [php-slim](generators/php-slim.md)
- [php-symfony](generators/php-symfony.md)
- [php-ze-ph](generators/php-ze-ph.md)
- [python-aiohttp](generators/python-aiohttp.md)
- [python-blueplanet](generators/python-blueplanet.md)
- [python-flask](generators/python-flask.md)
- [ruby-on-rails](generators/ruby-on-rails.md)
- [ruby-sinatra](generators/ruby-sinatra.md)
- [rust-server](generators/rust-server.md)
- [scala-finch](generators/scala-finch.md)
- [scala-lagom-server](generators/scala-lagom-server.md)
- [scala-play-server](generators/scala-play-server.md)
- [scalatra](generators/scalatra.md)
- [spring](generators/spring.md)
## SERVER generators
* [ada-server](generators/ada-server)
* [aspnetcore](generators/aspnetcore)
* [cpp-pistache-server](generators/cpp-pistache-server)
* [cpp-qt5-qhttpengine-server](generators/cpp-qt5-qhttpengine-server)
* [cpp-restbed-server](generators/cpp-restbed-server)
* [csharp-nancyfx](generators/csharp-nancyfx)
* [erlang-server](generators/erlang-server)
* [fsharp-giraffe-server](generators/fsharp-giraffe-server)
* [go-gin-server](generators/go-gin-server)
* [go-server](generators/go-server)
* [graphql-nodejs-express-server](generators/graphql-nodejs-express-server)
* [haskell](generators/haskell)
* [java-inflector](generators/java-inflector)
* [java-msf4j](generators/java-msf4j)
* [java-pkmst](generators/java-pkmst)
* [java-play-framework](generators/java-play-framework)
* [java-undertow-server](generators/java-undertow-server)
* [java-vertx](generators/java-vertx)
* [jaxrs-cxf](generators/jaxrs-cxf)
* [jaxrs-cxf-cdi](generators/jaxrs-cxf-cdi)
* [jaxrs-cxf-extended](generators/jaxrs-cxf-extended)
* [jaxrs-jersey](generators/jaxrs-jersey)
* [jaxrs-resteasy](generators/jaxrs-resteasy)
* [jaxrs-resteasy-eap](generators/jaxrs-resteasy-eap)
* [jaxrs-spec](generators/jaxrs-spec)
* [kotlin-server](generators/kotlin-server)
* [kotlin-spring](generators/kotlin-spring)
* [nodejs-express-server (beta)](generators/nodejs-express-server)
* [nodejs-server-deprecated (deprecated)](generators/nodejs-server-deprecated)
* [php-laravel](generators/php-laravel)
* [php-lumen](generators/php-lumen)
* [php-silex](generators/php-silex)
* [php-slim](generators/php-slim)
* [php-symfony](generators/php-symfony)
* [php-ze-ph](generators/php-ze-ph)
* [python-aiohttp](generators/python-aiohttp)
* [python-blueplanet](generators/python-blueplanet)
* [python-flask](generators/python-flask)
* [ruby-on-rails](generators/ruby-on-rails)
* [ruby-sinatra](generators/ruby-sinatra)
* [rust-server](generators/rust-server)
* [scala-finch](generators/scala-finch)
* [scala-lagom-server](generators/scala-lagom-server)
* [scala-play-server](generators/scala-play-server)
* [scalatra](generators/scalatra)
* [spring](generators/spring)
* DOCUMENTATION generators:
- [cwiki](generators/cwiki.md)
- [dynamic-html](generators/dynamic-html.md)
- [html](generators/html.md)
- [html2](generators/html2.md)
- [openapi](generators/openapi.md)
- [openapi-yaml](generators/openapi-yaml.md)
## DOCUMENTATION generators
* [cwiki](generators/cwiki)
* [dynamic-html](generators/dynamic-html)
* [html](generators/html)
* [html2](generators/html2)
* [openapi](generators/openapi)
* [openapi-yaml](generators/openapi-yaml)
* SCHEMA generators:
- [mysql-schema](generators/mysql-schema.md)
## SCHEMA generators
* [mysql-schema](generators/mysql-schema)
* CONFIG generators:
- [apache2](generators/apache2.md)
- [graphql-schema](generators/graphql-schema.md)
## CONFIG generators
* [apache2](generators/apache2)
* [graphql-schema](generators/graphql-schema)

View File

@ -38,9 +38,15 @@ NAME
openapi-generator-cli list - Lists the available generators
SYNOPSIS
openapi-generator-cli list [(-s | --short)]
openapi-generator-cli list [(-i <include> | --include <include>)]
[(-s | --short)]
OPTIONS
-i <include>, --include <include>
comma-separated list of stability indexes to include (value:
all,beta,stable,experimental,deprecated). Excludes deprecated by
default.
-s, --short
shortened output (suitable for scripting)
@ -210,13 +216,14 @@ This command takes one or more parameters representing the args list you would o
```bash
openapi-generator completion config-help
--named-header
-o
--output
--named-header
-g
--generator-name
-l
--lang
-f
--format
--markdown-header
```
An example bash completion script can be found in the repo at [scripts/openapi-generator-cli-completion.bash](https://github.com/OpenAPITools/openapi-generator/blob/master/scripts/openapi-generator-cli-completion.bash).

View File

@ -5,15 +5,14 @@ import com.google.common.base.Objects;
import io.airlift.airline.Command;
import io.airlift.airline.Option;
import org.apache.commons.lang3.StringUtils;
import org.openapitools.codegen.CodegenConfig;
import org.openapitools.codegen.CodegenConfigLoader;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.meta.GeneratorMetadata;
import org.openapitools.codegen.meta.Stability;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
import java.util.*;
import java.util.stream.Collectors;
// NOTE: List can later have subcommands such as list languages, list types, list frameworks, etc.
@ -26,9 +25,31 @@ public class ListGenerators implements Runnable {
@Option(name = {"-d", "--docsite" }, description = "format for docusaurus site output", hidden = true)
private Boolean docusaurus = false;
@Option(name = {"-i", "--include" },
description = "comma-separated list of stability indexes to include (value: all,beta,stable,experimental,deprecated). Excludes deprecated by default.",
allowedValues = { "all", "beta", "stable", "experimental", "deprecated" })
private String include = "stable,beta,experimental";
@Override
public void run() {
List<CodegenConfig> generators = CodegenConfigLoader.getAll();
List<CodegenConfig> generators = new ArrayList<>();
List<Stability> stabilities = Arrays.asList(Stability.values());
if (!StringUtils.isEmpty(include)) {
List<String> includes = Arrays.asList(include.split(","));
if (includes.size() != 0 && !includes.contains("all")) {
stabilities = includes.stream()
.map(Stability::forDescription)
.collect(Collectors.toList());
}
}
for (CodegenConfig codegenConfig : CodegenConfigLoader.getAll()) {
GeneratorMetadata meta = codegenConfig.getGeneratorMetadata();
if (meta != null && stabilities.contains(meta.getStability())) {
generators.add(codegenConfig);
}
}
StringBuilder sb = new StringBuilder();

View File

@ -50,4 +50,14 @@ public enum Stability {
* @return The descriptive value of this enum.
*/
public String value() { return description; }
public static Stability forDescription(String description) {
for (Stability value: values()) {
if (value.description.equals(description)) {
return value;
}
}
throw new IllegalArgumentException("description not found in the available values.");
}
}

View File

@ -374,6 +374,18 @@ openApiGenerate {
|===
=== openApiGenerators
.Options
|===
|Key |Data Type |Default |Description
|include
|String[]
|None
|A list of stability indexes to include (values: all,beta,stable,experimental,deprecated). Excludes deprecated by default.
|===
== Examples

View File

@ -19,6 +19,7 @@ package org.openapitools.generator.gradle.plugin
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.openapitools.generator.gradle.plugin.extensions.OpenApiGeneratorGenerateExtension
import org.openapitools.generator.gradle.plugin.extensions.OpenApiGeneratorGeneratorsExtension
import org.openapitools.generator.gradle.plugin.extensions.OpenApiGeneratorMetaExtension
import org.openapitools.generator.gradle.plugin.extensions.OpenApiGeneratorValidateExtension
import org.openapitools.generator.gradle.plugin.tasks.GenerateTask
@ -53,12 +54,20 @@ class OpenApiGeneratorPlugin : Plugin<Project> {
project
)
val generators = extensions.create(
"openApiGenerators",
OpenApiGeneratorGeneratorsExtension::class.java,
project
)
generate.outputDir.set("$buildDir/generate-resources/main")
tasks.apply {
create("openApiGenerators", GeneratorsTask::class.java) {
group = pluginGroup
description = "Lists generators available via Open API Generators."
include.set(generators.include)
}
create("openApiMeta", MetaTask::class.java) {

View File

@ -0,0 +1,43 @@
/*
* Copyright 2019 OpenAPI-Generator Contributors (https://openapi-generator.tech)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.openapitools.generator.gradle.plugin.extensions
import org.gradle.api.Project
import org.gradle.api.tasks.Internal
import org.gradle.kotlin.dsl.listProperty
import org.openapitools.codegen.meta.Stability
/**
* Gradle project level extension object definition for the generators task
*
* @author Jim Schubert
*/
open class OpenApiGeneratorGeneratorsExtension(project: Project) {
/**
* A list of stability indexes to include (value: all,beta,stable,experimental,deprecated). Excludes deprecated by default.
*/
val include = project.objects.listProperty<String>()
init {
applyDefaults()
}
@Suppress("MemberVisibilityCanBePrivate")
fun applyDefaults(){
include.set(Stability.values().map { s -> s.value() }.filterNot { it == Stability.DEPRECATED.value() })
}
}

View File

@ -17,9 +17,11 @@
package org.openapitools.generator.gradle.plugin.tasks
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
import org.gradle.internal.logging.text.StyledTextOutput
import org.gradle.internal.logging.text.StyledTextOutputFactory
import org.gradle.kotlin.dsl.listProperty
import org.openapitools.codegen.CodegenConfigLoader
import org.openapitools.codegen.CodegenType
import org.openapitools.codegen.meta.GeneratorMetadata
@ -35,6 +37,12 @@ import org.openapitools.codegen.meta.Stability
* @author Jim Schubert
*/
open class GeneratorsTask : DefaultTask() {
/**
* A list of stability indexes to include (value: all,beta,stable,experimental,deprecated). Excludes deprecated by default.
*/
@get:Internal
val include = project.objects.listProperty<String>()
@Suppress("unused")
@TaskAction
fun doWork() {
@ -45,6 +53,15 @@ open class GeneratorsTask : DefaultTask() {
StringBuilder().apply {
val types = CodegenType.values()
val stabilities = if (include.isPresent) {
when {
include.get().contains("all") -> Stability.values().toList()
else -> include.get().map { Stability.forDescription(it) }
}
} else {
Stability.values().filterNot { it == Stability.DEPRECATED }
}
append("The following generators are available:")
append(System.lineSeparator())
@ -56,10 +73,11 @@ open class GeneratorsTask : DefaultTask() {
generators.filter { it.tag == type }
.sortedBy { it.name }
.forEach({ generator ->
.forEach { generator ->
val meta: GeneratorMetadata? = generator.generatorMetadata
val include = stabilities.contains(meta?.stability)
if (include) {
append(" - ")
append(generator.name)
@ -70,7 +88,8 @@ open class GeneratorsTask : DefaultTask() {
}
append(System.lineSeparator())
})
}
}
append(System.lineSeparator())
append(System.lineSeparator())

View File

@ -19,6 +19,8 @@ package org.openapitools.codegen.languages;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.CodegenProperty;
import org.openapitools.codegen.SupportingFile;
import org.openapitools.codegen.meta.GeneratorMetadata;
import org.openapitools.codegen.meta.Stability;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -33,6 +35,10 @@ public class GoClientExperimentalCodegen extends GoClientCodegen {
super();
outputFolder = "generated-code/go-experimental";
embeddedTemplateDir = templateDir = "go-experimental";
generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata)
.stability(Stability.EXPERIMENTAL)
.build();
}
/**

View File

@ -18,6 +18,9 @@ package org.openapitools.codegen.languages;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.openapitools.codegen.meta.GeneratorMetadata;
import org.openapitools.codegen.meta.Stability;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,6 +42,10 @@ public class PythonClientExperimentalCodegen extends PythonClientCodegen {
apiTemplateFiles.put("python-experimental/api.mustache", ".py");
modelDocTemplateFiles.put("python-experimental/model_doc.mustache", ".md");
modelTemplateFiles.put("python-experimental/model.mustache", ".py");
generatorMetadata = GeneratorMetadata.newBuilder(generatorMetadata)
.stability(Stability.EXPERIMENTAL)
.build();
}
/**