Skip to content

Commit

Permalink
Merge pull request quarkusio#18791 from ebullient/registry-list
Browse files Browse the repository at this point in the history
CLI: dry-run dir warn; show disabled registry
  • Loading branch information
aloubyansky authored Jul 19, 2021
2 parents 178d501 + d241fee commit f8f57cd
Show file tree
Hide file tree
Showing 17 changed files with 115 additions and 33 deletions.
2 changes: 1 addition & 1 deletion devtools/cli/src/main/java/io/quarkus/cli/CreateApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public Integer call() throws Exception {

createProject.setSingleProjectGAV(gav);
createProject.setTestOutputDirectory(output.getTestDirectory());
if (createProject.checkProjectRootAlreadyExists(output)) {
if (createProject.checkProjectRootAlreadyExists(output, runMode.isDryRun())) {
return CommandLine.ExitCode.USAGE;
}

Expand Down
2 changes: 1 addition & 1 deletion devtools/cli/src/main/java/io/quarkus/cli/CreateCli.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ public Integer call() throws Exception {

createProject.setSingleProjectGAV(gav);
createProject.setTestOutputDirectory(output.getTestDirectory());
if (createProject.checkProjectRootAlreadyExists(output)) {
if (createProject.checkProjectRootAlreadyExists(output, false)) {
return CommandLine.ExitCode.USAGE;
}

Expand Down
7 changes: 7 additions & 0 deletions devtools/cli/src/main/java/io/quarkus/cli/QuarkusCli.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.registry.config.RegistriesConfigLocator;
import io.quarkus.runtime.QuarkusApplication;
import io.quarkus.runtime.annotations.QuarkusMain;
import picocli.CommandLine;
Expand Down Expand Up @@ -47,6 +48,12 @@ public class QuarkusCli implements QuarkusApplication, Callable<Integer> {
@CommandLine.ArgGroup(exclusive = false, validate = false)
protected PropertiesOptions propertiesOptions = new PropertiesOptions();

@CommandLine.Option(names = {
"--tools-config" }, description = "Quarkus Tools configuration file", hidden = true, scope = CommandLine.ScopeType.INHERIT)
void setToolsConfig(String toolsConfig) {
System.setProperty(RegistriesConfigLocator.CONFIG_FILE_PATH_PROPERTY, toolsConfig);
}

@Override
public int run(String... args) throws Exception {
CommandLine cmd = factory == null ? new CommandLine(this) : new CommandLine(this, factory);
Expand Down
1 change: 0 additions & 1 deletion devtools/cli/src/main/java/io/quarkus/cli/Registry.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import java.util.List;

import io.quarkus.cli.registry.BaseRegistryCommand;
import io.quarkus.cli.registry.RegistryListCommand;
import picocli.CommandLine;
import picocli.CommandLine.ParseResult;
import picocli.CommandLine.Unmatched;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package io.quarkus.cli.registry;
package io.quarkus.cli;

import java.nio.file.Path;

import io.quarkus.cli.common.RegistryClientMixin;
import io.quarkus.cli.registry.BaseRegistryCommand;
import io.quarkus.cli.registry.RegistryClientMixin;
import io.quarkus.registry.config.RegistriesConfig;
import io.quarkus.registry.config.RegistriesConfigLocator;
import io.quarkus.registry.config.RegistryConfig;
Expand All @@ -19,14 +20,15 @@ public class RegistryListCommand extends BaseRegistryCommand {
public Integer call() throws Exception {

registryClient.refreshRegistryCache(output);

output.info("Available Quarkus extension registries:");
final RegistriesConfig config = RegistriesConfigLocator.resolveConfig();

output.info("Configured Quarkus extension registries:");
for (RegistryConfig r : config.getRegistries()) {
if (r.isDisabled()) {
continue;
output.info("- " + r.getId() + " (disabled)");
} else {
output.info("- " + r.getId());
}
output.info("- " + r.getId());
}

final Path configYaml = RegistriesConfigLocator.locateConfigYaml();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import io.quarkus.cli.common.HelpOption;
import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.ToggleRegistryClientMixin;
import io.quarkus.cli.registry.ToggleRegistryClientMixin;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.devtools.project.QuarkusProjectHelper;
import picocli.CommandLine;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import io.quarkus.cli.common.ListFormatOptions;
import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.RegistryClientMixin;
import io.quarkus.cli.common.RunModeOption;
import io.quarkus.cli.registry.RegistryClientMixin;
import io.quarkus.devtools.project.BuildTool;
import picocli.CommandLine;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
import io.quarkus.cli.common.ListFormatOptions;
import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
import io.quarkus.cli.common.RegistryClientMixin;
import io.quarkus.cli.common.RunModeOption;
import io.quarkus.cli.registry.RegistryClientMixin;
import io.quarkus.devtools.project.BuildTool;

public class JBangRunner implements BuildSystemRunner {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.cli.common.ToggleRegistryClientMixin;
import io.quarkus.cli.registry.ToggleRegistryClientMixin;
import io.quarkus.devtools.commands.CreateProject;
import io.quarkus.devtools.commands.data.QuarkusCommandInvocation;
import io.quarkus.devtools.project.BuildTool;
Expand Down Expand Up @@ -56,26 +56,32 @@ public Path outputDirectory() {
* Resolve and remember the configured project directory.
*
* @param log Output Mixin that will be used to emit error messages
* @param dryRun
* @return true IFF configured project root directory already exists
*/
public boolean checkProjectRootAlreadyExists(OutputOptionMixin log) {
public boolean checkProjectRootAlreadyExists(OutputOptionMixin log, boolean dryRun) {
if (projectRootPath == null) {
try {
projectRootPath = CreateProjectHelper.checkProjectRootPath(outputDirectory(), projectDirName);
projectRootPath = CreateProjectHelper.checkProjectRootPath(outputDirectory(), projectDirName, dryRun);
return false;
} catch (IllegalArgumentException iex) {
log.error(iex.getMessage());
log.out().printf("Use '-a' or '--artifactId' to choose a new artifactId and directory name.%n");
log.out().printf("See '%s --help' for more information.%n", mixee.qualifiedName());
return true;
if (dryRun) {
log.warn("A directory named '" + projectDirName + "' already exists.");
projectRootPath = outputDirectory().resolve(projectDirName);
} else {
log.error(iex.getMessage());
log.out().printf("Specify a different artifactId / directory name.%n");
log.out().printf("See '%s --help' for more information.%n", mixee.qualifiedName());
return true;
}
}
}
return false;
}

public Path projectRoot() {
if (projectRootPath == null) {
projectRootPath = CreateProjectHelper.checkProjectRootPath(outputDirectory(), projectDirName);
projectRootPath = CreateProjectHelper.checkProjectRootPath(outputDirectory(), projectDirName, false);
}
return projectRootPath;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package io.quarkus.cli.common;
package io.quarkus.cli.registry;

import java.nio.file.Path;

import io.quarkus.cli.Version;
import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.TargetQuarkusVersionGroup;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.devtools.project.QuarkusProject;
import io.quarkus.devtools.project.QuarkusProjectHelper;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package io.quarkus.cli.common;
package io.quarkus.cli.registry;

import picocli.CommandLine;

Expand Down
46 changes: 46 additions & 0 deletions devtools/cli/src/test/java/io/quarkus/cli/CliNonProjectTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package io.quarkus.cli;

import static org.assertj.core.api.Assertions.assertThat;

import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand All @@ -10,6 +14,7 @@
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

import io.quarkus.registry.config.RegistriesConfigLocator;
import picocli.CommandLine;

public class CliNonProjectTest {
Expand All @@ -30,6 +35,7 @@ public void verifyEmptyDirectory() throws Exception {
"Directory list operation should succeed");
Assertions.assertEquals(0, files.length,
"Directory should be empty. Found: " + Arrays.toString(files));
System.clearProperty(RegistriesConfigLocator.CONFIG_FILE_PATH_PROPERTY);
}

@Test
Expand Down Expand Up @@ -80,4 +86,44 @@ public void testCreateAppDryRun() throws Exception {
Assertions.assertEquals(result.stdout, result2.stdout,
"Invoking the command with --dryrun should produce the same result");
}

@Test
public void testRegistryRefresh() throws Exception {

// List extensions of a specified platform version
CliDriver.Result result = CliDriver.execute(workspaceRoot, "registry", "--refresh", "-e");
Assertions.assertEquals(CommandLine.ExitCode.OK, result.exitCode,
"Expected OK return code." + result);

Path configPath = resolveConfigPath("enabledConfig.yml");
result = CliDriver.execute(workspaceRoot, "registry", "--refresh", "-e",
"--tools-config", configPath.toAbsolutePath().toString());
Assertions.assertEquals(CommandLine.ExitCode.OK, result.exitCode,
"Expected OK return code." + result);
Assertions.assertTrue(result.stdout.contains(configPath.toString()),
"Should contain path to config file, found: " + result.stdout);
Assertions.assertTrue(result.stdout.contains("- registry.test.local"),
"Should contain '- registry.test.local', found: " + result.stdout);
Assertions.assertFalse(result.stdout.contains("- registry.quarkus.io"),
"Should not contain '- registry.quarkus.io', found: " + result.stdout);

configPath = resolveConfigPath("disabledConfig.yml");
result = CliDriver.execute(workspaceRoot, "registry", "--refresh", "-e",
"--tools-config", configPath.toAbsolutePath().toString());
Assertions.assertEquals(CommandLine.ExitCode.OK, result.exitCode,
"Expected OK return code." + result);
Assertions.assertTrue(result.stdout.contains(configPath.toString()),
"Should contain path to config file, found: " + result.stdout);
Assertions.assertTrue(result.stdout.contains("- registry.test.local (disabled)"),
"Should contain '- registry.test.local (disabled)', found: " + result.stdout);
Assertions.assertTrue(result.stdout.contains("- registry.quarkus.io"),
"Should contain '- registry.quarkus.io', found: " + result.stdout);
}

private static Path resolveConfigPath(String configName) throws URISyntaxException {
final URL configUrl = Thread.currentThread().getContextClassLoader().getResource(configName);
assertThat(configUrl).isNotNull();
final Path path = Paths.get(configUrl.toURI());
return path;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,13 @@ public void testCreateAppOverrides() throws Exception {
"result should contain '-Dproperty=value1 -Dproperty2=value2':\n" + result.stdout);

CliDriver.invokeValidateBuild(project);

result = CliDriver.execute(workspaceRoot, "create", "app", "--dry-run", "--verbose", "-e", "-B",
"--output-directory=" + nested,
"silly:my-project:0.1.0");
Assertions.assertEquals(CommandLine.ExitCode.OK, result.exitCode, "Expected OK return code. " + result);
Assertions.assertTrue(result.stdout.contains("WARN"),
"Expected a warning that the directory already exists. " + result);
}

@Test
Expand Down
7 changes: 7 additions & 0 deletions devtools/cli/src/test/resources/disabledConfig.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
registries:
- registry.test.local:
update-policy: "always"
disabled: true
maven:
repository:
url: https://registry.quarkus.io/maven
6 changes: 6 additions & 0 deletions devtools/cli/src/test/resources/enabledConfig.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
registries:
- registry.test.local:
update-policy: "always"
maven:
repository:
url: https://registry.quarkus.io/maven
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public static String checkPackageName(String name) {
return name;
}

public static Path checkProjectRootPath(Path outputPath, String name) {
public static Path checkProjectRootPath(Path outputPath, String name, boolean dryRun) {
requireNonNull(name, "Must specify project name");
requireNonNull(outputPath, "Must specify output path");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,20 +29,21 @@
public class RegistriesConfigLocator {

public static final String CONFIG_RELATIVE_PATH = ".quarkus/config.yaml";
public static final String CONFIG_FILE_PATH_PROPERTY = "qer.config";
public static final String CONFIG_FILE_PATH_PROPERTY = "quarkus.tools.config";

/**
* Locate the registry client configuration file and deserialize it.
* The method will be looking for the file in the following locations in this order:
*
* The method will look for the file in the following locations in this order:
* <ol>
* <li>if <code>qer.config</code> system property is set, its value will be used as the location of the configuration
* file</li>
* <li>if <code>quarkus.config.root</code> system property is set, its value will be
* used as the location of the configuration file</li>
* <li>current user directory (which usually would be the project dir)</li>
* <li><code>.quarkus/config.yaml</code> in the user home directory
* </ol>
*
* Given that the presence of the configuration file is optional, if the configuration file couldn't be located,
* an empty configuration would be returned to the caller.
* If the configuration file can't be located (it is optional),
* an empty configuration will be returned to the caller.
*
* @return registry client configuration, never null
*/
Expand Down Expand Up @@ -122,11 +123,9 @@ private static RegistriesConfig completeRequiredConfig(RegistriesConfig original
config.addRegistry(getDefaultRegistry());
} else {
for (RegistryConfig qerConfig : original.getRegistries()) {
if (!qerConfig.isDisabled()) {
config.addRegistry(completeRequiredConfig(qerConfig));
}
config.addRegistry(completeRequiredConfig(qerConfig));
}
if (config.isEmpty()) {
if (config.getRegistries().stream().filter(x -> !x.isDisabled()).count() == 0) {
config.addRegistry(getDefaultRegistry());
}
}
Expand All @@ -140,6 +139,7 @@ private static RegistryConfig completeRequiredConfig(RegistryConfig original) {
final String id = original.getId();
final JsonRegistryConfig config = new JsonRegistryConfig(id);
config.setUpdatePolicy(original.getUpdatePolicy());
config.setDisabled(original.isDisabled());
config.setDescriptor(completeDescriptor(original));
if (original != null) {
if (original.getMaven() != null) {
Expand Down

0 comments on commit f8f57cd

Please sign in to comment.