Skip to content

Commit 55e90b6

Browse files
Show build number in startup log, fix Geyser version command(#4336)
* Version check command/startup log shows build number * Add development build warning * Fix `/geyser version` command * Hack around outdated language module
1 parent e6bf3ff commit 55e90b6

File tree

4 files changed

+60
-31
lines changed

4 files changed

+60
-31
lines changed

core/build.gradle.kts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ tasks.processResources {
7575
expand(
7676
"branch" to info.branch,
7777
"buildNumber" to info.buildNumber,
78-
"projectVersion" to project.version,
78+
"projectVersion" to info.version,
7979
"commit" to info.commit,
8080
"commitAbbrev" to info.commitAbbrev,
8181
"commitMessage" to info.commitMessage,
@@ -89,20 +89,25 @@ sourceSets {
8989
blossom {
9090
val info = GitInfo()
9191
javaSources {
92-
property("version", "${project.version} (${info.gitVersion})")
92+
property("version", "${info.version} (${info.gitVersion})")
9393
property("gitVersion", info.gitVersion)
9494
property("buildNumber", info.buildNumber.toString())
9595
property("branch", info.branch)
9696
property("commit", info.commit)
9797
property("repository", info.repository)
98+
property("devVersion", info.isDev.toString())
9899
}
99100
}
100101
}
101102
}
102103

103-
fun Project.buildNumber(): Int =
104+
fun buildNumber(): Int =
104105
(System.getenv("BUILD_NUMBER"))?.let { Integer.parseInt(it) } ?: -1
105106

107+
fun isDevBuild(branch: String, repository: String): Boolean {
108+
return branch != "master" || repository.equals("https://github.com/GeyserMC/Geyser", ignoreCase = true).not()
109+
}
110+
106111
inner class GitInfo {
107112
val branch: String
108113
val commit: String
@@ -115,22 +120,25 @@ inner class GitInfo {
115120
val commitMessage: String
116121
val repository: String
117122

123+
val isDev: Boolean
124+
118125
init {
119-
// On Jenkins, a detached head is checked out, so indra cannot determine the branch.
120-
// Fortunately, this environment variable is available.
121-
branch = indraGit.branchName() ?: System.getenv("BRANCH_NAME") ?: "DEV"
126+
branch = indraGit.branchName() ?: "DEV"
122127

123128
val commit = indraGit.commit()
124129
this.commit = commit?.name ?: "0".repeat(40)
125130
commitAbbrev = commit?.name?.substring(0, 7) ?: "0".repeat(7)
126131

127132
gitVersion = "git-${branch}-${commitAbbrev}"
128-
version = "${project.version} ($gitVersion)"
129-
buildNumber = buildNumber()
130133

131134
val git = indraGit.git()
132135
commitMessage = git?.commit()?.message ?: ""
133136
repository = git?.repository?.config?.getString("remote", "origin", "url") ?: ""
137+
138+
buildNumber = buildNumber()
139+
isDev = isDevBuild(branch, repository)
140+
val projectVersion = if (isDev) project.version else project.version.toString().replace("SNAPSHOT", "b${buildNumber}")
141+
version = "$projectVersion ($gitVersion)"
134142
}
135143
}
136144

core/src/main/java-templates/org/geysermc/geyser/BuildData.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ public class BuildData {
3434
public static final String BRANCH = "{{ branch }}";
3535
public static final String COMMIT = "{{ commit }}";
3636
public static final String REPOSITORY = "{{ repository }}";
37+
private static final String DEV = "{{ devVersion }}";
38+
39+
public static boolean isDevBuild() {
40+
return Boolean.parseBoolean(DEV);
41+
}
3742
}

core/src/main/java/org/geysermc/geyser/GeyserImpl.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public class GeyserImpl implements GeyserApi {
122122
public static final String BRANCH = BuildData.BRANCH;
123123
public static final String COMMIT = BuildData.COMMIT;
124124
public static final String REPOSITORY = BuildData.REPOSITORY;
125+
public static final boolean IS_DEV = BuildData.isDevBuild();
125126

126127
/**
127128
* Oauth client ID for Microsoft authentication
@@ -207,6 +208,12 @@ public void initialize() {
207208
logger.info("");
208209
logger.info(GeyserLocale.getLocaleStringLog("geyser.core.load", NAME, VERSION));
209210
logger.info("");
211+
if (IS_DEV) {
212+
// TODO cloud use language string
213+
//logger.info(GeyserLocale.getLocaleStringLog("geyser.core.dev_build", "https://discord.gg/geysermc"));
214+
logger.info("You are running a development build of Geyser! Please report any bugs you find on our Discord server: %s".formatted("https://discord.gg/geysermc"));
215+
logger.info("");
216+
}
210217
logger.info("******************************************");
211218

212219
/* Initialize registries */
@@ -684,6 +691,7 @@ public void reloadGeyser() {
684691
*
685692
* @return true if the version number is not 'DEV'.
686693
*/
694+
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
687695
public boolean isProductionEnvironment() {
688696
// First is if Blossom runs, second is if Blossom doesn't run
689697
//noinspection ConstantConditions,MismatchedStringCase - changes in production

core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525

2626
package org.geysermc.geyser.command.defaults;
2727

28+
import com.fasterxml.jackson.databind.JsonNode;
2829
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
29-
import org.geysermc.geyser.Constants;
3030
import org.geysermc.geyser.GeyserImpl;
3131
import org.geysermc.geyser.api.util.PlatformType;
3232
import org.geysermc.geyser.command.GeyserCommand;
@@ -37,8 +37,7 @@
3737
import org.geysermc.geyser.text.GeyserLocale;
3838
import org.geysermc.geyser.util.WebUtils;
3939

40-
import java.net.URLEncoder;
41-
import java.nio.charset.StandardCharsets;
40+
import java.io.IOException;
4241
import java.util.List;
4342

4443
public class VersionCommand extends GeyserCommand {
@@ -72,27 +71,36 @@ public void execute(GeyserSession session, GeyserCommandSource sender, String[]
7271
GeyserImpl.NAME, GeyserImpl.VERSION, javaVersions, bedrockVersions));
7372

7473
// Disable update checking in dev mode and for players in Geyser Standalone
75-
if (GeyserImpl.getInstance().isProductionEnvironment() && !(!sender.isConsole() && geyser.getPlatformType() == PlatformType.STANDALONE)) {
76-
sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.checking", sender.locale()));
77-
try {
78-
String buildXML = WebUtils.getBody("https://ci.opencollab.dev/job/GeyserMC/job/Geyser/job/" +
79-
URLEncoder.encode(GeyserImpl.BRANCH, StandardCharsets.UTF_8) + "/lastSuccessfulBuild/api/xml?xpath=//buildNumber");
80-
if (buildXML.startsWith("<buildNumber>")) {
81-
int latestBuildNum = Integer.parseInt(buildXML.replaceAll("<(\\\\)?(/)?buildNumber>", "").trim());
82-
int buildNum = this.geyser.buildNumber();
83-
if (latestBuildNum == buildNum) {
84-
sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.no_updates", sender.locale()));
85-
} else {
86-
sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.outdated",
87-
sender.locale(), (latestBuildNum - buildNum), Constants.GEYSER_DOWNLOAD_LOCATION));
88-
}
89-
} else {
90-
throw new AssertionError("buildNumber missing");
91-
}
92-
} catch (Exception e) {
93-
GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.version.failed"), e);
94-
sender.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.version.failed", sender.locale()));
74+
if (!GeyserImpl.getInstance().isProductionEnvironment() || (!sender.isConsole() && geyser.getPlatformType() == PlatformType.STANDALONE)) {
75+
return;
76+
}
77+
78+
if (GeyserImpl.IS_DEV) {
79+
// TODO cloud use language string
80+
sender.sendMessage("You are running a development build of Geyser! Please report any bugs you find on our Discord server: %s"
81+
.formatted("https://discord.gg/geysermc"));
82+
//sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.core.dev_build", sender.locale(), "https://discord.gg/geysermc"));
83+
return;
84+
}
85+
86+
sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.checking", sender.locale()));
87+
try {
88+
int buildNumber = this.geyser.buildNumber();
89+
JsonNode response = WebUtils.getJson("https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest");
90+
int latestBuildNumber = response.get("build").asInt();
91+
92+
if (latestBuildNumber == buildNumber) {
93+
sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.no_updates", sender.locale()));
94+
return;
9595
}
96+
97+
sender.sendMessage(GeyserLocale.getPlayerLocaleString(
98+
"geyser.commands.version.outdated",
99+
sender.locale(), (latestBuildNumber - buildNumber), "https://geysermc.org/download"
100+
));
101+
} catch (IOException e) {
102+
GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.version.failed"), e);
103+
sender.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.version.failed", sender.locale()));
96104
}
97105
}
98106

0 commit comments

Comments
 (0)