diff --git a/.github/workflows/test-mc-versions.yml b/.github/workflows/test-mc-versions.yml new file mode 100644 index 000000000..e06671850 --- /dev/null +++ b/.github/workflows/test-mc-versions.yml @@ -0,0 +1,99 @@ +name: MC Plugin Compatibility Test + +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened] + +jobs: + test-minecraft-versions: + runs-on: self-hosted + strategy: + fail-fast: false + matrix: + mc_version: [1.18.2, 1.19.4, 1.20.6, 1.21.7] + + env: + MC_VERSION: ${{ matrix.mc_version }} + PLUGIN_GLOB: "eternalcore-plugin/build/libs/EternalCore*.jar" + MC_PORT: 25560 + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: adopt + java-version: 21 + + - name: Make gradlew executable + run: chmod +x gradlew + + - name: Build the plugin JAR + run: ./gradlew clean eternalcore-plugin:shadowJar + + - name: Find plugin JAR + id: find-jar + run: | + PLUGIN_JAR=$(find ./eternalcore-plugin/build/libs -name 'EternalCore*.jar' | head -n1) + echo "PLUGIN_JAR=$PLUGIN_JAR" >> $GITHUB_ENV + if [ -z "$PLUGIN_JAR" ]; then + echo "❌ Plugin JAR not found!" + exit 1 + fi + + - name: Get latest PaperMC build number + id: get_build_number + run: | + BUILD_NUMBER=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION}/builds" \ + | jq '.builds | max_by(.build) | .build') + echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT + + - name: Setup PaperMC server for $MC_VERSION + run: | + mkdir mc-server + cd mc-server + wget "https://api.papermc.io/v2/projects/paper/versions/${MC_VERSION}/builds/${{ steps.get_build_number.outputs.build_number }}/downloads/paper-${MC_VERSION}-${{ steps.get_build_number.outputs.build_number }}.jar" \ + -O paper.jar + mkdir plugins + cp "../$PLUGIN_JAR" plugins/ + + - name: Agree to EULA + run: echo "eula=true" > mc-server/eula.txt + + - name: Configure server.properties + run: | + cat > mc-server/server.properties < mc-server/bukkit.yml < server.log 2>&1 & + PID=$! + echo "Started MC ${MC_VERSION} on port ${MC_PORT} (PID=${PID})" + sleep 60 + kill $PID || true + wait $PID || true + if grep -iE 'error|exception|failed' server.log; then + echo "❌ Errors detected in server.log" + cat server.log + exit 1 + else + echo "✅ No errors detected for MC ${MC_VERSION}" + fi