Skip to content

Commit de26878

Browse files
committed
feat: added fabric support
1 parent 1ec3291 commit de26878

57 files changed

Lines changed: 10831 additions & 34 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/build.yml

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ on:
66
branches:
77
- master
88
schedule:
9-
- cron: '0 0 * * 0' # weekly
9+
- cron: "0 0 * * 0" # weekly
10+
11+
permissions:
12+
contents: read
1013

1114
jobs:
1215
build:
@@ -16,25 +19,57 @@ jobs:
1619
matrix:
1720
include:
1821
- storageType: h2
19-
java: 8
20-
- storageType: h2
21-
java: 11
22+
java: 21
2223

2324
steps:
24-
- uses: actions/checkout@v2
25+
- uses: actions/checkout@v4
26+
27+
# Set up JDK 17 for Fabric 1.20.x builds (Gradle toolchain will use this)
28+
- name: Set up JDK 17
29+
uses: actions/setup-java@v4
30+
with:
31+
java-version: 17
32+
distribution: "temurin"
2533

34+
# Set up JDK 21 as the primary JDK
2635
- name: Set up JDK ${{ matrix.java }}
27-
uses: actions/setup-java@v1
36+
uses: actions/setup-java@v4
2837
with:
2938
java-version: ${{ matrix.java }}
30-
31-
- name: Validate Gradle wrapper
32-
uses: gradle/wrapper-validation-action@v1
39+
distribution: "temurin"
3340

3441
- name: Setup Gradle
35-
uses: gradle/gradle-build-action@v2
42+
uses: gradle/actions/setup-gradle@v4
43+
with:
44+
cache-read-only: ${{ github.ref != 'refs/heads/master' }}
45+
46+
- uses: actions/cache@v4
47+
with:
48+
path: |
49+
.gradle/loom-cache
50+
key: ${{ runner.os }}-loom-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}
51+
restore-keys: ${{ runner.os }}-loom-
52+
53+
# Clone and build BanManager dependencies
54+
- name: Checkout BanManager
55+
uses: actions/checkout@v4
56+
with:
57+
repository: BanManagement/BanManager
58+
path: BanManager
59+
ref: master
60+
61+
- name: Publish BanManager to mavenLocal
62+
working-directory: BanManager
63+
run: |
64+
./gradlew :BanManagerCommon:publishToMavenLocal :BanManagerLibs:publishToMavenLocal \
65+
:fabric:1.20.1:publishToMavenLocal :fabric:1.21.1:publishToMavenLocal :fabric:1.21.4:publishToMavenLocal \
66+
--build-cache
3667
3768
- name: Execute Gradle build
3869
env:
3970
STORAGE_TYPE: ${{ matrix.storageType }}
40-
run: ./gradlew build
71+
run: ./gradlew build --build-cache --info
72+
73+
# Build all Fabric versions
74+
- name: Build all Fabric versions
75+
run: ./gradlew :fabric:1.20.1:remapJar :fabric:1.21.1:remapJar :fabric:1.21.4:remapJar --build-cache

