Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 30 additions & 11 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@ on:
branches:
- master
schedule:
- cron: '0 0 * * 0' # weekly
- cron: "0 0 * * 0"

permissions:
contents: read

jobs:
build:
Expand All @@ -15,26 +18,42 @@ jobs:
strategy:
matrix:
include:
- storageType: mariadb
java: 21
- storageType: h2
java: 8
- storageType: h2
java: 11
java: 21

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: "temurin"

- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}

- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@v1
distribution: "temurin"

- name: Setup Gradle
uses: gradle/gradle-build-action@v2
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: ${{ github.ref != 'refs/heads/master' }}

- uses: actions/cache@v4
with:
path: |
.gradle/loom-cache
key: ${{ runner.os }}-loom-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-loom-

- name: Execute Gradle build
env:
STORAGE_TYPE: ${{ matrix.storageType }}
run: ./gradlew build
run: ./gradlew build --build-cache --info

- name: Build all Fabric versions
run: ./gradlew :fabric:1.20.1:remapJar :fabric:1.21.1:remapJar :fabric:1.21.4:remapJar --build-cache
212 changes: 212 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
name: E2E Tests

permissions:
contents: read

on:
pull_request:
push:
branches:
- master
workflow_dispatch:

jobs:
e2e-bukkit:
runs-on: ubuntu-latest
name: E2E - Bukkit

steps:
- uses: actions/checkout@v4

- uses: actions/checkout@v4
with:
repository: BanManagement/BanManager
path: BanManager
ref: master

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: "temurin"

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: ${{ github.ref != 'refs/heads/master' }}

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-docker-e2e-${{ hashFiles('e2e/Dockerfile.tests', 'e2e/tests/package*.json') }}
restore-keys: |
${{ runner.os }}-docker-e2e-

- name: Build test runner image
uses: docker/build-push-action@v5
with:
context: e2e
file: e2e/Dockerfile.tests
push: false
load: true
tags: e2e-tests:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max

- name: Move Docker cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

- name: Build BanManager Bukkit
working-directory: BanManager
run: ./gradlew :BanManagerBukkit:shadowJar --build-cache

- name: Run E2E tests
run: ./gradlew :BanManagerWebEnhancerE2E:testBukkit --build-cache -PbanManagerPath=BanManager
timeout-minutes: 15

- name: Collect logs on failure
if: failure()
working-directory: e2e/platforms/bukkit
run: |
docker compose logs > ../../e2e-logs-bukkit.txt 2>&1 || true

- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-logs-bukkit
path: e2e-logs-bukkit.txt
retention-days: 7

- name: Cleanup
if: always()
working-directory: e2e/platforms/bukkit
run: docker compose down -v || true

e2e-fabric:
runs-on: ubuntu-latest
name: E2E - Fabric-${{ matrix.mc_version }}
strategy:
fail-fast: false
matrix:
include:
- mc_version: "1.20.1"
task_suffix: "1_20_1"
java_image: "java17"
fabric_loader: "0.16.10"
- mc_version: "1.21.1"
task_suffix: "1_21_1"
java_image: "java21"
fabric_loader: "0.16.9"
- mc_version: "1.21.4"
task_suffix: "1_21_4"
java_image: "java21"
fabric_loader: "0.16.9"

steps:
- uses: actions/checkout@v4

- uses: actions/checkout@v4
with:
repository: BanManagement/BanManager
path: BanManager
ref: master

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: 21
distribution: "temurin"

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: "temurin"

- name: Set JDK 21 as default
run: echo "JAVA_HOME=$JAVA_HOME_21_X64" >> $GITHUB_ENV

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: ${{ github.ref != 'refs/heads/master' }}

