Skip to content

Commit

Permalink
Provide the ability to define extension Java version on creation
Browse files Browse the repository at this point in the history
Also fixes some regressions in the release.yml workflow.
  • Loading branch information
gsmet committed Nov 17, 2023
1 parent e4b5127 commit 6675146
Show file tree
Hide file tree
Showing 11 changed files with 79 additions and 10 deletions.
15 changes: 15 additions & 0 deletions devtools/cli/src/main/java/io/quarkus/cli/CreateExtension.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package io.quarkus.cli;

import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;

import io.quarkus.cli.common.OutputOptionMixin;
import io.quarkus.cli.common.PropertiesOptions;
Expand All @@ -13,6 +15,7 @@
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
import io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler;
import io.quarkus.devtools.project.BuildTool;
import io.quarkus.devtools.project.JavaVersion;
import io.quarkus.devtools.project.QuarkusProject;
import io.quarkus.maven.dependency.ArtifactCoords;
import io.quarkus.registry.catalog.ExtensionCatalog;
Expand Down Expand Up @@ -68,6 +71,12 @@
})
public class CreateExtension extends BaseCreateCommand {

static class VersionCandidates extends ArrayList<String> {
VersionCandidates() {
super(JavaVersion.JAVA_VERSIONS_LTS.stream().map(String::valueOf).collect(Collectors.toList()));
}
}

@CommandLine.Spec
protected CommandLine.Model.CommandSpec spec;

Expand All @@ -77,6 +86,11 @@ public class CreateExtension extends BaseCreateCommand {
@CommandLine.ArgGroup(order = 1, heading = "%nQuarkus version:%n")
TargetQuarkusPlatformGroup targetQuarkusVersion = new TargetQuarkusPlatformGroup();

// Ideally we should use TargetLanguageGroup once we support creating extensions with Kotlin
@CommandLine.Option(names = {
"--java" }, description = "Target Java version.\n Valid values: ${COMPLETION-CANDIDATES}", completionCandidates = VersionCandidates.class, defaultValue = JavaVersion.DEFAULT_JAVA_VERSION_FOR_EXTENSION)
String javaVersion;

@CommandLine.ArgGroup(order = 2, exclusive = false, heading = "%nGenerated artifacts%n")
ExtensionNameGenerationGroup nameGeneration = new ExtensionNameGenerationGroup();

Expand Down Expand Up @@ -117,6 +131,7 @@ public Integer call() throws Exception {
.quarkusBomGroupId(quarkusBom.getGroupId())
.quarkusBomArtifactId(quarkusBom.getArtifactId())
.quarkusBomVersion(quarkusBom.getVersion())
.javaVersion(javaVersion)
.withCodestart(codeGeneration.withCodestart())
.withoutUnitTest(codeGeneration.skipUnitTest())
.withoutDevModeTest(codeGeneration.skipDevModeTest())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,12 @@ public class CreateExtensionMojo extends AbstractMojo {
@Parameter(property = "quarkusBomVersion")
String quarkusBomVersion;

/**
* Version of Java used to build the project.
*/
@Parameter(property = "javaVersion")
private String javaVersion;

/**
* Indicates whether to generate an extension codestart
*/
Expand Down Expand Up @@ -281,7 +287,8 @@ public void execute() throws MojoExecutionException {
.quarkusVersion(quarkusVersion)
.quarkusBomGroupId(quarkusBomGroupId)
.quarkusBomArtifactId(quarkusBomArtifactId)
.quarkusBomGroupId(quarkusBomVersion)
.quarkusBomVersion(quarkusBomVersion)
.javaVersion(javaVersion)
.withCodestart(withCodestart)
.withoutUnitTest(withoutTests || withoutUnitTest)
.withoutDevModeTest(withoutTests || withoutDevModeTest)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,9 @@ public class CreateProjectMojo extends AbstractMojo {
@Parameter(property = "platformVersion", required = false)
private String bomVersion;

/**
* Version of Java used to build the project.
*/
@Parameter(property = "javaVersion")
private String javaVersion;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.release>11</maven.compiler.release>
<maven.compiler.release>{java.version}</maven.compiler.release>
{#if quarkus.version}<quarkus.version>{quarkus.version}</quarkus.version>{/if}
{#if maven.compiler-plugin-version}<compiler-plugin.version>{maven.compiler-plugin-version}</compiler-plugin.version>{/if}
{#if maven.surefire-plugin.version}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,11 @@ jobs:
if: startsWith(matrix.os, 'windows')

- uses: actions/checkout@v3
- name: Set up JDK 11
- name: Set up JDK {java.version}
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11
java-version: {java.version}
cache: 'maven'

- name: Build with Maven
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ on:
env:
ECOSYSTEM_CI_REPO: quarkusio/quarkus-ecosystem-ci
ECOSYSTEM_CI_REPO_FILE: context.yaml
JAVA_VERSION: 11
JAVA_VERSION: {java.version}

#########################
# Repo specific setting #
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ jobs:
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.GPG_PASSPHRASE }}

- name: Set up JDK 11
- name: Set up JDK {java.version}
uses: actions/setup-java@v3
with:
distribution: temurin
java-version: 11
java-version: {java.version}
cache: 'maven'
server-id: ossrh
server-username: MAVEN_USERNAME
Expand All @@ -54,7 +54,7 @@ jobs:
- name: Update latest release version in docs
run: |
mvn -B -ntp -pl docs -am generate-resources -Denforcer.skip -Dformatter.skip -Dimpsort.skip
mvn -B -ntp -pl docs -am package -DskipTests -DskipITs -Denforcer.skip -Dformatter.skip -Dimpsort.skip
if ! git diff --quiet docs/modules/ROOT/pages/includes/attributes.adoc; then
git add docs/modules/ROOT/pages/includes/attributes.adoc
git commit -m "Update the latest release version ${{steps.metadata.outputs.current-version}} in documentation"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public enum QuarkusExtensionData implements DataKey {
QUARKUS_BOM_GROUP_ID("quarkus.bom.group-id"),
QUARKUS_BOM_ARTIFACT_ID("quarkus.bom.artifact-id"),
QUARKUS_BOM_VERSION("quarkus.bom.version"),
JAVA_VERSION("java.version"),
PROPERTIES_FROM_PARENT("properties.from-parent"),
PARENT_GROUP_ID("parent.group-id"),
PARENT_ARTIFACT_ID("parent.artifact-id"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,36 @@
package io.quarkus.devtools.commands;

import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.*;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.CLASS_NAME_BASE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_DESCRIPTION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_FULL_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_GUIDE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.EXTENSION_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.HAS_DOCS_MODULE;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_RELATIVE_PATH;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.IT_PARENT_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.JAVA_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_COMPILER_PLUGIN_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_QUARKUS_EXTENSION_PLUGIN;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.MAVEN_SUREFIRE_PLUGIN_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.NAMESPACE_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.NAMESPACE_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PACKAGE_NAME;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_RELATIVE_PATH;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PARENT_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.PROPERTIES_FROM_PARENT;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_ARTIFACT_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_GROUP_ID;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_BOM_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.QUARKUS_VERSION;
import static io.quarkus.devtools.codestarts.extension.QuarkusExtensionCodestartCatalog.QuarkusExtensionData.VERSION;
import static io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler.readPom;
import static io.quarkus.devtools.project.JavaVersion.computeJavaVersion;
import static java.util.Objects.requireNonNull;
import static org.apache.commons.lang3.StringUtils.isEmpty;

Expand Down Expand Up @@ -29,6 +58,8 @@
import io.quarkus.devtools.commands.data.QuarkusCommandOutcome;
import io.quarkus.devtools.commands.handlers.CreateExtensionCommandHandler;
import io.quarkus.devtools.messagewriter.MessageWriter;
import io.quarkus.devtools.project.JavaVersion;
import io.quarkus.devtools.project.SourceType;
import io.quarkus.maven.utilities.MojoUtils;

/**
Expand Down Expand Up @@ -73,6 +104,7 @@ public enum LayoutType {
private String bomRelativeDir = "bom/application";
private String extensionsRelativeDir = "extensions";
private boolean withCodestart;
private String javaVersion;

public CreateExtension(final Path baseDir) {
this.baseDir = requireNonNull(baseDir, "extensionDirPath is required");
Expand Down Expand Up @@ -165,6 +197,11 @@ public CreateExtension quarkusBomVersion(String quarkusBomVersion) {
return this;
}

public CreateExtension javaVersion(String javaVersion) {
this.javaVersion = javaVersion;
return this;
}

public CreateExtension withCodestart(boolean withCodestart) {
this.withCodestart = withCodestart;
return this;
Expand Down Expand Up @@ -227,6 +264,10 @@ public CreateExtensionCommandHandler prepare() throws QuarkusCommandException {
data.put(EXTENSION_FULL_NAME,
data.getRequiredStringValue(NAMESPACE_NAME) + data.getRequiredStringValue(EXTENSION_NAME));

// for now, we only support Java extensions
data.put(JAVA_VERSION, javaVersion == null ? JavaVersion.DEFAULT_JAVA_VERSION_FOR_EXTENSION
: computeJavaVersion(SourceType.JAVA, javaVersion));

final String runtimeArtifactId = getRuntimeArtifactIdFromData();

ensureRequiredStringData(GROUP_ID, resolveGroupId(baseModel));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ public String toString() {
// ordering is important here, so let's keep them ordered
public static final SortedSet<Integer> JAVA_VERSIONS_LTS = new TreeSet<>(List.of(11, 17, 21));
public static final int DEFAULT_JAVA_VERSION = 11;
// we want to maximize the compatibility of extensions with the Quarkus ecosystem so let's stick to 11 by default
public static final String DEFAULT_JAVA_VERSION_FOR_EXTENSION = "11";
public static final int MAX_LTS_SUPPORTED_BY_KOTLIN = 17;
public static final String DETECT_JAVA_RUNTIME_VERSION = "<<detect java runtime version>>";
public static final Pattern JAVA_VERSION_PATTERN = Pattern.compile("(\\d+)(?:\\..*)?");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
- name: Update latest release version in docs
run: |
mvn -B -ntp -pl docs -am generate-resources -Denforcer.skip -Dformatter.skip -Dimpsort.skip
mvn -B -ntp -pl docs -am package -DskipTests -DskipITs -Denforcer.skip -Dformatter.skip -Dimpsort.skip
if ! git diff --quiet docs/modules/ROOT/pages/includes/attributes.adoc; then
git add docs/modules/ROOT/pages/includes/attributes.adoc
git commit -m "Update the latest release version ${{steps.metadata.outputs.current-version}} in documentation"
Expand Down

0 comments on commit 6675146

Please sign in to comment.