Skip to content

Commit 3ee44a4

Browse files
committed
Better handle registry referencing non-existing codestarts
We need to be a lot more solid when the registry is referencing non-existing codestarts. Which can happen if an extension is pointing to a non-existing codestart. The patch is extremely small but we have to push the logger there thus why patch is larger than expected. Related to https://quarkusio.zulipchat.com/#narrow/channel/187030-users/topic/.60quarkus.20create.20cli.60.20is.20possibly.20broken.3F/with/517462042
1 parent 96640d8 commit 3ee44a4

File tree

16 files changed

+49
-34
lines changed

16 files changed

+49
-34
lines changed

devtools/maven/src/main/java/io/quarkus/maven/CreateJBangMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public void execute() throws MojoExecutionException {
113113
throw new MojoExecutionException("Failed to resolve Quarkus extension catalog", e);
114114
}
115115

116-
final List<ResourceLoader> codestartsResourceLoader = codestartLoadersBuilder()
116+
final List<ResourceLoader> codestartsResourceLoader = codestartLoadersBuilder(log)
117117
.catalog(catalog)
118118
.artifactResolver(mvn)
119119
.build();

devtools/maven/src/main/java/io/quarkus/maven/CreateProjectMojo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ public void execute() throws MojoExecutionException {
296296
catalog = CreateProjectHelper.completeCatalog(catalog, extensions, mvn);
297297
sanitizeOptions();
298298

299-
final List<ResourceLoader> codestartsResourceLoader = codestartLoadersBuilder()
299+
final List<ResourceLoader> codestartsResourceLoader = codestartLoadersBuilder(log)
300300
.catalog(catalog)
301301
.artifactResolver(mvn)
302302
.build();

devtools/maven/src/main/java/io/quarkus/maven/QuarkusProjectMojoBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public void execute() throws MojoExecutionException {
103103
} else {
104104
final ExtensionCatalog extensionCatalog = resolveExtensionCatalog();
105105
final List<ResourceLoader> codestartsResourceLoader = CodestartResourceLoadersBuilder
106-
.codestartLoadersBuilder()
106+
.codestartLoadersBuilder(log)
107107
.artifactResolver(artifactResolver())
108108
.catalog(extensionCatalog)
109109
.build();

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/codestarts/extension/QuarkusExtensionCodestartCatalog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.quarkus.devtools.codestarts.Codestart;
1313
import io.quarkus.devtools.codestarts.DataKey;
1414
import io.quarkus.devtools.codestarts.core.GenericCodestartCatalog;
15+
import io.quarkus.devtools.messagewriter.MessageWriter;
1516

1617
public final class QuarkusExtensionCodestartCatalog extends GenericCodestartCatalog<QuarkusExtensionCodestartProjectInput> {
1718

@@ -78,9 +79,9 @@ public enum Tooling implements DataKey {
7879
GIT
7980
}
8081

81-
public static QuarkusExtensionCodestartCatalog fromBaseCodestartsResources()
82+
public static QuarkusExtensionCodestartCatalog fromBaseCodestartsResources(MessageWriter log)
8283
throws IOException {
83-
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(),
84+
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(log),
8485
QUARKUS_EXTENSION_CODESTARTS_DIR);
8586
return new QuarkusExtensionCodestartCatalog(codestarts.values());
8687
}

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/codestarts/jbang/QuarkusJBangCodestartCatalog.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.quarkus.devtools.codestarts.Codestart;
1313
import io.quarkus.devtools.codestarts.DataKey;
1414
import io.quarkus.devtools.codestarts.core.GenericCodestartCatalog;
15+
import io.quarkus.devtools.messagewriter.MessageWriter;
1516
import io.quarkus.platform.descriptor.loader.json.ResourceLoader;
1617

1718
public final class QuarkusJBangCodestartCatalog extends GenericCodestartCatalog<QuarkusJBangCodestartProjectInput> {
@@ -48,9 +49,9 @@ private QuarkusJBangCodestartCatalog(Collection<Codestart> codestarts) {
4849
super(codestarts);
4950
}
5051

51-
public static QuarkusJBangCodestartCatalog fromBaseCodestartsResources()
52+
public static QuarkusJBangCodestartCatalog fromBaseCodestartsResources(MessageWriter log)
5253
throws IOException {
53-
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(),
54+
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(log),
5455
QUARKUS_JBANG_CODESTARTS_DIR);
5556
return new QuarkusJBangCodestartCatalog(codestarts.values());
5657
}

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/codestarts/quarkus/QuarkusCodestartCatalog.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import java.nio.file.Path;
1111
import java.util.ArrayList;
1212
import java.util.Collection;
13-
import java.util.Collections;
1413
import java.util.HashMap;
1514
import java.util.List;
1615
import java.util.Map;
@@ -28,6 +27,7 @@
2827
import io.quarkus.devtools.codestarts.CodestartType;
2928
import io.quarkus.devtools.codestarts.DataKey;
3029
import io.quarkus.devtools.codestarts.core.GenericCodestartCatalog;
30+
import io.quarkus.devtools.messagewriter.MessageWriter;
3131
import io.quarkus.devtools.project.extensions.Extensions;
3232
import io.quarkus.maven.dependency.ArtifactCoords;
3333
import io.quarkus.platform.catalog.processor.ExtensionProcessor;
@@ -86,22 +86,23 @@ private QuarkusCodestartCatalog(Collection<Codestart> codestarts,
8686
this.extensionsMapping = extensionsMapping;
8787
}
8888

89-
public static QuarkusCodestartCatalog fromBaseCodestartsResources(Map<String, Extension> extensionsMapping)
89+
public static QuarkusCodestartCatalog fromBaseCodestartsResources(MessageWriter log,
90+
Map<String, Extension> extensionsMapping)
9091
throws IOException {
91-
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(),
92+
final Map<String, Codestart> codestarts = loadCodestartsFromResources(getCodestartResourceLoaders(log),
9293
QUARKUS_CODESTARTS_DIR);
9394
return new QuarkusCodestartCatalog(codestarts.values(), extensionsMapping);
9495
}
9596

96-
public static QuarkusCodestartCatalog fromBaseCodestartsResources()
97+
public static QuarkusCodestartCatalog fromBaseCodestartsResources(MessageWriter log)
9798
throws IOException {
98-
return fromBaseCodestartsResources(Collections.emptyMap());
99+
return fromBaseCodestartsResources(log, Map.of());
99100
}
100101

101102
public static QuarkusCodestartCatalog fromExtensionsCatalogAndDirectories(
102-
ExtensionCatalog catalog, Collection<Path> directories)
103+
MessageWriter log, ExtensionCatalog catalog, Collection<Path> directories)
103104
throws IOException {
104-
final List<ResourceLoader> loaders = getCodestartResourceLoaders(catalog);
105+
final List<ResourceLoader> loaders = getCodestartResourceLoaders(log, catalog);
105106
final Map<String, Codestart> codestarts = loadCodestartsFromResources(loaders,
106107
QUARKUS_CODESTARTS_DIR);
107108
for (Path directory : directories) {

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateExtensionCommandHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public QuarkusCommandOutcome execute(MessageWriter log)
6363
throws QuarkusCommandException {
6464
try {
6565
final QuarkusExtensionCodestartCatalog catalog = QuarkusExtensionCodestartCatalog
66-
.fromBaseCodestartsResources();
66+
.fromBaseCodestartsResources(log);
6767
catalog.createProject(input).generate(newExtensionDir);
6868

6969
final String extensionDirName = newExtensionDir.getFileName().toString();

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/CodestartResourceLoadersBuilder.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import io.quarkus.bootstrap.resolver.maven.MavenArtifactResolver;
2121
import io.quarkus.bootstrap.util.DependencyUtils;
22+
import io.quarkus.devtools.messagewriter.MessageWriter;
2223
import io.quarkus.platform.descriptor.loader.json.ResourceLoader;
2324
import io.quarkus.registry.catalog.Extension;
2425
import io.quarkus.registry.catalog.ExtensionCatalog;
@@ -33,6 +34,7 @@ public final class CodestartResourceLoadersBuilder {
3334
private MavenArtifactResolver artifactResolver;
3435
private String baseCodestartsArtifactCoords = BASE_CODESTARTS_ARTIFACT_COORDS;
3536
private Collection<String> extraCodestartsArtifactCoords = new ArrayList<>();
37+
private MessageWriter log;
3638

3739
private static String retrieveBaseCodestartsArtifactCoords() {
3840
final String artifact = PropertiesUtil.getProperty(BASE_CODESTARTS_ARTIFACT_PROPERTY);
@@ -52,19 +54,20 @@ private static String retrieveBaseCodestartsArtifactCoords() {
5254
}
5355
}
5456

55-
private CodestartResourceLoadersBuilder() {
57+
private CodestartResourceLoadersBuilder(MessageWriter log) {
58+
this.log = log;
5659
}
5760

58-
public static CodestartResourceLoadersBuilder codestartLoadersBuilder() {
59-
return new CodestartResourceLoadersBuilder();
61+
public static CodestartResourceLoadersBuilder codestartLoadersBuilder(MessageWriter log) {
62+
return new CodestartResourceLoadersBuilder(log);
6063
}
6164

62-
public static List<ResourceLoader> getCodestartResourceLoaders() {
63-
return codestartLoadersBuilder().build();
65+
public static List<ResourceLoader> getCodestartResourceLoaders(MessageWriter log) {
66+
return codestartLoadersBuilder(log).build();
6467
}
6568

66-
public static List<ResourceLoader> getCodestartResourceLoaders(ExtensionCatalog catalog) {
67-
return codestartLoadersBuilder().catalog(catalog).build();
69+
public static List<ResourceLoader> getCodestartResourceLoaders(MessageWriter log, ExtensionCatalog catalog) {
70+
return codestartLoadersBuilder(log).catalog(catalog).build();
6871
}
6972

7073
public CodestartResourceLoadersBuilder catalog(ExtensionCatalog catalog) {
@@ -94,13 +97,14 @@ public CodestartResourceLoadersBuilder addExtraCodestartsArtifactCoords(Collecti
9497

9598
public List<ResourceLoader> build() {
9699
return getCodestartResourceLoaders(baseCodestartsArtifactCoords, extraCodestartsArtifactCoords, catalog,
97-
artifactResolver == null ? QuarkusProjectHelper.artifactResolver() : artifactResolver);
100+
artifactResolver == null ? QuarkusProjectHelper.artifactResolver() : artifactResolver, log);
98101
}
99102

100103
private static List<ResourceLoader> getCodestartResourceLoaders(String baseCodestartsArtifactCoords,
101104
Collection<String> extraCodestartsArtifactCoords,
102105
ExtensionCatalog catalog,
103-
MavenArtifactResolver mvn) {
106+
MavenArtifactResolver mavenArtifactResolver,
107+
MessageWriter log) {
104108

105109
final Map<String, Artifact> codestartsArtifacts = new LinkedHashMap<>();
106110

@@ -146,10 +150,11 @@ private static List<ResourceLoader> getCodestartResourceLoaders(String baseCodes
146150
final List<ResourceLoader> codestartResourceLoaders = new ArrayList<>(codestartsArtifacts.size());
147151
for (Artifact a : codestartsArtifacts.values()) {
148152
try {
149-
final File artifactFile = mvn.resolve(a).getArtifact().getFile();
153+
final File artifactFile = mavenArtifactResolver.resolve(a).getArtifact().getFile();
150154
codestartResourceLoaders.add(resolveFileResourceLoader(artifactFile));
151155
} catch (Exception e) {
152-
throw new RuntimeException("Failed to resolve codestart artifact " + a, e);
156+
log.warn("Unable to resolve codestart artifact for %s: %s", a, e.getMessage());
157+
continue;
153158
}
154159
}
155160
return codestartResourceLoaders;

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/QuarkusProjectHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ public static QuarkusProject getProject(Path projectDir, ExtensionCatalog catalo
146146
public static QuarkusProject getProject(Path projectDir, ExtensionCatalog catalog, BuildTool buildTool,
147147
JavaVersion javaVersion,
148148
MessageWriter log) {
149-
return QuarkusProject.of(projectDir, catalog, getCodestartResourceLoaders(catalog),
149+
return QuarkusProject.of(projectDir, catalog, getCodestartResourceLoaders(log, catalog),
150150
log, buildTool, javaVersion);
151151
}
152152

@@ -161,7 +161,7 @@ public static ExtensionCatalog resolveExtensionCatalog() throws RegistryResoluti
161161
public static QuarkusProject getProject(Path projectDir, ExtensionCatalog catalog, ExtensionManager extManager,
162162
JavaVersion javaVersion,
163163
MessageWriter log) {
164-
return QuarkusProject.of(projectDir, catalog, getCodestartResourceLoaders(catalog),
164+
return QuarkusProject.of(projectDir, catalog, getCodestartResourceLoaders(log, catalog),
165165
log, extManager, javaVersion);
166166
}
167167

independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/buildfile/MavenProjectBuildFile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public static QuarkusProject getProject(Artifact projectPom, Model projectModel,
121121
}
122122
final MavenProjectBuildFile extensionManager = new MavenProjectBuildFile(projectDir, extensionCatalog,
123123
projectModel, deps, managedDeps, projectProps, projectPom == null ? null : artifactResolver);
124-
final List<ResourceLoader> codestartResourceLoaders = codestartLoadersBuilder().catalog(extensionCatalog)
124+
final List<ResourceLoader> codestartResourceLoaders = codestartLoadersBuilder(log).catalog(extensionCatalog)
125125
.artifactResolver(artifactResolver).build();
126126
final JavaVersion javaVersion = resolveJavaVersion(projectProps);
127127
return QuarkusProject.of(projectDir, extensionCatalog,

0 commit comments

Comments
 (0)