Skip to content

Commit

Permalink
Introduce QuarkusUpdateRecipe
Browse files Browse the repository at this point in the history
  • Loading branch information
ia3andy committed Jan 12, 2023
1 parent 4b03cbe commit d68bd60
Show file tree
Hide file tree
Showing 49 changed files with 2,437 additions and 310 deletions.
4 changes: 2 additions & 2 deletions devtools/cli/src/main/java/io/quarkus/cli/CreateApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import io.quarkus.cli.common.DataOptions;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.TargetQuarkusPlatformGroup;
import io.quarkus.cli.create.BaseCreateCommand;
import io.quarkus.cli.create.CodeGenerationGroup;
import io.quarkus.cli.create.TargetBuildToolGroup;
Expand Down Expand Up @@ -40,7 +40,7 @@ public class CreateApp extends BaseCreateCommand {
String description;

@CommandLine.ArgGroup(order = 4, heading = "%nQuarkus version:%n")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

@CommandLine.ArgGroup(order = 5, heading = "%nBuild tool (Maven):%n")
TargetBuildToolGroup targetBuildTool = new TargetBuildToolGroup();
Expand Down
4 changes: 2 additions & 2 deletions devtools/cli/src/main/java/io/quarkus/cli/CreateCli.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import io.quarkus.cli.common.DataOptions;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.TargetQuarkusPlatformGroup;
import io.quarkus.cli.create.BaseCreateCommand;
import io.quarkus.cli.create.CodeGenerationGroup;
import io.quarkus.cli.create.TargetBuildToolGroup;
Expand Down Expand Up @@ -40,7 +40,7 @@ public class CreateCli extends BaseCreateCommand {
String description;

@CommandLine.ArgGroup(order = 4, heading = "%nQuarkus version:%n")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

@CommandLine.ArgGroup(order = 5, heading = "%nBuild tool (Maven):%n")
TargetBuildToolGroup targetBuildTool = new TargetBuildToolGroup();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.TargetQuarkusPlatformGroup;
import io.quarkus.cli.create.BaseCreateCommand;
import io.quarkus.cli.create.ExtensionCodeGenerationGroup;
import io.quarkus.cli.create.ExtensionGAVMixin;
Expand Down Expand Up @@ -75,7 +75,7 @@ public class CreateExtension extends BaseCreateCommand {
ExtensionGAVMixin gav = new ExtensionGAVMixin();

@CommandLine.ArgGroup(order = 1, heading = "%nQuarkus version:%n")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

@CommandLine.ArgGroup(order = 2, exclusive = false, heading = "%nGenerated artifacts%n")
ExtensionNameGenerationGroup nameGeneration = new ExtensionNameGenerationGroup();
Expand Down
4 changes: 2 additions & 2 deletions devtools/cli/src/main/java/io/quarkus/cli/Info.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.quarkus.cli.build.BuildSystemRunner;
import picocli.CommandLine;

@CommandLine.Command(name = "info", sortOptions = false, showDefaultValues = true, mixinStandardHelpOptions = false, header = "Quarkus project information.", headerHeading = "%n", commandListHeading = "%nCommands:%n", synopsisHeading = "%nUsage: ", parameterListHeading = "%n", optionListHeading = "%nOptions:%n")
@CommandLine.Command(name = "info", sortOptions = false, showDefaultValues = true, mixinStandardHelpOptions = false, header = "Display project information and verify versions health (platform and extensions).", headerHeading = "%n", commandListHeading = "%nCommands:%n", synopsisHeading = "%nUsage: ", parameterListHeading = "%n", optionListHeading = "%nOptions:%n")
public class Info extends BaseBuildCommand implements Callable<Integer> {

@CommandLine.Option(names = { "--per-module" }, description = "Display information per project module.")
Expand All @@ -16,7 +16,7 @@ public class Info extends BaseBuildCommand implements Callable<Integer> {
public Integer call() throws Exception {
try {
final BuildSystemRunner runner = getRunner();
return runner.info(perModule);
return runner.projectInfo(perModule);
} catch (Exception e) {
return output.handleCommandException(e, "Unable to collect Quarkus project information: " + e.getMessage());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import io.quarkus.cli.build.BuildSystemRunner;
import io.quarkus.cli.common.CategoryListFormatOptions;
import io.quarkus.cli.common.RunModeOption;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.TargetQuarkusPlatformGroup;
import io.quarkus.devtools.commands.ListCategories;
import io.quarkus.devtools.commands.data.QuarkusCommandException;
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
Expand All @@ -28,7 +28,7 @@ public class ProjectExtensionsCategories extends BaseBuildCommand implements Cal
CategoryListFormatOptions format = new CategoryListFormatOptions();

@CommandLine.ArgGroup(order = 2, heading = "%nQuarkus version:%n")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

@Override
public Integer call() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import io.quarkus.cli.build.BuildSystemRunner;
import io.quarkus.cli.common.ListFormatOptions;
import io.quarkus.cli.common.RunModeOption;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.TargetQuarkusPlatformGroup;
import io.quarkus.devtools.commands.ListExtensions;
import io.quarkus.devtools.commands.data.QuarkusCommandException;
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
Expand All @@ -32,7 +32,7 @@ public class ProjectExtensionsList extends BaseBuildCommand implements Callable<
RunModeOption runMode;

@CommandLine.ArgGroup(order = 2, heading = "%nQuarkus version (absolute):%n")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

@CommandLine.Option(names = { "-i",
"--installable" }, defaultValue = "false", order = 2, description = "List extensions that can be installed (relative)")
Expand Down
4 changes: 2 additions & 2 deletions devtools/cli/src/main/java/io/quarkus/cli/QuarkusCli.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
@CommandLine.Command(name = "quarkus", subcommands = {
Create.class, Build.class, Dev.class, Test.class, ProjectExtensions.class, Image.class, Registry.class, Info.class,
Update.class,
Version.class,
Completion.class }, scope = ScopeType.INHERIT, sortOptions = false, showDefaultValues = true, versionProvider = Version.class, subcommandsRepeatable = false, mixinStandardHelpOptions = false, commandListHeading = "%nCommands:%n", synopsisHeading = "%nUsage: ", optionListHeading = "Options:%n", headerHeading = "%n", parameterListHeading = "%n")
public class QuarkusCli implements QuarkusApplication, Callable<Integer> {
static {
Expand All @@ -38,7 +37,8 @@ public class QuarkusCli implements QuarkusApplication, Callable<Integer> {
@CommandLine.Mixin
protected HelpOption helpOption;

@CommandLine.Option(names = { "-v", "--version" }, versionHelp = true, description = "Print version information and exit.")
@CommandLine.Option(names = { "-v",
"--version" }, versionHelp = true, description = "Print Cli version information and exit.")
public boolean showVersion;

@CommandLine.Mixin(name = "output")
Expand Down
16 changes: 6 additions & 10 deletions devtools/cli/src/main/java/io/quarkus/cli/Update.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,23 @@

import io.quarkus.cli.build.BaseBuildCommand;
import io.quarkus.cli.build.BuildSystemRunner;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import picocli.CommandLine;

@CommandLine.Command(name = "update", sortOptions = false, showDefaultValues = true, mixinStandardHelpOptions = false, header = "Display recommended Quarkus updates.", headerHeading = "%n", commandListHeading = "%nCommands:%n", synopsisHeading = "%nUsage: ", parameterListHeading = "%n", optionListHeading = "%nOptions:%n")
@CommandLine.Command(name = "update", sortOptions = false, showDefaultValues = true, mixinStandardHelpOptions = false, header = "Suggest recommended project updates with the possibility to apply them.", headerHeading = "%n", commandListHeading = "%nCommands:%n", synopsisHeading = "%nUsage: ", parameterListHeading = "%n", optionListHeading = "%nOptions:%n")
public class Update extends BaseBuildCommand implements Callable<Integer> {

@CommandLine.Option(names = {
"--rectify" }, description = "Display platform and/or extension version alignment recommendations.")
public boolean rectify = false;
@CommandLine.ArgGroup(order = 0, heading = "%nTarget Quarkus version:%n", multiplicity = "0..1")
TargetQuarkusVersionGroup targetQuarkusVersion = new TargetQuarkusVersionGroup();

@CommandLine.Option(names = {
"--recommended-state" }, description = "Display the state of the project as if the recommended updates were applied.")
public boolean recommendedState = false;

@CommandLine.Option(names = { "--per-module" }, description = "Display information per project module.")
@CommandLine.Option(order = 1, names = { "--per-module" }, description = "Display information per project module.")
public boolean perModule = false;

@Override
public Integer call() throws Exception {
try {
final BuildSystemRunner runner = getRunner();
return runner.update(rectify, recommendedState, perModule);
return runner.updateProject(targetQuarkusVersion.platformVersion, targetQuarkusVersion.streamId, perModule);
} catch (Exception e) {
return output.handleCommandException(e, "Unable to collect Quarkus project information: " + e.getMessage());
}
Expand Down
6 changes: 1 addition & 5 deletions devtools/cli/src/main/java/io/quarkus/cli/Version.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import picocli.CommandLine;
import picocli.CommandLine.Model.CommandSpec;

@CommandLine.Command(name = "version", header = "Display version information.")
@CommandLine.Command(name = "version", header = "Display Cli version information.", hidden = true)
public class Version implements CommandLine.IVersionProvider, Callable<Integer> {

private static String version;
Expand All @@ -31,10 +31,6 @@ public class Version implements CommandLine.IVersionProvider, Callable<Integer>
@CommandLine.Spec
CommandSpec spec;

@CommandLine.Option(order = 3, names = {
"--dependencies" }, description = "Show project dependency versions")
boolean dependencies = false;

@Override
public Integer call() throws Exception {
// Gather/interpolate the usual version information via IVersionProvider handling
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ Integer listExtensions(RunModeOption runMode, ListFormatOptions format, boolean

Integer removeExtension(RunModeOption runMode, Set<String> extensions) throws Exception;

Integer info(boolean perModule) throws Exception;
Integer projectInfo(boolean perModule) throws Exception;

Integer update(boolean rectify, boolean recommendedState, boolean perModule) throws Exception;
Integer updateProject(String targetPlatformVersion, String targetPlatformStreamId, boolean perModule) throws Exception;

BuildCommandArgs prepareAction(String action, BuildOptions buildOptions, RunModeOption runMode, List<String> params);

Expand Down
16 changes: 10 additions & 6 deletions devtools/cli/src/main/java/io/quarkus/cli/build/GradleRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import io.quarkus.cli.registry.RegistryClientMixin;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.registry.config.RegistriesConfigLocator;
import io.quarkus.runtime.util.StringUtil;

public class GradleRunner implements BuildSystemRunner {
public static final String[] windowsWrapper = { "gradlew.cmd", "gradlew.bat" };
Expand Down Expand Up @@ -125,7 +126,7 @@ public Integer removeExtension(RunModeOption runMode, Set<String> extensions) {
}

@Override
public Integer info(boolean perModule) {
public Integer projectInfo(boolean perModule) {
ArrayDeque<String> args = new ArrayDeque<>();
args.add("quarkusInfo");
if (perModule) {
Expand All @@ -135,14 +136,17 @@ public Integer info(boolean perModule) {
}

@Override
public Integer update(boolean rectify, boolean recommendedState, boolean perModule) throws Exception {
public Integer updateProject(String targetPlatformVersion, String targetPlatformStreamId, boolean perModule)
throws Exception {
ArrayDeque<String> args = new ArrayDeque<>();
args.add("quarkusUpdate");
if (rectify) {
args.add("--rectify");
if (!StringUtil.isNullOrEmpty(targetPlatformVersion)) {
args.add("--platform-version");
args.add(targetPlatformVersion);
}
if (recommendedState) {
args.add("--recommended-state");
if (!StringUtil.isNullOrEmpty(targetPlatformStreamId)) {
args.add("--stream-id");
args.add(targetPlatformStreamId);
}
if (perModule) {
args.add("--per-module");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,12 +70,13 @@ public Integer removeExtension(RunModeOption runMode, Set<String> extensions) {
}

@Override
public Integer info(boolean perModule) {
public Integer projectInfo(boolean perModule) {
throw new UnsupportedOperationException("Not there yet. ;)");
}

@Override
public Integer update(boolean rectify, boolean recommendedState, boolean perModule) {
public Integer updateProject(String targetPlatformVersion, String targetPlatformStreamId, boolean perModule)
throws Exception {
throw new UnsupportedOperationException("Not there yet. ;)");
}

Expand Down
40 changes: 16 additions & 24 deletions devtools/cli/src/main/java/io/quarkus/cli/build/MavenRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
import io.quarkus.devtools.commands.AddExtensions;
import io.quarkus.devtools.commands.ListCategories;
import io.quarkus.devtools.commands.ListExtensions;
import io.quarkus.devtools.commands.ProjectInfo;
import io.quarkus.devtools.commands.RemoveExtensions;
import io.quarkus.devtools.commands.UpdateProject;
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.devtools.project.QuarkusProject;
Expand Down Expand Up @@ -130,33 +132,23 @@ public Integer removeExtension(RunModeOption runMode, Set<String> extensions) th
}

@Override
public Integer info(boolean perModule) throws Exception {
ArrayDeque<String> args = new ArrayDeque<>();
setMavenProperties(args, true);
args.add("quarkus:info");
if (perModule) {
args.add("-DperModule");
}
args.add("-ntp");
return run(prependExecutable(args));
public Integer projectInfo(boolean perModule) throws Exception {
final ProjectInfo invoker = new ProjectInfo(quarkusProject());
invoker.perModule(perModule);
invoker.appModel(MavenProjectBuildFile.resolveApplicationModel(projectRoot));
return invoker.execute().isSuccess() ? CommandLine.ExitCode.OK : CommandLine.ExitCode.SOFTWARE;
}

@Override
public Integer update(boolean rectify, boolean recommendedState, boolean perModule) {
ArrayDeque<String> args = new ArrayDeque<>();
setMavenProperties(args, true);
args.add("quarkus:update");
if (rectify) {
args.add("-Drectify");
}
if (recommendedState) {
args.add("-DrecommendedState");
}
if (perModule) {
args.add("-DperModule");
}
args.add("-ntp");
return run(prependExecutable(args));
public Integer updateProject(String targetPlatformVersion, String targetPlatformStreamId, boolean perModule)
throws Exception {
final UpdateProject invoker = new UpdateProject(quarkusProject());
invoker.latestCatalog(quarkusProject().getExtensionsCatalog());
// TODO ALEXEY: resolve targetPlatformVersion from targetPlatformStreamId if needed or from latest version
invoker.targetPlatformVersion(targetPlatformVersion);
invoker.perModule(perModule);
invoker.appModel(MavenProjectBuildFile.resolveApplicationModel(projectRoot));
return invoker.execute().isSuccess() ? CommandLine.ExitCode.OK : CommandLine.ExitCode.SOFTWARE;
}

@Override
Expand Down
Loading

0 comments on commit d68bd60

Please sign in to comment.