Skip to content

Commit

Permalink
Merge pull request #39467 from ia3andy/fix-cli-compat
Browse files Browse the repository at this point in the history
Fix codestarts compatibility with older CLI
  • Loading branch information
gsmet authored Mar 19, 2024
2 parents c80bfb1 + 6484be5 commit 62b5503
Show file tree
Hide file tree
Showing 14 changed files with 155 additions and 36 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{#include readme-header /}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{#include index-entry path=resource.path/}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# We need this for compat with older CLI versions
name: resteasy-reactive-codestart
ref: resteasy-reactive
type: code
tags: extension-codestart
metadata:
title: REST
description: Easily start your REST Web Services
related-guide-section: https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources
language:
base:
data:
resource:
class-name: GreetingResource
path: "/hello"
response: "Hello from Quarkus REST"
dependencies:
- io.quarkus:quarkus-rest
test-dependencies:
- io.rest-assured:rest-assured
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.acme;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("{resource.path}")
public class {resource.class-name} {

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "{resource.response}";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package org.acme;

import io.quarkus.test.junit.QuarkusIntegrationTest;

@QuarkusIntegrationTest
class {resource.class-name}IT extends {resource.class-name}Test {
// Execute the same tests but in packaged mode.
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.acme;

import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.is;

@QuarkusTest
class {resource.class-name}Test {
@Test
void testHelloEndpoint() {
given()
.when().get("{resource.path}")
.then()
.statusCode(200)
.body(is("{resource.response}"));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.acme

import jakarta.ws.rs.GET
import jakarta.ws.rs.Path
import jakarta.ws.rs.Produces
import jakarta.ws.rs.core.MediaType

@Path("{resource.path}")
class {resource.class-name} {

@GET
@Produces(MediaType.TEXT_PLAIN)
fun hello() = "{resource.response}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.acme

import io.quarkus.test.junit.QuarkusIntegrationTest

@QuarkusIntegrationTest
class {resource.class-name}IT : {resource.class-name}Test()
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.acme

import io.quarkus.test.junit.QuarkusTest
import io.restassured.RestAssured.given
import org.hamcrest.CoreMatchers.`is`
import org.junit.jupiter.api.Test

@QuarkusTest
class {resource.class-name}Test {

@Test
fun testHelloEndpoint() {
given()
.`when`().get("{resource.path}")
.then()
.statusCode(200)
.body(`is`("{resource.response}"))
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.acme

import jakarta.ws.rs.\{GET, Path, Produces}
import jakarta.ws.rs.core.MediaType

@Path("{resource.path}")
class {resource.class-name} {

@GET
@Produces(Array[String](MediaType.TEXT_PLAIN))
def hello() = "{resource.response}"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package org.acme

import io.quarkus.test.junit.QuarkusIntegrationTest

@QuarkusIntegrationTest
class {resource.class-name}IT extends {resource.class-name}Test
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.acme

import io.quarkus.test.junit.QuarkusTest
import io.restassured.RestAssured.given
import org.hamcrest.CoreMatchers.`is`
import org.junit.jupiter.api.Test

@QuarkusTest
class {resource.class-name}Test {

@Test
def testHelloEndpoint() = {
given()
.`when`().get("{resource.path}")
.then()
.statusCode(200)
.body(`is`("{resource.response}"))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import io.quarkus.platform.descriptor.loader.json.ResourceLoader;
import io.quarkus.registry.catalog.Extension;
import io.quarkus.registry.catalog.ExtensionCatalog;
import io.smallrye.common.version.VersionScheme;

public final class QuarkusCodestartCatalog extends GenericCodestartCatalog<QuarkusCodestartProjectInput> {

Expand Down Expand Up @@ -138,13 +137,17 @@ protected Collection<Codestart> select(QuarkusCodestartProjectInput projectInput
.filter(c -> !isExample(c) || projectInput.getExample() == null || c.matches(projectInput.getExample()))
.collect(Collectors.toCollection(ArrayList::new));

// include default codestarts depending on the versions and the extensions being chosen or not
Optional<String> selectedDefaultCodeStart = getSelectedDefaultCodeStart(projectInput);
// include default codestart depending on the versions and the extensions being chosen or not
Optional<String> selectedDefaultCodeStart = Optional.ofNullable(projectInput.getDefaultCodestart());

// if there is no extension selected or only language extensions, we should add the default code start
// this has been settled in https://github.com/quarkusio/quarkus/pull/39467
final boolean shouldAddDefaultCodeStart = projectInput.getExtensions().isEmpty() ||
(projectInput.getExtensions().size() == 1
&& isLanguageExtension(projectInput.getExtensions().iterator().next()));
if (projectInput.getAppContent().contains(CODE)
&& selectedDefaultCodeStart.isPresent()
&& projectCodestarts.stream()
.noneMatch(c -> c.getType() == CodestartType.CODE && !c.getSpec().isPreselected())) {
&& shouldAddDefaultCodeStart) {
final Codestart defaultCodestart = codestarts.stream()
.filter(c -> c.matches(selectedDefaultCodeStart.get()))
.findFirst().orElseThrow(() -> new CodestartStructureException(
Expand Down Expand Up @@ -178,36 +181,6 @@ protected Collection<Codestart> select(QuarkusCodestartProjectInput projectInput
return projectCodestarts;
}

private Optional<String> getSelectedDefaultCodeStart(QuarkusCodestartProjectInput projectInput) {
// This is very hackyish, we need a better data structure to do better
Optional<ArtifactCoords> quarkusBom = projectInput.getBoms().stream()
.map(ArtifactCoords::fromString)
.filter(b -> isCoreBom(b) || isPlatformBom(b) || isUniverseBom(b))
.findFirst();

String bomVersion = null;

if (quarkusBom.isPresent()) {
bomVersion = quarkusBom.get().getVersion();
}

if (bomVersion == null || VersionScheme.MAVEN.compare(bomVersion, "2.8") >= 0) {
if (projectInput.getExtensions().isEmpty() ||
(projectInput.getExtensions().size() == 1
&& isLanguageExtension(projectInput.getExtensions().iterator().next()))) {
var defaultCodestart = projectInput.getDefaultCodestart();
if (defaultCodestart == null) {
defaultCodestart = QuarkusCodestartCatalog.ExtensionCodestart.REST.key();
}
return Optional.of(defaultCodestart);
}

return Optional.empty();
}

return Optional.of(ExtensionCodestart.RESTEASY.key());
}

private boolean isCoreBom(ArtifactCoords artifactCoords) {
return IO_QUARKUS_GROUP_ID.equals(artifactCoords.getGroupId()) && QUARKUS_BOM.equals(artifactCoords.getArtifactId());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,6 +252,7 @@ private void checkMinimumJavaVersion(String javaVersionString, List<Extension> e
}

private static String getDefaultCodestart(ExtensionCatalog catalog) {
// Recent versions of the catalog have a default-codestart in the project metadata (2.10+)
var map = catalog.getMetadata();
if (map != null && !map.isEmpty()) {
var projectMetadata = map.get("project");
Expand All @@ -264,6 +265,7 @@ private static String getDefaultCodestart(ExtensionCatalog catalog) {
}
}
}
return null;
// Let's use resteasy-reactive for older versions
return "resteasy-reactive";
}
}

0 comments on commit 62b5503

Please sign in to comment.