.github/workflows/e2e.yml

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: E2E Tests
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
pull_request:
8+
push:
9+
branches:
10+
- master
11+
workflow_dispatch: # Allow manual triggering
12+
13+
jobs:
14+
e2e:
15+
runs-on: ubuntu-latest
16+
name: E2E - Fabric-${{ matrix.mc_version }}
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
include:
21+
# Fabric 1.20.1 (legacy modded, Java 17)
22+
- mc_version: "1.20.1"
23+
java_image: "java17"
24+
fabric_loader: "0.16.10"
25+
# Fabric 1.21.1 (stable 1.21, Java 21)
26+
- mc_version: "1.21.1"
27+
java_image: "java21"
28+
fabric_loader: "0.16.9"
29+
# Fabric 1.21.4 (current latest, Java 21)
30+
- mc_version: "1.21.4"
31+
java_image: "java21"
32+
fabric_loader: "0.16.9"
33+
34+
steps:
35+
- uses: actions/checkout@v4
36+
37+
# Checkout BanManager for building the Fabric mod
38+
- uses: actions/checkout@v4
39+
with:
40+
repository: BanManagement/BanManager
41+
path: BanManager
42+
ref: master
43+
44+
- name: Set up JDK 21
45+
uses: actions/setup-java@v4
46+
with:
47+
java-version: 21
48+
distribution: "temurin"
49+
50+
# Also set up JDK 17 for Fabric 1.20.x builds
51+
- name: Set up JDK 17
52+
uses: actions/setup-java@v4
53+
with:
54+
java-version: 17
55+
distribution: "temurin"
56+
57+
# Ensure JDK 21 is the default
58+
- name: Set JDK 21 as default
59+
run: echo "JAVA_HOME=$JAVA_HOME_21_X64" >> $GITHUB_ENV
60+
61+
- name: Setup Gradle
62+
uses: gradle/actions/setup-gradle@v4
63+
with:
64+
cache-read-only: ${{ github.ref != 'refs/heads/master' }}
65+
66+
- uses: actions/cache@v4
67+
with:
68+
path: |
69+
.gradle/loom-cache
70+
key: ${{ runner.os }}-loom-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}
71+
restore-keys: ${{ runner.os }}-loom-
72+
73+
# Docker Buildx for better caching
74+
- name: Set up Docker Buildx
75+
uses: docker/setup-buildx-action@v3
76+
77+
# Cache Docker layers for test runner image
78+
- name: Cache Docker layers
79+
uses: actions/cache@v4
80+
with:
81+
path: /tmp/.buildx-cache
82+
key: ${{ runner.os }}-docker-e2e-${{ hashFiles('e2e/Dockerfile.tests', 'e2e/tests/package*.json') }}
83+
restore-keys: |
84+
${{ runner.os }}-docker-e2e-
85+
86+
# Pre-build the test runner image with cache
87+
- name: Build test runner image
88+
uses: docker/build-push-action@v5
89+
with:
90+
context: e2e
91+
file: e2e/Dockerfile.tests
92+
push: false
93+
load: true
94+
tags: e2e-tests:latest
95+
cache-from: type=local,src=/tmp/.buildx-cache
96+
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max
97+
98+
# Move cache to avoid ever-growing cache
99+
- name: Move Docker cache
100+
run: |
101+
rm -rf /tmp/.buildx-cache
102+
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
103+
104+
# Build BanManager dependencies and publish to mavenLocal
105+
- name: Publish BanManager to mavenLocal
106+
working-directory: BanManager
107+
run: |
108+
./gradlew :BanManagerCommon:publishToMavenLocal :BanManagerLibs:publishToMavenLocal \
109+
:fabric:${{ matrix.mc_version }}:publishToMavenLocal --build-cache
110+
111+
# Build BanManager Fabric plugin
112+
- name: Build BanManager Fabric
113+
working-directory: BanManager
114+
run: ./gradlew :fabric:${{ matrix.mc_version }}:remapJar --build-cache
115+
116+
# Build WebEnhancer Fabric plugin
117+
- name: Build WebEnhancer Fabric
118+
run: ./gradlew :fabric:${{ matrix.mc_version }}:remapJar --build-cache
119+
120+
- name: Run E2E tests
121+
run: ./gradlew :BanManagerWebEnhancerE2E:testFabric_${{ matrix.mc_version | replace('.', '_') }}
122+
timeout-minutes: 15
123+
env:
124+
MC_VERSION: ${{ matrix.mc_version }}
125+
JAVA_IMAGE: ${{ matrix.java_image }}
126+
FABRIC_LOADER: ${{ matrix.fabric_loader }}
127+
128+
- name: Collect logs on failure
129+
if: failure()
130+
working-directory: e2e/platforms/fabric
131+
run: |
132+
docker compose logs > ../../e2e-logs-${{ matrix.mc_version }}.txt 2>&1 || true
133+
env:
134+
MC_VERSION: ${{ matrix.mc_version }}
135+
JAVA_IMAGE: ${{ matrix.java_image }}
136+
FABRIC_LOADER: ${{ matrix.fabric_loader }}
137+
138+
- name: Upload logs on failure
139+
if: failure()
140+
uses: actions/upload-artifact@v4
141+
with:
142+
name: e2e-logs-${{ matrix.mc_version }}
143+
path: e2e-logs-${{ matrix.mc_version }}.txt
144+
retention-days: 7
145+
146+
- name: Cleanup
147+
if: always()
148+
working-directory: e2e/platforms/fabric
149+
run: docker compose down -v || true
150+
env:
151+
MC_VERSION: ${{ matrix.mc_version }}
152+
JAVA_IMAGE: ${{ matrix.java_image }}
153+
FABRIC_LOADER: ${{ matrix.fabric_loader }}

