Skip to content

Commit

Permalink
Implement the core functionality and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
marchermans committed May 28, 2024
1 parent 0480ca7 commit 13a2e8b
Show file tree
Hide file tree
Showing 40 changed files with 1,842 additions and 122 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import net.neoforged.gradle.common.runtime.definition.CommonRuntimeDefinition;
import net.neoforged.gradle.common.runtime.extensions.RuntimesExtension;
import net.neoforged.gradle.common.runtime.naming.OfficialNamingChannelConfigurator;
import net.neoforged.gradle.common.tasks.CleanCache;
import net.neoforged.gradle.common.tasks.DisplayMappingsLicenseTask;
import net.neoforged.gradle.common.util.ProjectUtils;
import net.neoforged.gradle.common.util.SourceSetUtils;
Expand Down Expand Up @@ -59,6 +60,7 @@ public class CommonProjectPlugin implements Plugin<Project> {

public static final String ASSETS_SERVICE = "ng_assets";
public static final String LIBRARIES_SERVICE = "ng_libraries";
public static final String EXECUTE_SERVICE = "ng_execute";
public static final String ACCESS_TRANSFORMER_ELEMENTS_CONFIGURATION = "accessTransformerElements";
public static final String ACCESS_TRANSFORMER_API_CONFIGURATION = "accessTransformerApi";
public static final String ACCESS_TRANSFORMER_CONFIGURATION = "accessTransformer";
Expand All @@ -72,8 +74,9 @@ public void apply(Project project) {
project.getPluginManager().apply(JavaPlugin.class);

//Register the services
CentralCacheService.register(project, ASSETS_SERVICE);
CentralCacheService.register(project, LIBRARIES_SERVICE);
CentralCacheService.register(project, ASSETS_SERVICE, true);
CentralCacheService.register(project, LIBRARIES_SERVICE, true);
CentralCacheService.register(project, EXECUTE_SERVICE, false);

// Apply both the idea and eclipse IDE plugins
project.getPluginManager().apply(IdeaPlugin.class);
Expand Down Expand Up @@ -136,8 +139,11 @@ public void apply(Project project) {

IdeRunIntegrationManager.getInstance().setup(project);

final TaskProvider<?> cleanCache = project.getTasks().register("cleanCache", CleanCache.class);

project.getTasks().named("clean", Delete.class, delete -> {
delete.delete(configurationData.getLocation());
delete.dependsOn(cleanCache);
});

//Needs to be before after evaluate
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package net.neoforged.gradle.common.runtime.naming.tasks;

import com.google.common.collect.Lists;
import net.neoforged.gradle.common.runtime.tasks.Execute;
import net.neoforged.gradle.common.runtime.tasks.DefaultExecute;
import net.neoforged.gradle.common.util.ToolUtilities;
import net.neoforged.gradle.dsl.common.extensions.MinecraftArtifactCache;
import net.neoforged.gradle.dsl.common.tasks.WithOutput;
import net.neoforged.gradle.dsl.common.util.CacheableMinecraftVersion;
import net.neoforged.gradle.dsl.common.util.Constants;
import net.neoforged.gradle.dsl.common.util.DistributionType;
import net.neoforged.gradle.util.RenameConstants;
Expand All @@ -17,11 +16,10 @@
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;

import java.io.File;
import java.util.List;

@CacheableTask
public abstract class ApplyOfficialMappingsToCompiledJar extends Execute implements WithOutput {
public abstract class ApplyOfficialMappingsToCompiledJar extends DefaultExecute implements WithOutput {

public ApplyOfficialMappingsToCompiledJar() {
super();
Expand All @@ -46,11 +44,6 @@ public ApplyOfficialMappingsToCompiledJar() {
getShouldReverseMappings().convention(true);
}

@Override
public void execute() throws Throwable {
super.execute();
}

@Input
public abstract Property<String> getMinecraftVersion();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package net.neoforged.gradle.common.runtime.naming.tasks;

import com.google.common.collect.Lists;
import net.neoforged.gradle.common.runtime.tasks.Execute;
import net.neoforged.gradle.common.runtime.tasks.DefaultExecute;
import net.neoforged.gradle.common.util.ToolUtilities;
import net.neoforged.gradle.dsl.common.extensions.MinecraftArtifactCache;
import net.neoforged.gradle.dsl.common.util.CacheableMinecraftVersion;
import net.neoforged.gradle.dsl.common.util.Constants;
import net.neoforged.gradle.dsl.common.util.DistributionType;
import org.gradle.api.file.RegularFileProperty;
Expand All @@ -15,10 +14,8 @@
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;

import java.io.File;

@CacheableTask
public abstract class UnapplyOfficialMappingsToCompiledJar extends Execute {
public abstract class UnapplyOfficialMappingsToCompiledJar extends DefaultExecute {

public UnapplyOfficialMappingsToCompiledJar() {
getExecutingJar().set(ToolUtilities.resolveTool(getProject(), Constants.SPECIALSOURCE));
Expand All @@ -29,11 +26,6 @@ public UnapplyOfficialMappingsToCompiledJar() {
getArguments().putRegularFile("mappings", getMappings());
}

@Override
public void execute() throws Throwable {
super.execute();
}

@Input
public abstract Property<String> getMinecraftVersion();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import java.util.List;

@CacheableTask
public abstract class BinaryAccessTransformer extends Execute {
public abstract class BinaryAccessTransformer extends DefaultExecute {

public BinaryAccessTransformer() {
super();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
package net.neoforged.gradle.common.runtime.tasks;

import net.neoforged.gradle.common.CommonProjectPlugin;
import net.neoforged.gradle.common.caching.CentralCacheService;
import net.neoforged.gradle.dsl.common.tasks.Execute;
import net.neoforged.gradle.util.TransformerUtils;
import org.gradle.api.provider.ListProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.services.ServiceReference;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.TaskAction;
Expand All @@ -13,11 +17,11 @@
import java.util.jar.JarFile;

@CacheableTask
public abstract class Execute extends DefaultRuntime implements net.neoforged.gradle.dsl.common.tasks.Execute {
public abstract class DefaultExecute extends DefaultRuntime implements Execute {

public Execute() {
public DefaultExecute() {
super();

getLogFileName().convention(getArguments().getOrDefault("log", getProviderFactory().provider(() -> "log.log")).orElse("log.log"));
getLogFile().convention(getOutputDirectory().flatMap(d -> getLogFileName().map(d::file)));

Expand All @@ -33,10 +37,12 @@ public Execute() {
getMultiRuntimeArguments().convention(getMultiArguments().AsMap());
}

@ServiceReference(CommonProjectPlugin.EXECUTE_SERVICE)
public abstract Property<CentralCacheService> getCacheService();

@TaskAction
@Override
public void execute() throws Throwable {
net.neoforged.gradle.dsl.common.tasks.Execute.super.execute();
getCacheService().get().doCached(this, this::doExecute, getOutput());
}

@Input
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package net.neoforged.gradle.common.runtime.tasks;

import net.neoforged.gradle.common.CommonProjectPlugin;
import net.neoforged.gradle.common.caching.CentralCacheService;
import net.neoforged.gradle.dsl.common.tasks.NeoGradleBase;
import net.neoforged.gradle.dsl.common.tasks.WithOutput;
import net.neoforged.gradle.dsl.common.tasks.WithWorkspace;
import net.neoforged.gradle.util.ZipBuildingFileTreeVisitor;
import org.gradle.api.file.FileTree;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.services.ServiceReference;
import org.gradle.api.tasks.CacheableTask;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.PathSensitive;
Expand All @@ -24,8 +28,15 @@ public GenerateExtraJar() {
getOutputFileName().set("client-extra.jar");
}

@ServiceReference(CommonProjectPlugin.EXECUTE_SERVICE)
public abstract Property<CentralCacheService> getCacheService();

@TaskAction
public void doTask() throws Throwable {
public void run() throws Throwable {
getCacheService().get().doCached(this, this::doRun, getOutput());
}

public File doRun() throws Exception {
final File originalJar = getOriginalJar().get().getAsFile();
final File outputJar = ensureFileWorkspaceReady(getOutput());

Expand All @@ -38,6 +49,8 @@ public void doTask() throws Throwable {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outputJar))) {
filteredInput.visit(new ZipBuildingFileTreeVisitor(zos));
}

return outputJar;
}

@InputFile
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.google.common.collect.Lists;
import net.neoforged.gradle.common.util.ToolUtilities;
import net.neoforged.gradle.dsl.common.extensions.subsystems.Subsystems;
import net.neoforged.gradle.dsl.common.util.Constants;
import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.plugins.JavaPluginExtension;
Expand All @@ -13,13 +12,12 @@
import org.gradle.api.tasks.PathSensitive;
import org.gradle.api.tasks.PathSensitivity;
import org.gradle.api.tasks.SkipWhenEmpty;
import org.gradle.jvm.toolchain.JavaLanguageVersion;

import java.io.File;
import java.util.List;

@CacheableTask
public abstract class SourceAccessTransformer extends Execute {
public abstract class SourceAccessTransformer extends DefaultExecute {

public SourceAccessTransformer() {
super();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package net.neoforged.gradle.common.tasks;

import net.neoforged.gradle.common.CommonProjectPlugin;
import net.neoforged.gradle.common.caching.CentralCacheService;
import org.gradle.api.DefaultTask;
import org.gradle.api.provider.Property;
import org.gradle.api.services.ServiceReference;
import org.gradle.api.tasks.TaskAction;

public abstract class CleanCache extends DefaultTask {


@ServiceReference(CommonProjectPlugin.EXECUTE_SERVICE)
public abstract Property<CentralCacheService> getCacheService();

public CleanCache() {
setGroup("neoforged");
setDescription("Cleans the cache directory");
}

@TaskAction
public void cleanCache() {
CentralCacheService cacheService = getCacheService().get();
cacheService.cleanCache(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ protected void downloadJsonTo(String url) {
setDidWork(didWork);
}

protected void doDownloadVersionDownloadToCache(final String artifact, final String potentialError, File versionManifest) {
protected File doDownloadVersionDownloadToCache(final String artifact, final String potentialError, File versionManifest) {
JsonObject json = SerializationUtils.fromJson(versionManifest, JsonObject.class);

final JsonObject artifactInfo = json.getAsJsonObject("downloads").getAsJsonObject(artifact);
Expand All @@ -62,11 +62,12 @@ protected void doDownloadVersionDownloadToCache(final String artifact, final Str
if (output.exists()) {
final String fileHash = HashFunction.SHA1.hash(output);
if (fileHash.equals(hash)) {
return;
return output;
}
}

FileDownloadingUtils.downloadTo(getIsOffline().get(), info, output);
return output;
} catch (IOException e) {
throw new RuntimeException(potentialError, e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package net.neoforged.gradle.common.tasks;

import net.neoforged.gradle.common.CommonProjectPlugin;
import net.neoforged.gradle.common.caching.CentralCacheService;
import net.neoforged.gradle.common.util.MinecraftArtifactType;
import net.neoforged.gradle.dsl.common.util.DistributionType;
import org.gradle.api.file.RegularFileProperty;
import org.gradle.api.provider.Property;
import org.gradle.api.services.ServiceReference;
import org.gradle.api.tasks.*;

@CacheableTask
Expand All @@ -12,13 +15,20 @@ public abstract class MinecraftArtifactFileCacheProvider extends FileCacheProvid
public MinecraftArtifactFileCacheProvider() { }

@TaskAction
public void doRun() throws Exception {
doDownloadVersionDownloadToCache(
getArtifactType().get().createIdentifier(getDistributionType().get()),
String.format("Failed to download game artifact %s for %s", getArtifactType().get(), getDistributionType().get()),
getManifest().get().getAsFile()
public void doRun() throws Throwable {
getCentralCacheService().get().doCached(
this,
() -> doDownloadVersionDownloadToCache(
getArtifactType().get().createIdentifier(getDistributionType().get()),
String.format("Failed to download game artifact %s for %s", getArtifactType().get(), getDistributionType().get()),
getManifest().get().getAsFile()
),
getOutput()
);
}

@ServiceReference(CommonProjectPlugin.EXECUTE_SERVICE)
public abstract Property<CentralCacheService> getCentralCacheService();

@Input
public abstract Property<MinecraftArtifactType> getArtifactType();
Expand Down
Loading

0 comments on commit 13a2e8b

Please sign in to comment.