Skip to content

Commit

Permalink
Fix system property breaking build cacheability
Browse files Browse the repository at this point in the history
Closes #191
  • Loading branch information
melix committed Feb 3, 2022
1 parent 11efb06 commit e0e4492
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 4 deletions.
Expand Up @@ -82,7 +82,10 @@
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.InputFiles;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskContainer;
Expand All @@ -92,12 +95,14 @@
import org.gradle.api.tasks.testing.Test;
import org.gradle.jvm.toolchain.JavaToolchainService;
import org.gradle.language.base.plugins.LifecycleBasePlugin;
import org.gradle.process.CommandLineArgumentProvider;
import org.gradle.process.JavaForkOptions;
import org.gradle.util.GFileUtils;

import javax.inject.Inject;
import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.Callable;
Expand Down Expand Up @@ -363,7 +368,9 @@ public void registerTestBinary(Project project,
test.getOutputs().dir(testResultsDir);
// Set system property read by the UniqueIdTrackingListener.
test.systemProperty(JUNIT_PLATFORM_LISTENERS_UID_TRACKING_ENABLED, true);
test.systemProperty(JUNIT_PLATFORM_LISTENERS_UID_TRACKING_OUTPUT_DIR, testListDirectory.getAsFile().get());
TrackingDirectorySystemPropertyProvider directoryProvider = project.getObjects().newInstance(TrackingDirectorySystemPropertyProvider.class);
directoryProvider.getDirectory().set(testListDirectory);
test.getJvmArgumentProviders().add(directoryProvider);
test.doFirst("cleanup test ids", new CleanupTestIdsDirectory(testListDirectory));
});

Expand All @@ -372,6 +379,7 @@ public void registerTestBinary(Project project,

TaskProvider<BuildNativeImageTask> testImageBuilder = tasks.named(deriveTaskName(name, "native", "Compile"), BuildNativeImageTask.class, task -> {
task.setOnlyIf(t -> graalExtension.getTestSupport().get());
task.getTestListDirectory().set(testListDirectory);
testTask.get();
ConfigurableFileCollection testList = project.getObjects().fileCollection();
// Later this will be replaced by a dedicated task not requiring execution of tests
Expand Down Expand Up @@ -489,8 +497,6 @@ private static NativeImageOptions createTestOptions(GraalVMExtension graalExtens
runtimeArgs.add("--xml-output-dir");
runtimeArgs.add(project.getLayout().getBuildDirectory().dir("test-results/" + binaryName + "-native").map(d -> d.getAsFile().getAbsolutePath()));
testExtension.buildArgs("--features=org.graalvm.junit.platform.JUnitPlatformFeature");
// Set system property read indirectly by the JUnitPlatformFeature.
testExtension.getBuildArgs().add(project.provider(() -> "-Djunit.platform.listeners.uid.tracking.output.dir=" + testListDirectory.getAsFile().get().getAbsolutePath()));
ConfigurableFileCollection classpath = testExtension.getClasspath();
classpath.from(configs.getImageClasspathConfiguration());
classpath.from(sourceSet.getOutput().getClassesDirs());
Expand Down Expand Up @@ -553,4 +559,17 @@ public void execute(Task task) {
}
}

public abstract static class TrackingDirectorySystemPropertyProvider implements CommandLineArgumentProvider {
@InputFiles
@PathSensitive(PathSensitivity.RELATIVE)
public abstract DirectoryProperty getDirectory();

/**
* The arguments which will be provided to the process.
*/
@Override
public Iterable<String> asArguments() {
return Collections.singleton("-D" + JUNIT_PLATFORM_LISTENERS_UID_TRACKING_OUTPUT_DIR + "=" + getDirectory().getAsFile().get().getAbsolutePath());
}
}
}
Expand Up @@ -41,6 +41,7 @@

package org.graalvm.buildtools.gradle.tasks;

import org.graalvm.buildtools.gradle.NativeImagePlugin;
import org.graalvm.buildtools.gradle.dsl.NativeImageOptions;
import org.graalvm.buildtools.gradle.internal.GraalVMLogger;
import org.graalvm.buildtools.gradle.internal.NativeImageCommandLineProvider;
Expand All @@ -49,12 +50,14 @@
import org.gradle.api.file.Directory;
import org.gradle.api.file.DirectoryProperty;
import org.gradle.api.file.RegularFile;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.JavaBasePlugin;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.provider.ProviderFactory;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputDirectory;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.Internal;
import org.gradle.api.tasks.Nested;
Expand Down Expand Up @@ -92,6 +95,10 @@ public abstract class BuildNativeImageTask extends DefaultTask {
@OutputDirectory
public abstract DirectoryProperty getOutputDirectory();

@InputDirectory
@Optional
public abstract DirectoryProperty getTestListDirectory();

@Optional
@Input
protected Provider<String> getGraalVMHome() {
Expand All @@ -117,6 +124,9 @@ public Provider<RegularFile> getOutputFile() {
@Inject
protected abstract ProviderFactory getProviders();

@Inject
protected abstract ObjectFactory getObjects();

@InputFile
@Optional
public abstract RegularFileProperty getClasspathJar();
Expand Down Expand Up @@ -206,6 +216,11 @@ public void exec() {
if (outputDir.isDirectory() || outputDir.mkdirs()) {
getExecOperations().exec(spec -> {
spec.setWorkingDir(getWorkingDirectory());
if (getTestListDirectory().isPresent()) {
NativeImagePlugin.TrackingDirectorySystemPropertyProvider directoryProvider = getObjects().newInstance(NativeImagePlugin.TrackingDirectorySystemPropertyProvider.class);
directoryProvider.getDirectory().set(getTestListDirectory());
spec.getArgumentProviders().add(directoryProvider);
}
spec.args(args);
getService().get();
spec.setExecutable(executable);
Expand Down

0 comments on commit e0e4492

Please sign in to comment.