Skip to content

Commit

Permalink
Add opt-in github annotations to auto test server
Browse files Browse the repository at this point in the history
  • Loading branch information
misode committed Jan 25, 2024
1 parent bf03d5c commit 10704c3
Show file tree
Hide file tree
Showing 9 changed files with 34 additions and 21 deletions.
9 changes: 8 additions & 1 deletion src/main/java/io/github/misode/packtest/LoadDiagnostics.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
package io.github.misode.packtest;

import org.slf4j.Logger;

import java.util.ArrayList;
import java.util.List;

public class LoadDiagnostics {
private static final List<Diagnostic> DIAGNOSTICS = new ArrayList<>();

public static void error(String resource, String id, String message) {
public static void error(Logger logger, String resource, String id, String message) {
DIAGNOSTICS.add(new Diagnostic(resource, id, message));
String annotation = "";
if (PackTest.isAnnotationsEnabled()) {
annotation = "\n::error title=Failed to load " + resource + " " + id + "::" + message;
}
logger.info(PackTest.wrapError("Failed to load {} {} - {}") + annotation, resource, id, message);
}

public static List<Diagnostic> loadErrors() {
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/io/github/misode/packtest/PackTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ public static boolean isAutoColoringEnabled() {
return isAutoEnabled() && !"false".equals(System.getProperty("packtest.auto.coloring"));
}

public static boolean isAnnotationsEnabled() {
return isAutoEnabled() && System.getProperty("packtest.auto.annotations") != null;
}

@Override
public void onInitialize() {
CommandRegistrationCallback.EVENT.register((dispatcher, buildContext, environment) -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

/**
* Add an idle method that includes the line number in the failure message
*/
@Mixin(GameTestSequence.class)
public abstract class GameTestSequenceMixin implements PackTestSequence {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,14 @@ private void onTestFailed(GameTestInfo info, CallbackInfo ci) {
String lineNumber = info.getError() instanceof LineNumberException err
? " on line " + err.getLineNumber()
: "";
String annotation = "";
if (PackTest.isAnnotationsEnabled() && info.isRequired()) {
annotation = "\n::error title=Test " + info.getTestName() + " failed" + lineNumber + "!::" + Util.describeError(info.getError());
}
if (info.isRequired()) {
LOGGER.error(PackTest.wrapError("{} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError()));
LOGGER.error(PackTest.wrapError("{} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError()));
} else {
LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError()));
LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError()));
}
ci.cancel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.misode.packtest.LoadDiagnostics;
import io.github.misode.packtest.PackTest;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.storage.loot.LootDataType;
import org.slf4j.Logger;
Expand All @@ -24,8 +23,7 @@ public class LootDataTypeMixin {

@WrapOperation(method = "method_53267", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;[Ljava/lang/Object;)V", remap = false))
private void deserialize(Logger logger, String message, Object[] args, Operation<Void> original) {
String type = ((String)args[0]).substring(0, ((String)args[0]).length() - 1);
LoadDiagnostics.error(type, ((ResourceLocation)args[1]).toString(), (String)args[2]);
LOGGER.error(PackTest.wrapError("Couldn't parse {} {} - {}"), type, args[1], args[2]);
String type = ((String)args[0]).replaceAll("_", " ").replaceFirst("s$", "");
LoadDiagnostics.error(LOGGER, type, ((ResourceLocation)args[1]).toString(), (String)args[2]);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.misode.packtest.LoadDiagnostics;
import io.github.misode.packtest.PackTest;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.crafting.RecipeManager;
import org.slf4j.Logger;
Expand All @@ -24,7 +23,6 @@ public class RecipeManagerMixin {
@WrapOperation(method = "apply(Ljava/util/Map;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
private void apply(Logger logger, String message, Object id, Object e, Operation<Void> original) {
String error = ((Exception)e).getMessage();
LoadDiagnostics.error("recipe", ((ResourceLocation)id).toString(), error);
LOGGER.error(PackTest.wrapError(message + " - {}"), id, error);
LoadDiagnostics.error(LOGGER, "recipe", ((ResourceLocation)id).toString(), error);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,25 @@
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.misode.packtest.LoadDiagnostics;
import io.github.misode.packtest.PackTest;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.ServerAdvancementManager;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;

/**
* Catch advancement errors.
*/
@Mixin(ServerAdvancementManager.class)
public class ServerAdvancementsManagerMixin {
@Shadow
@Final
private static Logger LOGGER;

@WrapOperation(method = "method_20723", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
private void apply(Logger logger, String message, Object id, Object error, Operation<Void> original) {
LoadDiagnostics.error("advancement", ((ResourceLocation)id).toString(), (String)error);
original.call(logger, PackTest.wrapError(message), id, error);
LoadDiagnostics.error(LOGGER, "advancement", ((ResourceLocation)id).toString(), (String)error);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import io.github.misode.packtest.LoadDiagnostics;
import io.github.misode.packtest.PackTest;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.ServerFunctionLibrary;
import org.slf4j.Logger;
Expand All @@ -24,7 +23,6 @@ public class ServerFunctionLibraryMixin {
@WrapOperation(method = "method_29457", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
private static void catchFunctionError(Logger logger, String message, Object id, Object e, Operation<Void> original) {
String error = ((Exception)e).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", "");
LoadDiagnostics.error("function", ((ResourceLocation)id).toString(), error);
LOGGER.error(PackTest.wrapError(message + " - {}"), id, error);
LoadDiagnostics.error(LOGGER, "function", ((ResourceLocation)id).toString(), error);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.serialization.DataResult;
import io.github.misode.packtest.LoadDiagnostics;
import io.github.misode.packtest.PackTest;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagFile;
import net.minecraft.tags.TagLoader;
Expand Down Expand Up @@ -35,13 +34,11 @@ private static Object removeDuplicateError(DataResult<Object> dataResult, boolea
private static void catchTagError(Logger logger, String message, Object[] args, Operation<Void> original) {
String error = ((Exception)args[3]).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", "");
String type = ((ResourceLocation)args[1]).getPath().replaceFirst("tags/", "").replaceFirst("s?/.*", "");
LoadDiagnostics.error(type + " tag", ((ResourceLocation)args[0]).toString(), error);
LOGGER.error(PackTest.wrapError("Couldn't read {} tag {} - {}"), type, args[0], error);
LoadDiagnostics.error(LOGGER, type + " tag", ((ResourceLocation)args[0]).toString(), error);
}

@WrapOperation(method = "method_33175", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V", remap = false))
private static void catchTagReferenceError(Logger logger, String message, Object id, Object refs, Operation<Void> original) {
LoadDiagnostics.error("tag", ((ResourceLocation)id).toString(), "Missing references: " + refs);
original.call(logger, PackTest.wrapError(message), id, refs);
LoadDiagnostics.error(LOGGER, "tag", ((ResourceLocation)id).toString(), "Missing references: " + refs);
}
}

0 comments on commit 10704c3

Please sign in to comment.