fix: dep conflicts #42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| pull_request: | |
| branches: [ v2.x, v3.x ] | |
| jobs: | |
| unit-tests: | |
| name: Unit tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Java 25 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: maven | |
| - name: Build and install MockBukkit (minecraft/v26 HEAD) | |
| run: | | |
| git clone --depth=1 --branch minecraft/v26 https://github.com/MockBukkit/MockBukkit.git /tmp/MockBukkit | |
| MBVER="dev-$(git -C /tmp/MockBukkit rev-parse --short HEAD)" | |
| echo "MOCKBUKKIT_VERSION=$MBVER" >> "$GITHUB_ENV" | |
| cd /tmp/MockBukkit && ./gradlew publishToMavenLocal -xtest -xjavadoc | |
| - name: Run unit tests | |
| run: mvn -B -ntp -Dmockbukkit.version="$MOCKBUKKIT_VERSION" test | |
| feature-tests: | |
| name: Feature tests | |
| runs-on: ubuntu-latest | |
| needs: unit-tests | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up Java 25 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: maven | |
| - name: Build and install MockBukkit (minecraft/v26 HEAD) | |
| run: | | |
| git clone --depth=1 --branch minecraft/v26 https://github.com/MockBukkit/MockBukkit.git /tmp/MockBukkit | |
| MBVER="dev-$(git -C /tmp/MockBukkit rev-parse --short HEAD)" | |
| echo "MOCKBUKKIT_VERSION=$MBVER" >> "$GITHUB_ENV" | |
| cd /tmp/MockBukkit && ./gradlew publishToMavenLocal -xtest -xjavadoc | |
| - name: Run feature tests | |
| run: mvn -B -ntp -Pfeature-tests -Dtest=*FeatureTest -Dmockbukkit.version="$MOCKBUKKIT_VERSION" test | |
| # ────────────────────────────────────────────────────────────────────────── | |
| # SMOKE TESTS — verify EzAfk loads without errors on each server platform. | |
| # | |
| # All smoke jobs build with JDK 25: | |
| # paper-api 26.x uses Java 25 class files (version 69); older JDKs | |
| # cannot read them and the build fails. | |
| # maven.compiler.release=21 → plugin JAR targets Java 21 bytecode, | |
| # compatible with every Minecraft 1.21+ server (Java 21+ required). | |
| # | |
| # Build uses -Dmaven.test.skip=true (avoids needing the MockBukkit install). | |
| # ────────────────────────────────────────────────────────────────────────── | |
| spigot-smoke-test: | |
| name: Spigot 1.21.4 (build JDK 25 / server JDK 21) | |
| runs-on: ubuntu-latest | |
| needs: [unit-tests, feature-tests] | |
| # BuildTools for Spigot 1.21.4 requires Java 21–24 (javaVersions [65,68]). | |
| # JDK 25 is rejected by BuildTools even though the server itself runs fine | |
| # on any Java 21+ JVM. Strategy: compile the plugin with JDK 25 (paper-api | |
| # 26.x needs it), then swap to JDK 21 for BuildTools and server launch. | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up build JDK 25 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: maven | |
| - name: Build plugin JAR (JDK 25) | |
| run: mvn -B -ntp -Dmaven.test.skip=true package | |
| - name: Set up server JDK 21 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '21' | |
| - name: Cache Spigot 1.21.4 JAR | |
| id: spigot-cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: spigot-1.21.4.jar | |
| key: spigot-1.21.4-buildtools-v1 | |
| - name: Build Spigot 1.21.4 via BuildTools | |
| if: steps.spigot-cache.outputs.cache-hit != 'true' | |
| run: | | |
| git config --global user.email "ci@ci.local" | |
| git config --global user.name "CI" | |
| curl -fsSL \ | |
| https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar \ | |
| -o BuildTools.jar | |
| java -jar BuildTools.jar --rev 1.21.4 --compile SPIGOT | |
| - name: Configure server | |
| run: | | |
| mkdir -p smoke-server/plugins | |
| cp target/ezafk-*.jar smoke-server/plugins/EzAfk.jar | |
| cp spigot-1.21.4.jar smoke-server/ | |
| echo "eula=true" > smoke-server/eula.txt | |
| printf '%s\n' \ | |
| "online-mode=false" \ | |
| "level-type=flat" \ | |
| "generate-structures=false" \ | |
| "max-players=0" \ | |
| > smoke-server/server.properties | |
| - name: Run server and wait for ready | |
| run: | | |
| cd smoke-server | |
| java -Xms512m -Xmx1g -jar spigot-1.21.4.jar --nogui > server.log 2>&1 & | |
| SERVER_PID=$! | |
| ELAPSED=0 | |
| while [ $ELAPSED -lt 120 ]; do | |
| sleep 2; ELAPSED=$((ELAPSED + 2)) | |
| if grep -q "Done (" server.log 2>/dev/null; then | |
| echo "Server ready after ${ELAPSED}s"; break | |
| fi | |
| if ! kill -0 $SERVER_PID 2>/dev/null; then | |
| echo "Server process exited after ${ELAPSED}s"; break | |
| fi | |
| done | |
| kill $SERVER_PID 2>/dev/null || true | |
| wait $SERVER_PID 2>/dev/null || true | |
| - name: Assert no EzAfk errors | |
| run: | | |
| LOG=smoke-server/server.log | |
| if grep -qE "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG"; then | |
| echo "::error::EzAfk logged errors on Spigot 1.21.4 / Java 21 startup:" | |
| grep -E "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG" | |
| exit 1 | |
| fi | |
| if grep -qiE "Enabling EzAfk" "$LOG"; then | |
| echo "Spigot 1.21.4 / Java 21 smoke test passed." | |
| else | |
| echo "::warning::EzAfk 'Enabling EzAfk' not found in log — plugin may not have loaded within the timeout" | |
| fi | |
| - name: Upload server log | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: spigot-1.21.4-java21-smoke-log | |
| path: smoke-server/server.log | |
| retention-days: 7 | |
| paper-smoke-test: | |
| name: Paper 1.21.11 / Java 25 | |
| runs-on: ubuntu-latest | |
| needs: [unit-tests, feature-tests] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up JDK 25 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: maven | |
| - name: Build plugin JAR | |
| run: mvn -B -ntp -Dmaven.test.skip=true package | |
| - name: Resolve latest Paper 1.21.11 build | |
| id: paper | |
| run: | | |
| USER_AGENT="EzAfk-CI/1.0 (https://github.com/ez-plugins/EzAfk)" | |
| BUILDS_JSON=$(curl -fsSL -H "User-Agent: ${USER_AGENT}" "https://fill.papermc.io/v3/projects/paper/versions/1.21.11/builds") | |
| BUILD=$(printf '%s' "$BUILDS_JSON" | \ | |
| python3 -c "import sys,json; builds=json.load(sys.stdin); chosen=next((b for b in builds if b.get('channel')=='STABLE'), None) or (builds[0] if builds else None); assert chosen, 'No Paper builds returned'; print(chosen['id'])") | |
| DOWNLOAD_URL=$(printf '%s' "$BUILDS_JSON" | \ | |
| python3 -c "import sys,json; builds=json.load(sys.stdin); chosen=next((b for b in builds if b.get('channel')=='STABLE'), None) or (builds[0] if builds else None); assert chosen, 'No Paper builds returned'; print(chosen['downloads']['server:default']['url'])") | |
| echo "build=${BUILD}" >> "$GITHUB_OUTPUT" | |
| echo "download_url=${DOWNLOAD_URL}" >> "$GITHUB_OUTPUT" | |
| echo "Resolved: Paper 1.21.11 build ${BUILD}" | |
| - name: Download Paper 1.21.11 server JAR | |
| run: | | |
| mkdir -p smoke-server/plugins | |
| curl -fsSL -H "User-Agent: EzAfk-CI/1.0 (https://github.com/ez-plugins/EzAfk)" \ | |
| "${{ steps.paper.outputs.download_url }}" \ | |
| -o smoke-server/paper.jar | |
| - name: Copy plugin JAR | |
| run: cp target/ezafk-*.jar smoke-server/plugins/EzAfk.jar | |
| - name: Configure server | |
| run: | | |
| echo "eula=true" > smoke-server/eula.txt | |
| printf '%s\n' \ | |
| "online-mode=false" \ | |
| "level-type=flat" \ | |
| "generate-structures=false" \ | |
| "max-players=0" \ | |
| > smoke-server/server.properties | |
| - name: Run server and wait for ready | |
| run: | | |
| cd smoke-server | |
| java -Xms512m -Xmx1g -jar paper.jar --nogui > server.log 2>&1 & | |
| SERVER_PID=$! | |
| ELAPSED=0 | |
| while [ $ELAPSED -lt 120 ]; do | |
| sleep 2; ELAPSED=$((ELAPSED + 2)) | |
| if grep -q "Done (" server.log 2>/dev/null; then | |
| echo "Server ready after ${ELAPSED}s"; break | |
| fi | |
| if ! kill -0 $SERVER_PID 2>/dev/null; then | |
| echo "Server process exited after ${ELAPSED}s"; break | |
| fi | |
| done | |
| kill $SERVER_PID 2>/dev/null || true | |
| wait $SERVER_PID 2>/dev/null || true | |
| - name: Assert no EzAfk errors | |
| run: | | |
| LOG=smoke-server/server.log | |
| if grep -qE "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG"; then | |
| echo "::error::EzAfk logged errors on Paper 1.21.11 / Java 25 startup:" | |
| grep -E "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG" | |
| exit 1 | |
| fi | |
| if grep -qiE "Enabling EzAfk" "$LOG"; then | |
| echo "Paper 1.21.11 / Java 25 smoke test passed." | |
| else | |
| echo "::warning::EzAfk 'Enabling EzAfk' not found in log — plugin may not have loaded within the timeout" | |
| fi | |
| - name: Upload server log | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: paper-1.21.11-java25-smoke-log | |
| path: smoke-server/server.log | |
| retention-days: 7 | |
| folia-smoke-test: | |
| name: Folia 1.21.11 / Java 25 | |
| runs-on: ubuntu-latest | |
| needs: [unit-tests, feature-tests] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| - name: Set up JDK 25 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: maven | |
| - name: Build plugin JAR | |
| run: mvn -B -ntp -Dmaven.test.skip=true package | |
| - name: Resolve latest Folia 1.21.11 build | |
| id: folia | |
| run: | | |
| USER_AGENT="EzAfk-CI/1.0 (https://github.com/ez-plugins/EzAfk)" | |
| BUILDS_JSON=$(curl -fsSL -H "User-Agent: ${USER_AGENT}" "https://fill.papermc.io/v3/projects/folia/versions/1.21.11/builds") | |
| BUILD=$(printf '%s' "$BUILDS_JSON" | \ | |
| python3 -c "import sys,json; builds=json.load(sys.stdin); chosen=next((b for b in builds if b.get('channel')=='STABLE'), None) or (builds[0] if builds else None); assert chosen, 'No Folia builds returned'; print(chosen['id'])") | |
| DOWNLOAD_URL=$(printf '%s' "$BUILDS_JSON" | \ | |
| python3 -c "import sys,json; builds=json.load(sys.stdin); chosen=next((b for b in builds if b.get('channel')=='STABLE'), None) or (builds[0] if builds else None); assert chosen, 'No Folia builds returned'; print(chosen['downloads']['server:default']['url'])") | |
| echo "build=${BUILD}" >> "$GITHUB_OUTPUT" | |
| echo "download_url=${DOWNLOAD_URL}" >> "$GITHUB_OUTPUT" | |
| echo "Resolved: Folia 1.21.11 build ${BUILD}" | |
| - name: Download Folia 1.21.11 server JAR | |
| run: | | |
| mkdir -p smoke-server/plugins | |
| curl -fsSL -H "User-Agent: EzAfk-CI/1.0 (https://github.com/ez-plugins/EzAfk)" \ | |
| "${{ steps.folia.outputs.download_url }}" \ | |
| -o smoke-server/folia.jar | |
| - name: Copy plugin JAR | |
| run: cp target/ezafk-*.jar smoke-server/plugins/EzAfk.jar | |
| - name: Configure server | |
| run: | | |
| echo "eula=true" > smoke-server/eula.txt | |
| printf '%s\n' \ | |
| "online-mode=false" \ | |
| "level-type=flat" \ | |
| "generate-structures=false" \ | |
| "max-players=0" \ | |
| > smoke-server/server.properties | |
| - name: Run server and wait for ready | |
| run: | | |
| cd smoke-server | |
| java -Xms512m -Xmx1g -jar folia.jar --nogui > server.log 2>&1 & | |
| SERVER_PID=$! | |
| ELAPSED=0 | |
| while [ $ELAPSED -lt 120 ]; do | |
| sleep 2; ELAPSED=$((ELAPSED + 2)) | |
| if grep -q "Done (" server.log 2>/dev/null; then | |
| echo "Server ready after ${ELAPSED}s"; break | |
| fi | |
| if ! kill -0 $SERVER_PID 2>/dev/null; then | |
| echo "Server process exited after ${ELAPSED}s"; break | |
| fi | |
| done | |
| kill $SERVER_PID 2>/dev/null || true | |
| wait $SERVER_PID 2>/dev/null || true | |
| - name: Assert no EzAfk errors | |
| run: | | |
| LOG=smoke-server/server.log | |
| if grep -qE "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG"; then | |
| echo "::error::EzAfk logged errors on Folia 1.21.11 / Java 25 startup:" | |
| grep -E "(SEVERE|ERROR).*EzAfk|Could not load.*EzAfk" "$LOG" | |
| exit 1 | |
| fi | |
| if grep -qiE "Enabling EzAfk" "$LOG"; then | |
| echo "Folia 1.21.11 / Java 25 smoke test passed." | |
| else | |
| echo "::warning::EzAfk 'Enabling EzAfk' not found in log — server may not have finished loading within the timeout" | |
| fi | |
| - name: Upload server log | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: folia-1.21.11-java25-smoke-log | |
| path: smoke-server/server.log | |
| retention-days: 7 | |