- uses: actions/cache@v4
with:
path: |
.gradle/loom-cache
key: ${{ runner.os }}-loom-${{ hashFiles('**/libs.versions.*', '**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: ${{ runner.os }}-loom-

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-docker-e2e-${{ hashFiles('e2e/Dockerfile.tests', 'e2e/tests/package*.json') }}
restore-keys: |
${{ runner.os }}-docker-e2e-

- name: Build test runner image
uses: docker/build-push-action@v5
with:
context: e2e
file: e2e/Dockerfile.tests
push: false
load: true
tags: e2e-tests:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max

- name: Move Docker cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache

- name: Build BanManager Fabric
working-directory: BanManager
run: ./gradlew :fabric:${{ matrix.mc_version }}:remapJar --build-cache

- name: Run E2E tests
run: ./gradlew :BanManagerWebEnhancerE2E:testFabric_${{ matrix.task_suffix }} --build-cache -PbanManagerPath=BanManager
timeout-minutes: 15
env:
MC_VERSION: ${{ matrix.mc_version }}
JAVA_IMAGE: ${{ matrix.java_image }}
FABRIC_LOADER: ${{ matrix.fabric_loader }}

- name: Collect logs on failure
if: failure()
working-directory: e2e/platforms/fabric
run: |
docker compose logs > ../../e2e-logs-${{ matrix.mc_version }}.txt 2>&1 || true
env:
MC_VERSION: ${{ matrix.mc_version }}
JAVA_IMAGE: ${{ matrix.java_image }}
FABRIC_LOADER: ${{ matrix.fabric_loader }}

- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: e2e-logs-${{ matrix.mc_version }}
path: e2e-logs-${{ matrix.mc_version }}.txt
retention-days: 7

- name: Cleanup
if: always()
working-directory: e2e/platforms/fabric
run: docker compose down -v || true
env:
MC_VERSION: ${{ matrix.mc_version }}
JAVA_IMAGE: ${{ matrix.java_image }}
FABRIC_LOADER: ${{ matrix.fabric_loader }}
14 changes: 14 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,17 @@ build
target
/dependency-reduced-pom.xml
*-private.sh
*.txt

# E2E Tests (Node.js)
e2e/tests/node_modules/
e2e/tests/dist/
e2e/tests/*.log
e2e/tests/coverage/
e2e/jars/

dependency-reduced-pom.xml

# Fabric/Loom
.gradle/loom-cache/
run/
11 changes: 8 additions & 3 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,16 @@ repositories {
name = "sponge"
url = uri("https://repo.spongepowered.org/repository/maven-public/")
}
maven {
name = "Fabric"
url = uri("https://maven.fabricmc.net/")
}
}

dependencies {
implementation(gradleApi())
implementation("com.github.jengelman.gradle.plugins:shadow:6.1.0")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.21.0")
implementation("com.gradleup.shadow:com.gradleup.shadow.gradle.plugin:9.0.0-beta4")
implementation("org.jfrog.buildinfo:build-info-extractor-gradle:5.2.5")
implementation("org.spongepowered:spongegradle-plugin-development:2.0.0")
}
implementation("fabric-loom:fabric-loom.gradle.plugin:1.9.2")
}
19 changes: 12 additions & 7 deletions buildSrc/src/main/kotlin/CommonConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,17 @@ fun Project.applyCommonConfiguration() {
mavenLocal()
mavenCentral()
maven { url = uri("https://repo.codemc.io/repository/maven-public/") }
maven { url = uri("https://s01.oss.sonatype.org/content/repositories/snapshots") }
// Central Portal snapshot repository (OSSRH sunset June 2025)
maven { url = uri("https://central.sonatype.com/repository/maven-snapshots/") }
maven { url = uri("https://ci.frostcast.net/plugin/repository/everything") }
}

dependencies {
"compileOnly"("org.projectlombok:lombok:1.18.22")
"annotationProcessor"("org.projectlombok:lombok:1.18.22")
"compileOnly"("org.projectlombok:lombok:1.18.36")
"annotationProcessor"("org.projectlombok:lombok:1.18.36")

"testCompileOnly"("org.projectlombok:lombok:1.18.22")
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.22")
"testCompileOnly"("org.projectlombok:lombok:1.18.36")
"testAnnotationProcessor"("org.projectlombok:lombok:1.18.36")
}

configurations.all {
Expand All @@ -29,8 +30,12 @@ fun Project.applyCommonConfiguration() {
}
}

// Only set Java 1.8 for non-Fabric modules
// Fabric uses toolchain configuration in its build.gradle.kts
plugins.withId("java") {
the<JavaPluginExtension>().setSourceCompatibility("1.8")
the<JavaPluginExtension>().setTargetCompatibility("1.8")
if (!plugins.hasPlugin("fabric-loom")) {
the<JavaPluginExtension>().setSourceCompatibility("1.8")
the<JavaPluginExtension>().setTargetCompatibility("1.8")
}
}
}
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/LibsConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import javax.inject.Inject
fun Project.applyLibrariesConfiguration() {
apply(plugin = "java-base")
apply(plugin = "maven-publish")
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.gradleup.shadow")
apply(plugin = "com.jfrog.artifactory")

repositories {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/PlatformConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ fun Project.applyPlatformAndCoreConfiguration() {
}

fun Project.applyShadowConfiguration() {
apply(plugin = "com.github.johnrengelman.shadow")
apply(plugin = "com.gradleup.shadow")
tasks.named<ShadowJar>("shadowJar") {
archiveClassifier.set("dist")
dependencies {
Expand Down
Loading