Skip to content

Commit 24ace52

Browse files
authored
Add rudimentary build info command (#717)
* Add rudimentary build info command * Translate task to Kotlin * Fix error
1 parent b255361 commit 24ace52

File tree

6 files changed

+135
-2
lines changed

6 files changed

+135
-2
lines changed

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import net.earthcomputer.clientcommands.buildscript.CheckLanguageFilesTask
2+
import net.earthcomputer.clientcommands.buildscript.GenerateBuildInfoTask
23

34
plugins {
45
id 'fabric-loom' version '1.9-SNAPSHOT'
@@ -101,6 +102,10 @@ jar {
101102
from("LICENSE")
102103
}
103104

105+
tasks.register('generateBuildInfo', GenerateBuildInfoTask) {
106+
outputFile = new File(temporaryDir, "build_info.json")
107+
}
108+
104109
processResources {
105110
inputs.property "version", project.version
106111
inputs.property "mcversion", project.minecraft_version_dependency
@@ -115,6 +120,8 @@ processResources {
115120
from(sourceSets.main.resources.srcDirs) {
116121
exclude "fabric.mod.json"
117122
}
123+
124+
from generateBuildInfo
118125
}
119126

120127
java {
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package net.earthcomputer.clientcommands.buildscript
2+
3+
import com.google.gson.Gson
4+
import com.google.gson.JsonObject
5+
import org.gradle.api.DefaultTask
6+
import org.gradle.api.file.RegularFileProperty
7+
import org.gradle.api.tasks.OutputFile
8+
import org.gradle.api.tasks.TaskAction
9+
import org.gradle.process.ExecOperations
10+
import java.io.ByteArrayOutputStream
11+
import java.nio.charset.StandardCharsets
12+
import javax.inject.Inject
13+
14+
abstract class GenerateBuildInfoTask : DefaultTask() {
15+
16+
companion object {
17+
private val GSON = Gson()
18+
}
19+
20+
@get:OutputFile
21+
abstract val outputFile: RegularFileProperty
22+
23+
@get:Inject
24+
protected abstract val execOperations: ExecOperations
25+
26+
init {
27+
// never reuse previous outputs
28+
this.outputs.upToDateWhen { false }
29+
}
30+
31+
@TaskAction
32+
protected fun run() {
33+
val version = this.project.version.toString()
34+
val branch = this.executeCommand("git", "branch", "--show-current")
35+
val shortCommitHash = this.executeCommand("git", "rev-parse", "--short", "HEAD")
36+
val commitHash = this.executeCommand("git", "rev-parse", "HEAD")
37+
38+
val jsonObject = JsonObject().apply {
39+
addProperty("version", version)
40+
addProperty("branch", branch)
41+
addProperty("shortCommitHash", shortCommitHash)
42+
addProperty("commitHash", commitHash)
43+
}
44+
45+
outputFile.asFile.get().writer().use {
46+
GSON.toJson(jsonObject, it)
47+
}
48+
}
49+
50+
private fun executeCommand(vararg args: Any): String {
51+
val outputBytes = ByteArrayOutputStream()
52+
this.execOperations.exec {
53+
standardOutput = outputBytes
54+
commandLine(*args)
55+
}.rethrowFailure()
56+
return outputBytes.toString(StandardCharsets.UTF_8).trim()
57+
}
58+
}

src/main/java/net/earthcomputer/clientcommands/ClientCommands.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
import net.earthcomputer.clientcommands.event.ClientConnectionEvents;
1212
import net.earthcomputer.clientcommands.features.CommandExecutionCustomPayload;
1313
import net.earthcomputer.clientcommands.features.FishingCracker;
14-
import net.earthcomputer.clientcommands.features.ServerBrandManager;
15-
import net.earthcomputer.clientcommands.util.MappingsHelper;
1614
import net.earthcomputer.clientcommands.features.PlayerRandCracker;
1715
import net.earthcomputer.clientcommands.features.Relogger;
16+
import net.earthcomputer.clientcommands.features.ServerBrandManager;
17+
import net.earthcomputer.clientcommands.util.MappingsHelper;
1818
import net.fabricmc.api.ClientModInitializer;
1919
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
2020
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
@@ -123,6 +123,7 @@ public static void registerCommands(CommandDispatcher<FabricClientCommandSource>
123123
AreaStatsCommand.register(dispatcher, context);
124124
AuditMixinsCommand.register(dispatcher);
125125
BookCommand.register(dispatcher);
126+
BuildInfoCommand.register(dispatcher);
126127
CalcCommand.register(dispatcher);
127128
CalcStackCommand.register(dispatcher, context);
128129
CDebugCommand.register(dispatcher);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.earthcomputer.clientcommands.command;
2+
3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.CommandDispatcher;
5+
import net.earthcomputer.clientcommands.util.BuildInfo;
6+
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource;
7+
import net.minecraft.network.chat.Component;
8+
9+
import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.*;
10+
11+
public class BuildInfoCommand {
12+
public static void register(CommandDispatcher<FabricClientCommandSource> dispatcher) {
13+
dispatcher.register(literal("cbuildinfo")
14+
.executes(ctx -> buildInfo(ctx.getSource())));
15+
}
16+
17+
private static int buildInfo(FabricClientCommandSource source) {
18+
source.sendFeedback(Component.translatable("commands.cbuildinfo.success", BuildInfo.VERSION, BuildInfo.BRANCH, BuildInfo.SHORT_COMMIT_HASH));
19+
return Command.SINGLE_SUCCESS;
20+
}
21+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package net.earthcomputer.clientcommands.util;
2+
3+
import com.google.gson.JsonObject;
4+
import com.google.gson.JsonParser;
5+
import com.mojang.logging.LogUtils;
6+
import net.fabricmc.loader.api.FabricLoader;
7+
import org.slf4j.Logger;
8+
9+
import java.io.BufferedReader;
10+
import java.io.IOException;
11+
import java.nio.file.Files;
12+
13+
public final class BuildInfo {
14+
private BuildInfo() {
15+
}
16+
17+
private static final Logger LOGGER = LogUtils.getLogger();
18+
19+
public static final String VERSION;
20+
public static final String BRANCH;
21+
public static final String SHORT_COMMIT_HASH;
22+
public static final String COMMIT_HASH;
23+
24+
static {
25+
String version, branch, shortCommitHash, commitHash;
26+
version = branch = shortCommitHash = commitHash = "unknown";
27+
try (BufferedReader reader = Files.newBufferedReader(FabricLoader.getInstance()
28+
.getModContainer("clientcommands").orElseThrow()
29+
.findPath("build_info.json").orElseThrow())
30+
) {
31+
JsonObject object = JsonParser.parseReader(reader).getAsJsonObject();
32+
version = object.get("version").getAsString();
33+
branch = object.get("branch").getAsString();
34+
shortCommitHash = object.get("shortCommitHash").getAsString();
35+
commitHash = object.get("commitHash").getAsString();
36+
} catch (RuntimeException | IOException e) {
37+
LOGGER.error("Error while reading build_info.json", e);
38+
}
39+
VERSION = version;
40+
BRANCH = branch;
41+
SHORT_COMMIT_HASH = shortCommitHash;
42+
COMMIT_HASH = commitHash;
43+
}
44+
}

src/main/resources/assets/clientcommands/lang/en_us.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@
4040
"commands.cbook.commandException": "You are not holding a book",
4141
"commands.cbook.success": "Successfully edited book",
4242

43+
"commands.cbuildinfo.success": "Running clientcommands on version %s (%s@{%s})",
44+
4345
"commands.ccalc.expected": "Expected %s",
4446
"commands.ccalc.invalidArgumentCount": "Function \"%s\" cannot take %s arguments",
4547
"commands.ccalc.parse": "Parsed expression: %s",

0 commit comments

Comments
 (0)