Skip to content

Commit ddd75d6

Browse files
authored
Merge pull request #43266 from gsmet/revert-gradle-changes
[3.15] Revert Gradle cache compatibility changes
2 parents 03e7e81 + 1710bbd commit ddd75d6

36 files changed

+217
-2103
lines changed

devtools/gradle/gradle-application-plugin/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
dependencies {
66
implementation(libs.smallrye.config.yaml)
77
implementation("io.quarkus:quarkus-analytics-common")
8-
compileOnly(libs.kotlin.gradle.plugin.api)
8+
99
testImplementation(libs.quarkus.project.core.extension.codestarts)
1010
}
1111

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/QuarkusPlugin.java

Lines changed: 12 additions & 140 deletions
Large diffs are not rendered by default.

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/extension/QuarkusPluginExtension.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
import org.gradle.api.Action;
1818
import org.gradle.api.Project;
19-
import org.gradle.api.file.ConfigurableFileCollection;
2019
import org.gradle.api.file.FileCollection;
2120
import org.gradle.api.file.RegularFile;
2221
import org.gradle.api.plugins.JavaPlugin;
@@ -166,14 +165,6 @@ public Set<File> resourcesDir() {
166165
return getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).getResources().getSrcDirs();
167166
}
168167

169-
public static FileCollection combinedOutputSourceDirs(Project project) {
170-
ConfigurableFileCollection classesDirs = project.files();
171-
SourceSetContainer sourceSets = project.getExtensions().getByType(SourceSetContainer.class);
172-
classesDirs.from(sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).getOutput().getClassesDirs());
173-
classesDirs.from(sourceSets.getByName(SourceSet.TEST_SOURCE_SET_NAME).getOutput().getClassesDirs());
174-
return classesDirs;
175-
}
176-
177168
public Set<File> combinedOutputSourceDirs() {
178169
Set<File> sourcesDirs = new LinkedHashSet<>();
179170
SourceSetContainer sourceSets = getSourceSets();

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/AbstractQuarkusExtension.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public abstract class AbstractQuarkusExtension {
3939
private static final String MANIFEST_SECTIONS_PROPERTY_PREFIX = "quarkus.package.jar.manifest.sections";
4040
private static final String MANIFEST_ATTRIBUTES_PROPERTY_PREFIX = "quarkus.package.jar.manifest.attributes";
4141

42-
protected static final String QUARKUS_PROFILE = "quarkus.profile";
42+
private static final String QUARKUS_PROFILE = "quarkus.profile";
4343
protected final Project project;
4444
protected final File projectDir;
4545
protected final Property<String> finalName;
@@ -249,14 +249,14 @@ private void exportCustomManifestProperties(Map<String, Object> properties) {
249249
}
250250
}
251251

252-
protected static String toManifestAttributeKey(String key) {
252+
private String toManifestAttributeKey(String key) {
253253
if (key.contains("\"")) {
254254
throw new GradleException("Manifest entry name " + key + " is invalid. \" characters are not allowed.");
255255
}
256256
return String.format("%s.\"%s\"", MANIFEST_ATTRIBUTES_PROPERTY_PREFIX, key);
257257
}
258258

259-
protected static String toManifestSectionAttributeKey(String section, String key) {
259+
private String toManifestSectionAttributeKey(String section, String key) {
260260
if (section.contains("\"")) {
261261
throw new GradleException("Manifest section name " + section + " is invalid. \" characters are not allowed.");
262262
}

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/Deploy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public void setImageBuilder(String imageBuilder) {
8484

8585
@Inject
8686
public Deploy() {
87-
super("Deploy", false);
87+
super("Deploy");
8888
}
8989

9090
@TaskAction
Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,27 @@
11

22
package io.quarkus.gradle.tasks;
33

4-
import static io.quarkus.gradle.tasks.ImageCheckRequirementsTask.QUARKUS_CONTAINER_IMAGE_BUILD;
5-
import static io.quarkus.gradle.tasks.ImageCheckRequirementsTask.QUARKUS_CONTAINER_IMAGE_BUILDER;
6-
7-
import java.io.File;
8-
import java.io.IOException;
9-
import java.nio.file.Files;
10-
import java.util.HashMap;
11-
import java.util.Map;
4+
import java.util.Optional;
125

136
import javax.inject.Inject;
147

15-
import org.gradle.api.tasks.TaskAction;
8+
import org.gradle.api.provider.MapProperty;
9+
import org.gradle.api.tasks.options.Option;
1610

1711
public abstract class ImageBuild extends ImageTask {
1812

19-
@Inject
20-
public ImageBuild() {
21-
super("Perform an image build", true);
13+
Optional<Builder> builder = Optional.empty();
14+
15+
@Option(option = "builder", description = "The container image extension to use for building the image (e.g. docker, jib, buildpack, openshift).")
16+
public void setBuilder(Builder builder) {
17+
this.builder = Optional.of(builder);
2218
}
2319

24-
@TaskAction
25-
public void imageBuild() throws IOException {
26-
Map<String, String> forcedProperties = new HashMap<String, String>();
27-
File imageBuilder = getBuilderName().get().getAsFile();
28-
String inputString = new String(Files.readAllBytes(imageBuilder.toPath()));
20+
@Inject
21+
public ImageBuild() {
22+
super("Perform an image build");
23+
MapProperty<String, String> forcedProperties = extension().forcedPropertiesProperty();
2924
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_BUILD, "true");
30-
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_BUILDER, inputString);
31-
getAdditionalForcedProperties().get().getProperties().putAll(forcedProperties);
25+
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_BUILDER, getProject().provider(() -> builder().name()));
3226
}
3327
}

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java

Lines changed: 0 additions & 121 deletions
This file was deleted.
Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,45 @@
1-
package io.quarkus.gradle.tasks;
21

3-
import static io.quarkus.gradle.tasks.ImageCheckRequirementsTask.*;
2+
package io.quarkus.gradle.tasks;
43

5-
import java.util.HashMap;
6-
import java.util.Map;
4+
import java.util.Arrays;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
77

88
import javax.inject.Inject;
99

10+
import org.gradle.api.provider.MapProperty;
1011
import org.gradle.api.tasks.TaskAction;
1112

1213
public abstract class ImagePush extends ImageTask {
1314

1415
@Inject
1516
public ImagePush() {
16-
super("Perform an image push", true);
17+
super("Perform an image push");
18+
MapProperty<String, String> forcedProperties = extension().forcedPropertiesProperty();
19+
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_BUILD, "true");
20+
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_PUSH, "true");
1721
}
1822

1923
@TaskAction
20-
public void imagePush() {
21-
Map<String, String> forcedProperties = new HashMap<String, String>();
22-
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_BUILD, "true");
23-
forcedProperties.put(QUARKUS_CONTAINER_IMAGE_PUSH, "true");
24-
getAdditionalForcedProperties().get().getProperties().putAll(forcedProperties);
24+
public void checkRequiredExtensions() {
25+
List<String> containerImageExtensions = getProject().getConfigurations().stream()
26+
.flatMap(c -> c.getDependencies().stream())
27+
.map(d -> d.getName())
28+
.filter(n -> n.startsWith(QUARKUS_CONTAINER_IMAGE_PREFIX))
29+
.map(n -> n.replaceAll("-deployment$", ""))
30+
.collect(Collectors.toList());
31+
32+
List<String> extensions = Arrays.stream(ImageBuild.Builder.values()).map(b -> QUARKUS_CONTAINER_IMAGE_PREFIX + b.name())
33+
.collect(Collectors.toList());
34+
35+
if (containerImageExtensions.isEmpty()) {
36+
getLogger().warn("Task: {} requires a container image extension.", getName());
37+
getLogger().warn("Available container image exntesions: [{}]",
38+
extensions.stream().collect(Collectors.joining(", ")));
39+
getLogger().warn("To add an extension to the project, you can run one of the commands below:");
40+
extensions.forEach(e -> {
41+
getLogger().warn("\tgradle addExtension --extensions={}", e);
42+
});
43+
}
2544
}
2645
}
Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,95 @@
11

22
package io.quarkus.gradle.tasks;
33

4-
import org.gradle.api.file.RegularFileProperty;
5-
import org.gradle.api.tasks.InputFile;
6-
import org.gradle.api.tasks.PathSensitive;
7-
import org.gradle.api.tasks.PathSensitivity;
4+
import java.util.Arrays;
5+
import java.util.HashMap;
6+
import java.util.List;
7+
import java.util.Map;
8+
import java.util.Optional;
9+
import java.util.function.Predicate;
10+
import java.util.stream.Collectors;
11+
812
import org.gradle.api.tasks.TaskAction;
913

14+
import io.quarkus.gradle.dependency.ApplicationDeploymentClasspathBuilder;
15+
import io.quarkus.gradle.tooling.ToolingUtils;
16+
import io.quarkus.runtime.LaunchMode;
17+
1018
public abstract class ImageTask extends QuarkusBuildTask {
1119

12-
ImageTask(String description, boolean compatible) {
13-
super(description, compatible);
20+
private static final String DEPLOYMENT_SUFFIX = "-deployment";
21+
static final String QUARKUS_PREFIX = "quarkus-";
22+
static final String QUARKUS_CONTAINER_IMAGE_PREFIX = "quarkus-container-image-";
23+
static final String QUARKUS_CONTAINER_IMAGE_BUILD = "quarkus.container-image.build";
24+
static final String QUARKUS_CONTAINER_IMAGE_PUSH = "quarkus.container-image.push";
25+
static final String QUARKUS_CONTAINER_IMAGE_BUILDER = "quarkus.container-image.builder";
26+
27+
static final Map<String, Builder> BUILDERS = new HashMap<>();
28+
static {
29+
for (Builder builder : Builder.values()) {
30+
BUILDERS.put(builder.name(), builder);
31+
}
1432
}
1533

16-
@InputFile
17-
@PathSensitive(PathSensitivity.RELATIVE)
18-
public abstract RegularFileProperty getBuilderName();
34+
enum Builder {
35+
docker,
36+
jib,
37+
buildpack,
38+
openshift
39+
}
40+
41+
public ImageTask(String description) {
42+
super(description);
43+
}
44+
45+
public Builder builder() {
46+
return builderFromSystemProperties()
47+
.or(() -> availableBuilders().stream().findFirst())
48+
.orElse(Builder.docker);
49+
}
50+
51+
Optional<Builder> builderFromSystemProperties() {
52+
return Optional.ofNullable(System.getProperty(QUARKUS_CONTAINER_IMAGE_BUILDER))
53+
.filter(BUILDERS::containsKey)
54+
.map(BUILDERS::get);
55+
}
56+
57+
List<Builder> availableBuilders() {
58+
// This will only pickup direct dependencies and not transitives
59+
// This means that extensions like quarkus-container-image-openshift via quarkus-openshift are not picked up
60+
// So, let's relax our filters a bit so that we can pickup quarkus-openshift directly (relax the prefix requirement).
61+
return getProject().getConfigurations()
62+
.getByName(ToolingUtils.toDeploymentConfigurationName(
63+
ApplicationDeploymentClasspathBuilder.getFinalRuntimeConfigName(LaunchMode.NORMAL)))
64+
.getDependencies().stream()
65+
.map(d -> d.getName())
66+
.filter(n -> n.startsWith(QUARKUS_CONTAINER_IMAGE_PREFIX) || n.startsWith(QUARKUS_PREFIX))
67+
.map(n -> n.replace(QUARKUS_CONTAINER_IMAGE_PREFIX, "").replace(QUARKUS_PREFIX, "").replace(DEPLOYMENT_SUFFIX,
68+
""))
69+
.filter(BUILDERS::containsKey)
70+
.map(BUILDERS::get)
71+
.collect(Collectors.toList());
72+
}
1973

2074
@TaskAction
21-
public void imageTask() {
75+
public void checkRequiredExtensions() {
76+
// Currently forcedDependencies() is not implemented for gradle.
77+
// So, let's give users a meaningful warning message.
78+
List<Builder> availableBuidlers = availableBuilders();
79+
Optional<Builder> missingBuilder = Optional.of(builder()).filter(Predicate.not(availableBuidlers::contains));
80+
missingBuilder.map(builder -> QUARKUS_CONTAINER_IMAGE_PREFIX + builder.name()).ifPresent(missingDependency -> {
81+
getLogger().warn("Task: {} requires extensions: {}", getName(), missingDependency);
82+
getLogger().warn("To add the extensions to the project you can run the following command:");
83+
getLogger().warn("\tgradle addExtension --extensions={}", missingDependency);
84+
abort("Aborting.");
85+
});
86+
87+
if (!missingBuilder.isPresent() && availableBuidlers.isEmpty()) {
88+
getLogger().warn("Task: {} requires on of extensions: {}", getName(),
89+
Arrays.stream(Builder.values()).map(Builder::name).collect(Collectors.joining(", ", "[", "]")));
90+
getLogger().warn("To add the extensions to the project you can run the following command:");
91+
getLogger().warn("\tgradle addExtension --extensions=<extension name>");
92+
abort("Aborting.");
93+
}
2294
}
2395
}

0 commit comments

Comments
 (0)