Skip to content

Commit 10704c3

Browse files
committed
Add opt-in github annotations to auto test server
1 parent bf03d5c commit 10704c3

9 files changed

Lines changed: 34 additions & 21 deletions

src/main/java/io/github/misode/packtest/LoadDiagnostics.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package io.github.misode.packtest;
22

3+
import org.slf4j.Logger;
4+
35
import java.util.ArrayList;
46
import java.util.List;
57

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

9-
public static void error(String resource, String id, String message) {
11+
public static void error(Logger logger, String resource, String id, String message) {
1012
DIAGNOSTICS.add(new Diagnostic(resource, id, message));
13+
String annotation = "";
14+
if (PackTest.isAnnotationsEnabled()) {
15+
annotation = "\n::error title=Failed to load " + resource + " " + id + "::" + message;
16+
}
17+
logger.info(PackTest.wrapError("Failed to load {} {} - {}") + annotation, resource, id, message);
1118
}
1219

1320
public static List<Diagnostic> loadErrors() {

src/main/java/io/github/misode/packtest/PackTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public static boolean isAutoColoringEnabled() {
2323
return isAutoEnabled() && !"false".equals(System.getProperty("packtest.auto.coloring"));
2424
}
2525

26+
public static boolean isAnnotationsEnabled() {
27+
return isAutoEnabled() && System.getProperty("packtest.auto.annotations") != null;
28+
}
29+
2630
@Override
2731
public void onInitialize() {
2832
CommandRegistrationCallback.EVENT.register((dispatcher, buildContext, environment) -> {

src/main/java/io/github/misode/packtest/mixin/GameTestSequenceMixin.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
import org.spongepowered.asm.mixin.Mixin;
1010
import org.spongepowered.asm.mixin.Shadow;
1111

12+
/**
13+
* Add an idle method that includes the line number in the failure message
14+
*/
1215
@Mixin(GameTestSequence.class)
1316
public abstract class GameTestSequenceMixin implements PackTestSequence {
1417

src/main/java/io/github/misode/packtest/mixin/LogTestReporterMixin.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,14 @@ private void onTestFailed(GameTestInfo info, CallbackInfo ci) {
3232
String lineNumber = info.getError() instanceof LineNumberException err
3333
? " on line " + err.getLineNumber()
3434
: "";
35+
String annotation = "";
36+
if (PackTest.isAnnotationsEnabled() && info.isRequired()) {
37+
annotation = "\n::error title=Test " + info.getTestName() + " failed" + lineNumber + "!::" + Util.describeError(info.getError());
38+
}
3539
if (info.isRequired()) {
36-
LOGGER.error(PackTest.wrapError("{} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError()));
40+
LOGGER.error(PackTest.wrapError("{} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError()));
3741
} else {
38-
LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}"), info.getTestName(), lineNumber, Util.describeError(info.getError()));
42+
LOGGER.warn(PackTest.wrapWarning("(optional) {} failed{}! {}") + annotation, info.getTestName(), lineNumber, Util.describeError(info.getError()));
3943
}
4044
ci.cancel();
4145
}

src/main/java/io/github/misode/packtest/mixin/LootDataTypeMixin.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import io.github.misode.packtest.LoadDiagnostics;
6-
import io.github.misode.packtest.PackTest;
76
import net.minecraft.resources.ResourceLocation;
87
import net.minecraft.world.level.storage.loot.LootDataType;
98
import org.slf4j.Logger;
@@ -24,8 +23,7 @@ public class LootDataTypeMixin {
2423

2524
@WrapOperation(method = "method_53267", at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;error(Ljava/lang/String;[Ljava/lang/Object;)V", remap = false))
2625
private void deserialize(Logger logger, String message, Object[] args, Operation<Void> original) {
27-
String type = ((String)args[0]).substring(0, ((String)args[0]).length() - 1);
28-
LoadDiagnostics.error(type, ((ResourceLocation)args[1]).toString(), (String)args[2]);
29-
LOGGER.error(PackTest.wrapError("Couldn't parse {} {} - {}"), type, args[1], args[2]);
26+
String type = ((String)args[0]).replaceAll("_", " ").replaceFirst("s$", "");
27+
LoadDiagnostics.error(LOGGER, type, ((ResourceLocation)args[1]).toString(), (String)args[2]);
3028
}
3129
}

src/main/java/io/github/misode/packtest/mixin/RecipeManagerMixin.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import io.github.misode.packtest.LoadDiagnostics;
6-
import io.github.misode.packtest.PackTest;
76
import net.minecraft.resources.ResourceLocation;
87
import net.minecraft.world.item.crafting.RecipeManager;
98
import org.slf4j.Logger;
@@ -24,7 +23,6 @@ public class RecipeManagerMixin {
2423
@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))
2524
private void apply(Logger logger, String message, Object id, Object e, Operation<Void> original) {
2625
String error = ((Exception)e).getMessage();
27-
LoadDiagnostics.error("recipe", ((ResourceLocation)id).toString(), error);
28-
LOGGER.error(PackTest.wrapError(message + " - {}"), id, error);
26+
LoadDiagnostics.error(LOGGER, "recipe", ((ResourceLocation)id).toString(), error);
2927
}
3028
}

src/main/java/io/github/misode/packtest/mixin/ServerAdvancementsManagerMixin.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,25 @@
33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import io.github.misode.packtest.LoadDiagnostics;
6-
import io.github.misode.packtest.PackTest;
76
import net.minecraft.resources.ResourceLocation;
87
import net.minecraft.server.ServerAdvancementManager;
98
import org.slf4j.Logger;
9+
import org.spongepowered.asm.mixin.Final;
1010
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
1112
import org.spongepowered.asm.mixin.injection.At;
1213

1314
/**
1415
* Catch advancement errors.
1516
*/
1617
@Mixin(ServerAdvancementManager.class)
1718
public class ServerAdvancementsManagerMixin {
19+
@Shadow
20+
@Final
21+
private static Logger LOGGER;
22+
1823
@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))
1924
private void apply(Logger logger, String message, Object id, Object error, Operation<Void> original) {
20-
LoadDiagnostics.error("advancement", ((ResourceLocation)id).toString(), (String)error);
21-
original.call(logger, PackTest.wrapError(message), id, error);
25+
LoadDiagnostics.error(LOGGER, "advancement", ((ResourceLocation)id).toString(), (String)error);
2226
}
2327
}

src/main/java/io/github/misode/packtest/mixin/ServerFunctionLibraryMixin.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import io.github.misode.packtest.LoadDiagnostics;
6-
import io.github.misode.packtest.PackTest;
76
import net.minecraft.resources.ResourceLocation;
87
import net.minecraft.server.ServerFunctionLibrary;
98
import org.slf4j.Logger;
@@ -24,7 +23,6 @@ public class ServerFunctionLibraryMixin {
2423
@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))
2524
private static void catchFunctionError(Logger logger, String message, Object id, Object e, Operation<Void> original) {
2625
String error = ((Exception)e).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", "");
27-
LoadDiagnostics.error("function", ((ResourceLocation)id).toString(), error);
28-
LOGGER.error(PackTest.wrapError(message + " - {}"), id, error);
26+
LoadDiagnostics.error(LOGGER, "function", ((ResourceLocation)id).toString(), error);
2927
}
3028
}

src/main/java/io/github/misode/packtest/mixin/TagLoaderMixin.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
55
import com.mojang.serialization.DataResult;
66
import io.github.misode.packtest.LoadDiagnostics;
7-
import io.github.misode.packtest.PackTest;
87
import net.minecraft.resources.ResourceLocation;
98
import net.minecraft.tags.TagFile;
109
import net.minecraft.tags.TagLoader;
@@ -35,13 +34,11 @@ private static Object removeDuplicateError(DataResult<Object> dataResult, boolea
3534
private static void catchTagError(Logger logger, String message, Object[] args, Operation<Void> original) {
3635
String error = ((Exception)args[3]).getMessage().replaceFirst("^[A-Za-z0-9.]+Exception: ", "");
3736
String type = ((ResourceLocation)args[1]).getPath().replaceFirst("tags/", "").replaceFirst("s?/.*", "");
38-
LoadDiagnostics.error(type + " tag", ((ResourceLocation)args[0]).toString(), error);
39-
LOGGER.error(PackTest.wrapError("Couldn't read {} tag {} - {}"), type, args[0], error);
37+
LoadDiagnostics.error(LOGGER, type + " tag", ((ResourceLocation)args[0]).toString(), error);
4038
}
4139

4240
@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))
4341
private static void catchTagReferenceError(Logger logger, String message, Object id, Object refs, Operation<Void> original) {
44-
LoadDiagnostics.error("tag", ((ResourceLocation)id).toString(), "Missing references: " + refs);
45-
original.call(logger, PackTest.wrapError(message), id, refs);
42+
LoadDiagnostics.error(LOGGER, "tag", ((ResourceLocation)id).toString(), "Missing references: " + refs);
4643
}
4744
}

0 commit comments

Comments
 (0)