diff --git a/.travis.yml b/.travis.yml index 6787fd9fe590..3bb3c73cb7f8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -178,9 +178,33 @@ after_success: fi; fi; ## docker: build and push openapi-generator-online to DockerHub - - if [ $DOCKER_HUB_USERNAME ]; then echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin && docker build -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online && if [ ! -z "$TRAVIS_TAG" ]; then docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$TRAVIS_TAG; fi && if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then docker push $DOCKER_GENERATOR_IMAGE_NAME && echo "Pushed to $DOCKER_GENERATOR_IMAGE_NAME"; fi; fi + - if [ $DOCKER_HUB_USERNAME ]; then + echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin; + export cli_version=$(\mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['); + export build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ"); + docker build --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-online --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_GENERATOR_IMAGE_NAME ./modules/openapi-generator-online; + if [ ! -z "$TRAVIS_TAG" ]; then + docker tag $DOCKER_GENERATOR_IMAGE_NAME:latest $DOCKER_GENERATOR_IMAGE_NAME:$TRAVIS_TAG; + fi; + if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then + docker push $DOCKER_GENERATOR_IMAGE_NAME && echo "Pushed to $DOCKER_GENERATOR_IMAGE_NAME"; + fi; + fi; ## docker: build cli image and push to Docker Hub - - if [ $DOCKER_HUB_USERNAME ]; then echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin && cp docker-entrypoint.sh ./modules/openapi-generator-cli && docker build -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli && if [ ! -z "$TRAVIS_TAG" ]; then docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$TRAVIS_TAG; fi && if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME && echo "Pushed to $DOCKER_CODEGEN_CLI_IMAGE_NAME"; fi; fi + - if [ $DOCKER_HUB_USERNAME ]; then + echo "$DOCKER_HUB_PASSWORD" | docker login --username=$DOCKER_HUB_USERNAME --password-stdin; + cp docker-entrypoint.sh ./modules/openapi-generator-cli; + export cli_version=$(\mvn -o org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '\['); + export build_date=$(date -u +"%Y-%m-%dT%H:%M:%SZ"); + docker build --label=org.opencontainers.image.created=$build_date --label=org.opencontainers.image.title=openapi-generator-cli --label=org.opencontainers.image.revision=$TRAVIS_COMMIT --label=org.opencontainers.image.version=$cli_version -t $DOCKER_CODEGEN_CLI_IMAGE_NAME ./modules/openapi-generator-cli; + if [ ! -z "$TRAVIS_TAG" ]; then + docker tag $DOCKER_CODEGEN_CLI_IMAGE_NAME:latest $DOCKER_CODEGEN_CLI_IMAGE_NAME:$TRAVIS_TAG; + fi; + if [ ! -z "$TRAVIS_TAG" ] || [ "$TRAVIS_BRANCH" = "master" ]; then + docker push $DOCKER_CODEGEN_CLI_IMAGE_NAME; + echo "Pushed to $DOCKER_CODEGEN_CLI_IMAGE_NAME"; + fi; + fi; ## publish latest website, variables below are secure environment variables which are unavailable to PRs from forks. - if [ "$TRAVIS_BRANCH" = "master" ] && [ -z $TRAVIS_TAG ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then cd website; diff --git a/docs/usage.md b/docs/usage.md index 1f7d4ae52c1b..0d99e25b14d6 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -25,6 +25,22 @@ The most commonly used openapi-generator-cli commands are: See 'openapi-generator-cli help ' for more information on a specific command. +``` + +## version + +The version command provides version information, returning either the semver version by default or the git sha when passed `--sha`. + +```bash +NAME + openapi-generator-cli version - Show version information + +SYNOPSIS + openapi-generator-cli version [--sha] + +OPTIONS + --sha + Git commit SHA version ``` diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/Constants.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/Constants.java new file mode 100644 index 000000000000..863f1783828a --- /dev/null +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/Constants.java @@ -0,0 +1,9 @@ +package org.openapitools.codegen; + +public class Constants { + private Constants(){ } + + public static final String CLI_NAME = "openapi-generator-cli"; + public static final String GIT_REPO = "https://github.com/openapitools/openapi-generator"; + public static final String SITE = "https://openapi-generator.tech/"; +} diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/OpenAPIGenerator.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/OpenAPIGenerator.java index 8770c48a3549..f0e42adb4a9f 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/OpenAPIGenerator.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/OpenAPIGenerator.java @@ -18,7 +18,6 @@ package org.openapitools.codegen; import io.airlift.airline.Cli; -import io.airlift.airline.Help; import io.airlift.airline.ParseArgumentsUnexpectedException; import io.airlift.airline.ParseOptionMissingException; import io.airlift.airline.ParseOptionMissingValueException; @@ -26,30 +25,31 @@ import java.util.Locale; +import static org.openapitools.codegen.Constants.CLI_NAME; + /** * User: lanwen Date: 24.03.15 Time: 17:56 *

