diff --git a/src/main/java/io/quarkus/registry/app/maven/MavenResource.java b/src/main/java/io/quarkus/registry/app/maven/MavenResource.java index 8f1fa49f..ecbe6dff 100644 --- a/src/main/java/io/quarkus/registry/app/maven/MavenResource.java +++ b/src/main/java/io/quarkus/registry/app/maven/MavenResource.java @@ -7,10 +7,12 @@ import org.jboss.logging.Logger; import io.quarkus.maven.dependency.ArtifactCoords; +import io.quarkus.registry.app.model.PlatformRelease; import jakarta.inject.Inject; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.PathSegment; @@ -55,6 +57,33 @@ private ArtifactContentProvider[] getContentProviders() { }; } + @GET + @Path("/") + @Produces("text/html") + @Operation(hidden = true) + public Response welcomePage(@Context MavenConfig mavenConfig) { + return Response.ok(String.format(""" + + + Quarkus Registry Maven Repository + +

Welcome to the Quarkus Registry Maven Repository

+ This endpoint provides Quarkus platform and extension metadata in the form of Maven artifacts for Quarkus Registry clients. + It provides the following artifacts: + + + If you use a Nexus Repository Manager and are looking for a way to configure it to use this repository, please refer to the How to register as a Nexus Repository proxy guide. + """,mavenConfig.getRegistryUrl(), + mavenConfig.getRegistryGroupId().replace(".", "/"), + PlatformRelease.findLatestQuarkusCore() + ) + ).build(); + } + @GET @Path("{path:.+}") @Operation(hidden = true) diff --git a/src/main/java/io/quarkus/registry/app/model/PlatformRelease.java b/src/main/java/io/quarkus/registry/app/model/PlatformRelease.java index ac43664e..a4d5ff68 100644 --- a/src/main/java/io/quarkus/registry/app/model/PlatformRelease.java +++ b/src/main/java/io/quarkus/registry/app/model/PlatformRelease.java @@ -43,7 +43,7 @@ @NamedQuery(name = "PlatformRelease.findQuarkusCores", query = """ select pr.version from PlatformRelease pr where pr.platformStream.platform.isDefault = true - order by pr.versionSortable + order by pr.versionSortable desc """), @NamedQuery(name = "PlatformRelease.findLatestByQuarkusCoreVersion", query = """ select pr from PlatformRelease pr @@ -241,6 +241,14 @@ public static List findQuarkusCores() { .getResultList(); } + public static String findLatestQuarkusCore() { + return getEntityManager().createNamedQuery("PlatformRelease.findQuarkusCores", String.class) + .setMaxResults(1) + .getResultStream() + .findFirst().orElse(null); + } + + public static boolean artifactCoordinatesExist(ArtifactCoords artifact) { return count("#PlatformRelease.countArtifactCoordinates", with("groupId", artifact.getGroupId()) diff --git a/src/test/java/io/quarkus/registry/app/services/MavenResourceTest.java b/src/test/java/io/quarkus/registry/app/services/MavenResourceTest.java index c25c16de..89a7028a 100644 --- a/src/test/java/io/quarkus/registry/app/services/MavenResourceTest.java +++ b/src/test/java/io/quarkus/registry/app/services/MavenResourceTest.java @@ -7,6 +7,8 @@ import java.net.HttpURLConnection; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayNameGeneration; +import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; import io.quarkus.registry.app.BaseTest; @@ -20,6 +22,7 @@ import jakarta.ws.rs.core.MediaType; @QuarkusTest +@DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) public class MavenResourceTest extends BaseTest { @BeforeEach @@ -170,4 +173,13 @@ void should_return_not_found_to_sha1_if_snapshot_version_is_invalid() { .then() .statusCode(HttpURLConnection.HTTP_NOT_FOUND); } + + @Test + void should_display_welcome_page() { + given() + .get("/maven") + .then() + .statusCode(HttpURLConnection.HTTP_OK); + } + }