.gitignore

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,16 @@ build
2222
target
2323
/dependency-reduced-pom.xml
2424
*-private.sh
25+
*.txt
26+
27+
# E2E Tests (Node.js)
28+
e2e/tests/node_modules/
29+
e2e/tests/dist/
30+
e2e/tests/*.log
31+
e2e/tests/coverage/
32+
33+
dependency-reduced-pom.xml
34+
35+
# Fabric/Loom
36+
.gradle/loom-cache/
37+
run/

buildSrc/build.gradle.kts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,16 @@ repositories {
1010
name = "sponge"
1111
url = uri("https://repo.spongepowered.org/repository/maven-public/")
1212
}
13+
maven {
14+
name = "Fabric"
15+
url = uri("https://maven.fabricmc.net/")
16+
}
1317
}
1418

1519
dependencies {
1620
implementation(gradleApi())
17-
implementation("com.github.jengelman.gradle.plugins:shadow:6.1.0")
18-
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.21.0")
21+
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.0.0-beta4")
22+
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:5.2.5")
1923
implementation("org.spongepowered:spongegradle-plugin-development:2.0.0")
20-
}
24+
implementation("fabric-loom:fabric-loom.gradle.plugin:1.9.2")
25+
}

buildSrc/src/main/kotlin/CommonConfig.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ fun Project.applyCommonConfiguration() {
1616
}
1717

1818
dependencies {
19-
"compileOnly"("org.projectlombok:lombok:1.18.22")
20-
"annotationProcessor"("org.projectlombok:lombok:1.18.22")
19+
"compileOnly"("org.projectlombok:lombok:1.18.36")
20+
"annotationProcessor"("org.projectlombok:lombok:1.18.36")
2121

22-
"testCompileOnly"("org.projectlombok:lombok:1.18.22")
23-
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.22")
22+
"testCompileOnly"("org.projectlombok:lombok:1.18.36")
23+
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.36")
2424
}
2525

2626
configurations.all {
@@ -29,8 +29,12 @@ fun Project.applyCommonConfiguration() {
2929
}
3030
}
3131

32+
// Only set Java 1.8 for non-Fabric modules
33+
// Fabric uses toolchain configuration in its build.gradle.kts
3234
plugins.withId("java") {
33-
the<JavaPluginExtension>().setSourceCompatibility("1.8")
34-
the<JavaPluginExtension>().setTargetCompatibility("1.8")
35+
if (!plugins.hasPlugin("fabric-loom")) {
36+
the<JavaPluginExtension>().setSourceCompatibility("1.8")
37+
the<JavaPluginExtension>().setTargetCompatibility("1.8")
38+
}
3539
}
3640
}

buildSrc/src/main/kotlin/LibsConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import javax.inject.Inject
2121
fun Project.applyLibrariesConfiguration() {
2222
apply(plugin = "java-base")
2323
apply(plugin = "maven-publish")
24-
apply(plugin = "com.github.johnrengelman.shadow")
24+
apply(plugin = "com.gradleup.shadow")
2525
apply(plugin = "com.jfrog.artifactory")
2626

2727
repositories {

buildSrc/src/main/kotlin/PlatformConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ fun Project.applyPlatformAndCoreConfiguration() {
5858
}
5959

6060
fun Project.applyShadowConfiguration() {
61-
apply(plugin = "com.github.johnrengelman.shadow")
61+
apply(plugin = "com.gradleup.shadow")
6262
tasks.named<ShadowJar>("shadowJar") {
6363
archiveClassifier.set("dist")
6464
dependencies {

bukkit/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ applyShadowConfiguration()
1010
repositories {
1111
maven {
1212
name = "paper"
13-
url = uri("https://papermc.io/repo/repository/maven-public/")
13+
url = uri("https://repo.papermc.io/repository/maven-public/")
1414
}
1515
maven {
1616
name = "jitpack"
@@ -26,7 +26,7 @@ dependencies {
2626
api(project(":BanManagerWebEnhancerCommon")) {
2727
isTransitive = true
2828
}
29-
compileOnly("me.confuser.banmanager:BanManagerBukkit:7.8.0-SNAPSHOT")
29+
compileOnly("me.confuser.banmanager:BanManagerBukkit:7.10.0-SNAPSHOT")
3030

3131
compileOnly("org.spigotmc:spigot-api:1.17.1-R0.1-SNAPSHOT") {
3232
exclude("junit", "junit")

bungee/build.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ applyShadowConfiguration()
1010
repositories {
1111
maven {
1212
name = "paper"
13-
url = uri("https://papermc.io/repo/repository/maven-public/")
13+
url = uri("https://repo.papermc.io/repository/maven-public/")
14+
}
15+
maven {
16+
name = "sonatype-snapshots"
17+
url = uri("https://oss.sonatype.org/content/repositories/snapshots/")
1418
}
1519
}
1620

@@ -22,9 +26,9 @@ dependencies {
2226
api(project(":BanManagerWebEnhancerCommon")) {
2327
isTransitive = true
2428
}
25-
compileOnly("me.confuser.banmanager:BanManagerBungee:7.8.0-SNAPSHOT")
29+
compileOnly("me.confuser.banmanager:BanManagerBungee:7.10.0-SNAPSHOT")
2630

27-
compileOnly("net.md-5:bungeecord-api:1.14-SNAPSHOT")
31+
compileOnly("net.md-5:bungeecord-api:1.21-R0.4")
2832
"shadeOnly"("org.bstats:bstats-bungeecord:2.2.1")
2933
}
3034

common/build.gradle.kts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,20 @@ applyPlatformAndCoreConfiguration()
77
dependencies {
88
api(project(":BanManagerWebEnhancerLibs"))
99

10-
api("me.confuser.banmanager:BanManagerCommon:7.8.0-SNAPSHOT")
11-
api("me.confuser.banmanager.BanManagerLibs:BanManagerLibs:7.8.0-SNAPSHOT")
10+
api("me.confuser.banmanager:BanManagerCommon:7.10.0-SNAPSHOT")
11+
api("me.confuser.banmanager.BanManagerLibs:BanManagerLibs:7.10.0-SNAPSHOT")
12+
13+
// Test dependencies
14+
testImplementation("junit:junit:4.13")
15+
testImplementation("org.mockito:mockito-core:4.0.0")
16+
testImplementation("org.powermock:powermock-module-junit4:2.0.2")
17+
testImplementation("org.powermock:powermock-api-mockito2:2.0.2")
18+
testImplementation("ch.vorburger.mariaDB4j:mariaDB4j:2.6.0")
19+
testImplementation("org.awaitility:awaitility:4.0.1")
1220
}
1321

1422
tasks.withType<Test>().configureEach {
1523
useJUnit()
24+
maxHeapSize = "512m"
25+
forkEvery = 1 // Fork a new JVM for each test class to prevent memory accumulation
1626
}

0 commit comments

Comments
 (0)