Skip to content

Commit 65f5728

Browse files
committed
Make build incremental
Reviewed-by: rwestberg
1 parent 6ba889e commit 65f5728

File tree

6 files changed

+191
-141
lines changed

6 files changed

+191
-141
lines changed

build.gradle

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,27 @@ configure(subprojects.findAll() { it.name != 'bots' }) {
9191
}
9292
}
9393

94-
task jar {
95-
subprojects.findAll() { it.name != 'bots' }.each { dependsOn "${it.path}:jar" }
94+
task test {
95+
subprojects.findAll() { !it.getTasksByName('test', false).isEmpty() }.each { dependsOn "${it.path}:test" }
9696
}
9797

98-
task test {
99-
subprojects.findAll() { it.name != 'bots' }.each { dependsOn "${it.path}:test" }
98+
task clean {
99+
subprojects.findAll() { !it.getTasksByName('clean', false).isEmpty() }.each { dependsOn "${it.path}:clean" }
100100
}
101101

102102
reproduce {
103103
dockerfile = 'test.dockerfile'
104104
}
105105

106-
task deleteBuildDir(type: Delete) {
107-
delete project.buildDir
108-
}
109-
110106
task local(type: Copy) {
107+
doFirst {
108+
delete project.buildDir
109+
}
111110
def os = System.getProperty('os.name').toLowerCase()
112111
def osName = os.startsWith('win') ? 'Windows' :
113112
os.startsWith('mac') ? 'Macos' : 'Linux'
114113

115114
dependsOn ':cli:image' + osName
116-
dependsOn deleteBuildDir
117115
from zipTree(file(project.rootDir.toString() +
118116
'/cli/build/distributions/cli' +
119117
'-' + project.version + '-' +

buildSrc/images/src/main/java/org/openjdk/skara/gradle/images/DownloadJDKTask.java

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import org.gradle.api.DefaultTask;
2727
import org.gradle.api.GradleException;
2828
import org.gradle.api.tasks.TaskAction;
29+
import org.gradle.api.tasks.OutputDirectory;
30+
import org.gradle.api.tasks.Input;
31+
import org.gradle.api.provider.Property;
2932

3033
import java.net.http.HttpClient;
3134
import java.net.http.HttpRequest;
@@ -42,20 +45,29 @@
4245
import java.util.Comparator;
4346

4447
public class DownloadJDKTask extends DefaultTask {
45-
private String url;
46-
private String sha256;
47-
private Path toDir;
48+
private final Property<String> url;
49+
private final Property<String> sha256;
50+
private final Property<Path> toDir;
51+
52+
public DownloadJDKTask() {
53+
url = getProject().getObjects().property(String.class);
54+
sha256 = getProject().getObjects().property(String.class);
55+
toDir = getProject().getObjects().property(Path.class);
56+
}
4857

49-
void setUrl(String url) {
50-
this.url = url;
58+
@Input
59+
Property<String> getUrl() {
60+
return url;
5161
}
5262

53-
void setSha256(String sha256) {
54-
this.sha256 = sha256;
63+
@Input
64+
Property<String> getSha256() {
65+
return sha256;
5566
}
5667

57-
void setToDir(Path toDir) {
58-
this.toDir = toDir;
68+
@OutputDirectory
69+
Property<Path> getToDir() {
70+
return toDir;
5971
}
6072

6173
private static String checksum(Path file) throws IOException {
@@ -101,27 +113,27 @@ private void unpack(Path file, Path dist) throws IOException {
101113

102114
@TaskAction
103115
void download() throws IOException, InterruptedException {
104-
var uri = URI.create(url);
116+
var uri = URI.create(url.get());
105117
var filename = Path.of(uri.getPath()).getFileName().toString();
106-
var file = toDir.resolve(filename).toAbsolutePath();
107-
var dist = toDir.resolve(filename.replace(".zip", "").replace(".tar.gz", ""));
118+
var file = toDir.get().resolve(filename).toAbsolutePath();
119+
var dist = toDir.get().resolve(filename.replace(".zip", "").replace(".tar.gz", ""));
108120

109121
if (Files.exists(dist) && Files.isDirectory(dist)) {
110122
return;
111123
}
112124

113125
if (Files.exists(file)) {
114126
var sum = checksum(file);
115-
if (sum.equals(sha256)) {
127+
if (sum.equals(sha256.get())) {
116128
unpack(file, dist);
117129
return;
118130
} else {
119131
Files.delete(file);
120132
}
121133
}
122134

123-
if (!Files.exists(toDir)) {
124-
Files.createDirectories(toDir);
135+
if (!Files.exists(toDir.get())) {
136+
Files.createDirectories(toDir.get());
125137
}
126138

127139
var client = HttpClient.newHttpClient();
@@ -131,11 +143,11 @@ void download() throws IOException, InterruptedException {
131143

132144
var res = client.send(req, BodyHandlers.ofFile(file));
133145
if (res.statusCode() >= 300) {
134-
throw new GradleException("could not download " + url + ", got " + res.statusCode());
146+
throw new GradleException("could not download " + url.get() + ", got " + res.statusCode());
135147
}
136148

137149
var sum = checksum(file);
138-
if (!sum.equals(sha256)) {
150+
if (!sum.equals(sha256.get())) {
139151
throw new GradleException("checksums do not match, actual: " + sum + ", expected: " + sha256);
140152
}
141153

buildSrc/images/src/main/java/org/openjdk/skara/gradle/images/ImagesPlugin.java

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
package org.openjdk.skara.gradle.images;
2525

2626
import org.gradle.api.*;
27+
import org.gradle.api.file.Directory;
2728
import org.gradle.api.tasks.bundling.*;
29+
import org.gradle.api.artifacts.UnknownConfigurationException;
2830

2931
import java.util.ArrayList;
32+
import java.io.File;
3033

3134
public class ImagesPlugin implements Plugin<Project> {
3235
@Override
@@ -51,31 +54,41 @@ public void execute(ImageEnvironment env) {
5154

5255
var downloadTaskName = "download" + subName + "JDK";
5356
project.getTasks().register(downloadTaskName, DownloadJDKTask.class, (task) -> {
54-
task.setUrl(env.getUrl());
55-
task.setSha256(env.getSha256());
56-
task.setToDir(rootDir.resolve(".jdk"));
57+
task.getUrl().set(env.getUrl());
58+
task.getSha256().set(env.getSha256());
59+
task.getToDir().set(rootDir.resolve(".jdk"));
5760
});
5861

5962
var linkTaskName = "link" + subName;
6063
project.getTasks().register(linkTaskName, LinkTask.class, (task) -> {
61-
for (var build : project.getRootProject().getGradle().getIncludedBuilds()) {
62-
task.dependsOn(build.task(":jar"));
64+
for (var jarTask : project.getTasksByName("jar", true)) {
65+
if (jarTask instanceof Jar) {
66+
task.getModulePath().add(((Jar) jarTask).getArchiveFile());
67+
}
68+
}
69+
70+
try {
71+
var runtimeClasspath = project.getConfigurations().getByName("runtimeClasspath");
72+
task.getRuntimeModules().addAll(runtimeClasspath.getElements());
73+
task.dependsOn(runtimeClasspath);
74+
} catch (UnknownConfigurationException e) {
75+
// ignored
6376
}
64-
task.dependsOn(project.getRootProject().getTasksByName("jar", true));
77+
6578
task.dependsOn(projectPath + ":" + downloadTaskName);
66-
task.setToDir(buildDir.resolve("images"));
67-
task.setUrl(env.getUrl());
68-
task.setOS(name);
79+
task.getToDir().set(buildDir.resolve("images"));
80+
task.getUrl().set(env.getUrl());
81+
task.getOS().set(name);
6982
task.getLaunchers().set(env.getLaunchers());
7083
task.getModules().set(env.getModules());
7184
});
7285

7386
var launchersTaskName = "launchers" + subName;
7487
project.getTasks().register(launchersTaskName, LaunchersTask.class, (task) -> {
7588
task.getLaunchers().set(env.getLaunchers());
76-
task.setOptions(env.getOptions());
77-
task.setToDir(buildDir.resolve("launchers"));
78-
task.setOS(name);
89+
task.getOptions().set(env.getOptions());
90+
task.getToDir().set(buildDir.resolve("launchers"));
91+
task.getOS().set(name);
7992
});
8093

8194
var zipTaskName = "bundleZip" + subName;

buildSrc/images/src/main/java/org/openjdk/skara/gradle/images/LaunchersTask.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,27 +35,32 @@
3535
import java.util.Comparator;
3636

3737
public class LaunchersTask extends DefaultTask {
38-
private Path toDir;
39-
private String os;
38+
private Property<Path> toDir;
39+
private Property<String> os;
4040
private MapProperty<String, String> launchers;
4141
private ListProperty<String> options;
4242

4343
@Inject
4444
public LaunchersTask(ObjectFactory factory) {
45-
this.launchers = factory.mapProperty(String.class, String.class);
45+
toDir = factory.property(Path.class);
46+
os = factory.property(String.class);
47+
launchers = factory.mapProperty(String.class, String.class);
4648
options = factory.listProperty(String.class);
4749
}
4850

49-
void setOptions(ListProperty<String> options) {
50-
this.options.set(options);
51+
@Input
52+
ListProperty<String> getOptions() {
53+
return options;
5154
}
5255

53-
void setToDir(Path toDir) {
54-
this.toDir = toDir;
56+
@OutputDirectory
57+
Property<Path> getToDir() {
58+
return toDir;
5559
}
5660

57-
void setOS(String os) {
58-
this.os = os;
61+
@Input
62+
Property<String> getOS() {
63+
return os;
5964
}
6065

6166
@Input
@@ -72,7 +77,7 @@ private static void clearDirectory(Path directory) throws IOException {
7277

7378
@TaskAction
7479
void generate() throws IOException {
75-
var dest = toDir.resolve(os);
80+
var dest = toDir.get().resolve(os.get());
7681
if (Files.isDirectory(dest)) {
7782
clearDirectory(dest);
7883
}

0 commit comments

Comments
 (0)