Skip to content

Commit a7d4b7c

Browse files
authored
GH-73 Add snapshot tracking to updater (#73)
* Support SNAPSHOT version checking and update Modrinth filtering logic. * Update project version to 1.3.1
1 parent 8097641 commit a7d4b7c

File tree

5 files changed

+67
-28
lines changed

5 files changed

+67
-28
lines changed

buildSrc/src/main/kotlin/commons-publish.gradle.kts

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,21 @@ publishing {
1414
repositories {
1515
mavenLocal()
1616

17-
maven {
18-
url = uri("https://repo.eternalcode.pl/releases")
17+
val mavenUsername = System.getenv("ETERNAL_CODE_MAVEN_USERNAME")
18+
val mavenPassword = System.getenv("ETERNAL_CODE_MAVEN_PASSWORD")
1919

20-
if (version.toString().endsWith("-SNAPSHOT")) {
21-
url = uri("https://repo.eternalcode.pl/snapshots")
22-
}
20+
if (!mavenUsername.isNullOrBlank() && !mavenPassword.isNullOrBlank()) {
21+
maven {
22+
url = uri("https://repo.eternalcode.pl/releases")
23+
24+
if (version.toString().endsWith("-SNAPSHOT")) {
25+
url = uri("https://repo.eternalcode.pl/snapshots")
26+
}
2327

24-
credentials {
25-
username = System.getenv("ETERNAL_CODE_MAVEN_USERNAME")
26-
password = System.getenv("ETERNAL_CODE_MAVEN_PASSWORD")
28+
credentials {
29+
username = mavenUsername
30+
password = mavenPassword
31+
}
2732
}
2833
}
2934
}
@@ -34,3 +39,4 @@ publishing {
3439
}
3540
}
3641
}
42+

eternalcode-commons-updater-example/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
plugins {
22
`commons-java-17`
33
`commons-repositories`
4+
application
5+
}
6+
7+
application {
8+
mainClass.set("com.eternalcode.commons.updater.example.ExampleChecker")
49
}
510

611
dependencies {

eternalcode-commons-updater-example/src/main/java/com/eternalcode/commons/updater/example/ExampleChecker.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,27 @@
55
public class ExampleChecker {
66

77
private static final String OLD_ETERNALCOMBAT_VERSION = "1.3.3";
8+
private static final String SNAPSHOT_VERSION = "1.3.3-SNAPSHOT";
89

910
public static void main(String[] args) {
1011
ExampleUpdateService updateService = new ExampleUpdateService();
1112

12-
UpdateResult modrinthResult = updateService.checkModrinth("EternalCombat", OLD_ETERNALCOMBAT_VERSION);
13-
System.out.println("Modrinth update available: " + modrinthResult.isUpdateAvailable());
14-
if (modrinthResult.isUpdateAvailable()) {
15-
System.out.println("Latest: " + modrinthResult.latestVersion());
16-
System.out.println("Download: " + modrinthResult.downloadUrl());
17-
System.out.println("Release page: " + modrinthResult.releaseUrl());
13+
System.out.println("=== Testing with STABLE version (1.3.3) ===");
14+
UpdateResult stableResult = updateService.checkModrinth("EternalCombat", OLD_ETERNALCOMBAT_VERSION);
15+
printResult(stableResult);
16+
17+
System.out.println("\n=== Testing with SNAPSHOT version (1.3.3-SNAPSHOT) ===");
18+
UpdateResult snapshotResult = updateService.checkModrinth("EternalCombat", SNAPSHOT_VERSION);
19+
printResult(snapshotResult);
20+
}
21+
22+
private static void printResult(UpdateResult result) {
23+
System.out.println("Current version: " + result.currentVersion());
24+
System.out.println("Latest version: " + result.latestVersion());
25+
System.out.println("Update available: " + result.isUpdateAvailable());
26+
if (result.isUpdateAvailable()) {
27+
System.out.println("Download: " + result.downloadUrl());
28+
System.out.println("Release page: " + result.releaseUrl());
1829
}
1930
}
2031
}

eternalcode-commons-updater/src/main/java/com/eternalcode/commons/updater/Version.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,16 @@ public Version(String version) {
1919
this.versionComponents = parseVersion(this.value);
2020
}
2121

22+
private static String cleanVersion(String version) {
23+
String cleaned = version.startsWith("v") ? version.substring(1) : version;
24+
int dashIndex = cleaned.indexOf('-');
25+
if (dashIndex > 0) {
26+
return cleaned.substring(0, dashIndex);
27+
}
28+
29+
return cleaned;
30+
}
31+
2232
private int[] parseVersion(String version) {
2333
String cleaned = cleanVersion(version);
2434
String[] rawVersionComponents = cleaned.split("\\.");
@@ -36,16 +46,6 @@ private int[] parseVersion(String version) {
3646
return versionComponents;
3747
}
3848

39-
private static String cleanVersion(String version) {
40-
String cleaned = version.startsWith("v") ? version.substring(1) : version;
41-
int dashIndex = cleaned.indexOf('-');
42-
if (dashIndex > 0) {
43-
return cleaned.substring(0, dashIndex);
44-
}
45-
46-
return cleaned;
47-
}
48-
4949
@Override
5050
public int compareTo(@NotNull Version other) {
5151
int maxLength = Math.max(this.versionComponents.length, other.versionComponents.length);
@@ -92,6 +92,10 @@ public int hashCode() {
9292
return Arrays.hashCode(versionComponents);
9393
}
9494

95+
public boolean isSnapshot() {
96+
return this.value.contains("-SNAPSHOT");
97+
}
98+
9599
@Override
96100
public String toString() {
97101
return value;

eternalcode-commons-updater/src/main/java/com/eternalcode/commons/updater/impl/ModrinthUpdateChecker.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,34 @@ public UpdateResult check(String projectId, Version currentVersion) {
5454

5555
private UpdateResult parseVersionResponse(String json, Version currentVersion, String projectId) {
5656
try {
57-
List<ModrinthVersion> versions = GSON.fromJson(json, new TypeToken<>(){});
57+
List<ModrinthVersion> versions = GSON.fromJson(
58+
json, new TypeToken<>() {
59+
});
5860
if (versions == null || versions.isEmpty()) {
5961
return UpdateResult.empty(currentVersion);
6062
}
6163

62-
ModrinthVersion latestVersionData = versions.get(0);
64+
List<ModrinthVersion> filteredVersions = versions;
65+
if (!currentVersion.isSnapshot()) {
66+
filteredVersions = versions.stream()
67+
.filter(version -> !version.versionNumber().contains("-SNAPSHOT"))
68+
.toList();
69+
}
70+
71+
if (filteredVersions.isEmpty()) {
72+
return UpdateResult.empty(currentVersion);
73+
}
74+
75+
ModrinthVersion latestVersionData = filteredVersions.get(0);
6376
String versionNumber = latestVersionData.versionNumber();
6477
if (versionNumber == null || versionNumber.trim().isEmpty()) {
6578
return UpdateResult.empty(currentVersion);
6679
}
6780

6881
String releaseUrl = MODRINTH_BASE_URL + "/" + projectId + "/version/" + versionNumber;
6982
String downloadUrl = latestVersionData.files().stream()
70-
.map(modrinthFile -> modrinthFile.url())
71-
.filter(obj -> Objects.nonNull(obj))
83+
.map(ModrinthFile::url)
84+
.filter(Objects::nonNull)
7285
.findFirst()
7386
.orElse(releaseUrl);
7487

0 commit comments

Comments
 (0)