* Command line interface for OpenAPI Generator use `openapi-generator-cli.jar help` for more info - * - * @since 2.1.3-M1 */ public class OpenAPIGenerator { public static void main(String[] args) { - String version = Version.readVersionFromResources(); - Cli.CliBuilder builder = - Cli.builder("openapi-generator-cli") + BuildInfo buildInfo = new BuildInfo(); + Cli.CliBuilder builder = + Cli.builder(CLI_NAME) .withDescription( String.format( Locale.ROOT, - "OpenAPI generator CLI (version %s).", - version)) - .withDefaultCommand(ListGenerators.class) + "OpenAPI Generator CLI %s (%s).", + buildInfo.getVersion(), + buildInfo.getSha())) + .withDefaultCommand(HelpCommand.class) .withCommands( ListGenerators.class, Generate.class, Meta.class, - Help.class, + HelpCommand.class, ConfigHelp.class, Validate.class, Version.class, @@ -60,7 +60,7 @@ public static void main(String[] args) { try { builder.build().parse(args).run(); - // If CLI is run without a command, consider this an error. This exists after initial parse/run + // If CLI runs without a command, consider this an error. This exists after initial parse/run // so we can present the configured "default command". // We can check against empty args because unrecognized arguments/commands result in an exception. // This is useful to exit with status 1, for example, so that misconfigured scripts fail fast. @@ -71,10 +71,10 @@ public static void main(String[] args) { System.exit(1); } } catch (ParseArgumentsUnexpectedException e) { - System.err.printf(Locale.ROOT,"[error] %s%n%nSee 'openapi-generator help' for usage.%n", e.getMessage()); + System.err.printf(Locale.ROOT, "[error] %s%n%nSee '%s help' for usage.%n", e.getMessage(), CLI_NAME); System.exit(1); } catch (ParseOptionMissingException | ParseOptionMissingValueException e) { - System.err.printf(Locale.ROOT,"[error] %s%n", e.getMessage()); + System.err.printf(Locale.ROOT, "[error] %s%n", e.getMessage()); System.exit(1); } } diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/BuildInfo.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/BuildInfo.java new file mode 100644 index 000000000000..cfb0981d897a --- /dev/null +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/BuildInfo.java @@ -0,0 +1,90 @@ +package org.openapitools.codegen.cmd; + +import java.io.IOException; +import java.io.InputStream; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Locale; +import java.util.Properties; + +import static org.openapitools.codegen.Constants.*; + +/** + * Presents build-time information + */ +@SuppressWarnings({"java:S108"}) +public class BuildInfo { + private static final String VERSION_PLACEHOLDER = "${project.version}"; + private static final String UNSET = "unset"; + private static final String UNKNOWN = "unknown"; + + private static final Properties properties = new Properties(); + + static { + try (InputStream is = BuildInfo.class.getResourceAsStream("/version.properties")) { + Properties versionProps = new Properties(); + versionProps.load(is); + properties.putAll(versionProps); + } catch (IOException ignored) { + } + try (InputStream is = BuildInfo.class.getResourceAsStream("/openapi-generator-git.properties")) { + Properties gitProps = new Properties(); + gitProps.load(is); + properties.putAll(gitProps); + } catch (IOException ignored) { + } + } + + /** + * Gets the version of the toolset. + * + * @return A semver string + */ + public String getVersion() { + String version = (String) properties.getOrDefault("version", UNKNOWN); + if (VERSION_PLACEHOLDER.equals(version)) { + return UNSET; + } else { + return version; + } + } + + /** + * Gets the git commit SHA1 hash. Useful for differentiating between SNAPSHOT builds. + * + * @return A short git SHA + */ + public String getSha() { + return (String) properties.getOrDefault("git.commit.id.abbrev", UNKNOWN); + } + + /** + * Gets the time when this tool was built. + * + * @return The time as {@link OffsetDateTime}, or {@link OffsetDateTime#MIN} if metadata cannot be parsed. + */ + public OffsetDateTime getBuildTime() { + try { + String time = (String) properties.getOrDefault("git.build.time", ""); + return OffsetDateTime.parse(time, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ", Locale.ROOT)); + } catch (DateTimeParseException e) { + return OffsetDateTime.MIN; + } + } + + /** + * Gets the full version display text, as one would expect from a '--version' CLI option + * + * @return Human-readable version display information + */ + public String versionDisplayText() { + StringBuilder sb = new StringBuilder(CLI_NAME); + sb.append(" ").append(this.getVersion()).append(System.lineSeparator()); + sb.append(" commit : ").append(this.getSha()).append(System.lineSeparator()); + sb.append(" built : ").append(this.getBuildTime().format(DateTimeFormatter.ISO_OFFSET_DATE_TIME)).append(System.lineSeparator()); + sb.append(" source : ").append(GIT_REPO).append(System.lineSeparator()); + sb.append(" docs : ").append(SITE).append(System.lineSeparator()); + return sb.toString(); + } +} diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/CompletionCommand.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/CompletionCommand.java index 369137fa9f17..bd67596fa9bf 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/CompletionCommand.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/CompletionCommand.java @@ -36,8 +36,9 @@ import static com.google.common.collect.Lists.newArrayList; import static io.airlift.airline.ParserUtil.createInstance; +@SuppressWarnings({"java:S106"}) @Command(name = "completion", description = "Complete commands (for using in tooling such as Bash Completions).", hidden = true) -public class CompletionCommand +public class CompletionCommand extends OpenApiGeneratorCommand implements Runnable, Callable { private static final Map> BUILTIN_SUGGESTERS = ImmutableMap.>builder() .put(Context.GLOBAL, GlobalSuggester.class) @@ -95,7 +96,7 @@ public Iterable generateSuggestions() { } @Override - public void run() { + void execute() { System.out.println(Joiner.on("\n").join(generateSuggestions())); } } \ No newline at end of file diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java index 6c6f50b544e1..20a18901099d 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ConfigHelp.java @@ -39,9 +39,9 @@ import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; import static org.apache.commons.lang3.StringUtils.isEmpty; -@SuppressWarnings("unused") +@SuppressWarnings({"unused","java:S106"}) @Command(name = "config-help", description = "Config help for chosen lang") -public class ConfigHelp implements Runnable { +public class ConfigHelp extends OpenApiGeneratorCommand { private static final Logger LOGGER = LoggerFactory.getLogger(Generate.class); @@ -91,7 +91,7 @@ public class ConfigHelp implements Runnable { private String newline = System.lineSeparator(); @Override - public void run() { + public void execute() { if (isEmpty(generatorName)) { LOGGER.error("[error] A generator name (--generator-name / -g) is required."); System.exit(1); @@ -320,6 +320,7 @@ private void generateYamlSample(StringBuilder sb, CodegenConfig config) { } } + @SuppressWarnings({"java:S1117"}) private void generatePlainTextHelp(StringBuilder sb, CodegenConfig config) { sb.append(newline).append("CONFIG OPTIONS"); if (Boolean.TRUE.equals(namedHeader)) { @@ -418,6 +419,7 @@ private void generatePlainTextHelp(StringBuilder sb, CodegenConfig config) { } } + @SuppressWarnings({"java:S1117"}) private void writePlainTextFromMap( StringBuilder sb, Map map, @@ -449,6 +451,7 @@ private void writePlainTextFromMap( } } + @SuppressWarnings({"java:S1117"}) private void writePlainTextFromArray(StringBuilder sb, String[] arr, String optIndent) { if (arr.length > 0) { // target a width of 20, then take the max up to 40. diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java index 976aa7892fb7..e3df7e2461a6 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Generate.java @@ -34,8 +34,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@SuppressWarnings({"java:S106"}) @Command(name = "generate", description = "Generate code with the specified generator.") -public class Generate implements Runnable { +public class Generate extends OpenApiGeneratorCommand { CodegenConfigurator configurator; Generator generator; @@ -244,7 +245,7 @@ public class Generate implements Runnable { private Boolean minimalUpdate; @Override - public void run() { + public void execute() { if (logToStderr != null) { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); Stream.of(Logger.ROOT_LOGGER_NAME, "io.swagger", "org.openapitools") diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GenerateBatch.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GenerateBatch.java index fde5f6ea4a33..90bdec1f3f02 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GenerateBatch.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GenerateBatch.java @@ -50,9 +50,9 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -@SuppressWarnings({"unused", "MismatchedQueryAndUpdateOfCollection"}) +@SuppressWarnings({"unused", "MismatchedQueryAndUpdateOfCollection", "java:S106"}) @Command(name = "batch", description = "Generate code in batch via external configs.", hidden = true) -public class GenerateBatch implements Runnable { +public class GenerateBatch extends OpenApiGeneratorCommand { private static final Logger LOGGER = LoggerFactory.getLogger(GenerateBatch.class); @@ -89,7 +89,7 @@ public class GenerateBatch implements Runnable { * @see Thread#run() */ @Override - public void run() { + public void execute() { if (configs.size() < 1) { LOGGER.error("No configuration file inputs specified"); System.exit(1); diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GlobalOptions.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GlobalOptions.java new file mode 100644 index 000000000000..3333d30b08eb --- /dev/null +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/GlobalOptions.java @@ -0,0 +1,13 @@ +package org.openapitools.codegen.cmd; + +import io.airlift.airline.Option; + +import static io.airlift.airline.OptionType.GLOBAL; + +public class GlobalOptions { + @Option(type = GLOBAL, name = "--version", description = "Display full version output", hidden = true) + public boolean version; + + @Option(type = GLOBAL, name = "--help", description = "Display help about the tool", hidden = true) + public boolean help; +} diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/HelpCommand.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/HelpCommand.java new file mode 100644 index 000000000000..aab582beb3af --- /dev/null +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/HelpCommand.java @@ -0,0 +1,18 @@ +package org.openapitools.codegen.cmd; + +import io.airlift.airline.Command; +import io.airlift.airline.Help; + +import javax.inject.Inject; + +@Command(name = "help", description = "Display help information about openapi-generator") +public class HelpCommand extends OpenApiGeneratorCommand { + + @Inject + public Help help; + + @Override + public void execute() { + help.call(); + } +} diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ListGenerators.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ListGenerators.java index 3cab8cf65631..8a1781932400 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ListGenerators.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/ListGenerators.java @@ -16,8 +16,9 @@ import java.util.stream.Collectors; // NOTE: List can later have subcommands such as list languages, list types, list frameworks, etc. +@SuppressWarnings({"java:S106"}) @Command(name = "list", description = "Lists the available generators") -public class ListGenerators implements Runnable { +public class ListGenerators extends OpenApiGeneratorCommand { @Option(name = {"-s", "--short" }, description = "shortened output (suitable for scripting)") private Boolean shortened = false; @@ -34,7 +35,7 @@ public class ListGenerators implements Runnable { private String include = "stable,beta,experimental"; @Override - public void run() { + public void execute() { List generators = new ArrayList<>(); List stabilities = Arrays.asList(Stability.values()); diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Meta.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Meta.java index 2326dcadf2d3..9fa400098fb1 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Meta.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Meta.java @@ -49,7 +49,7 @@ @Command(name = "meta", description = "MetaGenerator. Generator for creating a new template set " + "and configuration for Codegen. The output will be based on the language you " + "specify, and includes default templates to include.") -public class Meta implements Runnable { +public class Meta extends OpenApiGeneratorCommand { private static final Logger LOGGER = LoggerFactory.getLogger(Meta.class); @@ -80,7 +80,7 @@ public class Meta implements Runnable { private String language = "java"; @Override - public void run() { + public void execute() { final File targetDir = new File(outputFolder); LOGGER.info("writing to folder [{}]", targetDir.getAbsolutePath()); @@ -110,7 +110,7 @@ public void run() { new SupportingFile("myFile.template", String.join(File.separator, "src", "main", "resources", name), "myFile.mustache"), new SupportingFile("services.mustache", "src/main/resources/META-INF/services", CodegenConfig.class.getCanonicalName())); - String currentVersion = Version.readVersionFromResources(); + String currentVersion = buildInfo.getVersion(); Map data = new ImmutableMap.Builder() diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/OpenApiGeneratorCommand.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/OpenApiGeneratorCommand.java new file mode 100644 index 000000000000..47ee715d3dce --- /dev/null +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/OpenApiGeneratorCommand.java @@ -0,0 +1,39 @@ +package org.openapitools.codegen.cmd; + +import io.airlift.airline.Help; +import io.airlift.airline.model.GlobalMetadata; + +import javax.inject.Inject; + +@SuppressWarnings({"java:S106"}) +public abstract class OpenApiGeneratorCommand implements Runnable { + @Inject + public GlobalOptions globalOptions = new GlobalOptions(); + + @Inject + public GlobalMetadata global; + + protected BuildInfo buildInfo = new BuildInfo(); + + @Override + public void run() { + if (globalOptions.version) { + System.out.println(buildInfo.versionDisplayText()); + return; + } + + if (globalOptions.help) { + Help help = new Help(); + help.global = global; + help.call(); + return; + } + + execute(); + } + + /** + * Logic to be executed by implementing commands + */ + abstract void execute(); +} diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java index 2d95cbf5dc06..d0517d94415c 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Validate.java @@ -33,8 +33,9 @@ import java.util.List; import java.util.Set; +@SuppressWarnings({"unused","java:S106"}) @Command(name = "validate", description = "Validate specification") -public class Validate implements Runnable { +public class Validate extends OpenApiGeneratorCommand { @Option(name = {"-i", "--input-spec"}, title = "spec file", required = true, description = "location of the OpenAPI spec, as URL or file (required)") @@ -44,7 +45,7 @@ public class Validate implements Runnable { private Boolean recommend; @Override - public void run() { + public void execute() { System.out.println("Validating spec (" + spec + ")"); ParseOptions options = new ParseOptions(); options.setResolve(true); @@ -57,7 +58,9 @@ public void run() { OpenAPI specification = result.getOpenAPI(); RuleConfiguration ruleConfiguration = new RuleConfiguration(); - ruleConfiguration.setEnableRecommendations(recommend != null ? recommend : false); + + if (recommend != null) ruleConfiguration.setEnableRecommendations(recommend); + else ruleConfiguration.setEnableRecommendations(false); OpenApiEvaluator evaluator = new OpenApiEvaluator(ruleConfiguration); ValidationResult validationResult = evaluator.validate(specification); diff --git a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Version.java b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Version.java index 93e2b378a799..3c47fc2cbc65 100644 --- a/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Version.java +++ b/modules/openapi-generator-cli/src/main/java/org/openapitools/codegen/cmd/Version.java @@ -17,45 +17,30 @@ package org.openapitools.codegen.cmd; -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - import io.airlift.airline.Command; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Command(name = "version", description = "Show version information") -public class Version implements Runnable { +import io.airlift.airline.Option; - private static final Logger LOGGER = LoggerFactory.getLogger(Meta.class); +@SuppressWarnings({"unused", "java:S106"}) +@Command(name = "version", description = "Show version information used in tooling") +public class Version extends OpenApiGeneratorCommand { - private static final String VERSION_PLACEHOLDER = "${project.version}"; + @Option(name = {"--sha"}, description = "Git commit SHA version") + private Boolean sha; - private static final String UNREADABLE_VERSION = "unreadable"; - private static final String UNSET_VERSION = "unset"; - private static final String UNKNOWN_VERSION = "unknown"; + @Option(name = {"--full"}, description = "Full version details") + private Boolean full; - public static String readVersionFromResources() { - Properties versionProperties = new Properties(); - try (InputStream is = Version.class.getResourceAsStream("/version.properties")) { - versionProperties.load(is); - } catch (IOException ex) { - LOGGER.error("Error loading version properties", ex); - return UNREADABLE_VERSION; - } + @Override + public void execute() { + String version; - String version = versionProperties.getProperty("version", UNKNOWN_VERSION).trim(); - if (VERSION_PLACEHOLDER.equals(version)) { - return UNSET_VERSION; + if (Boolean.TRUE.equals(full)) { + version = buildInfo.versionDisplayText(); + } else if (Boolean.TRUE.equals(sha)) { + version = buildInfo.getSha(); } else { - return version; + version = buildInfo.getVersion(); } - } - - @Override - public void run() { - String version = readVersionFromResources(); System.out.println(version); } diff --git a/modules/openapi-generator/pom.xml b/modules/openapi-generator/pom.xml index c002609cd557..32a92e4eb360 100644 --- a/modules/openapi-generator/pom.xml +++ b/modules/openapi-generator/pom.xml @@ -43,6 +43,30 @@ target ${project.artifactId}-${project.version} + + pl.project13.maven + git-commit-id-plugin + + + get-the-git-infos + + revision + + initialize + + + + true + ${project.build.outputDirectory}/openapi-generator-git.properties + + + ^git.build.(time|version)$ + ^git.commit.id.(abbrev|full)$ + + full + ${project.parent.basedir}${file.separator}.git + + org.apache.maven.plugins maven-checkstyle-plugin diff --git a/pom.xml b/pom.xml index 5a9f8c0291d0..68418c6c41fa 100644 --- a/pom.xml +++ b/pom.xml @@ -440,6 +440,11 @@ maven-checkstyle-plugin ${checkstyle.plugin.version} + + pl.project13.maven + git-commit-id-plugin + ${git.commit.id.plugin.version} + @@ -1616,5 +1621,6 @@ 3.12.0 1.34 3.1.0 + 4.0.0