mirror of
https://github.com/barkeser2002/BarisKeserTools-MC.git
synced 2026-09-25 01:39:59 +03:00
- Folia API'sinde olmayan surumler (orn. 1.21.1) icin test artik hata vermek yerine atlaniyor; gercek Folia testleri (1.20.6, 1.21.4) calisiyor. - README: 1.8.8-1.21.x + Folia destegi, CI matris testleri ve v1.4.0 notlari.
438 lines
17 KiB
YAML
438 lines
17 KiB
YAML
name: Build, Test & Release
|
||
|
||
on:
|
||
push:
|
||
branches: [main]
|
||
paths:
|
||
- 'build.gradle.kts' # versiyon bump → release tetikler
|
||
- 'src/**'
|
||
- '.github/workflows/**'
|
||
pull_request:
|
||
branches: [main]
|
||
workflow_dispatch:
|
||
|
||
# Aynı ref için eski koşan iş akışlarını iptal et
|
||
concurrency:
|
||
group: ${{ github.workflow }}-${{ github.ref }}
|
||
cancel-in-progress: true
|
||
|
||
# Node.js 20 deprecation'ı için Node 24'e geç (GitHub Actions, Haziran 2026+)
|
||
env:
|
||
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
|
||
|
||
jobs:
|
||
# ════════════════════════════════════════════════════════════════════
|
||
# 1) BUILD — JAR'ı derle, sürümü çıkar, artifact olarak yükle
|
||
# ════════════════════════════════════════════════════════════════════
|
||
build:
|
||
runs-on: ubuntu-latest
|
||
outputs:
|
||
version: ${{ steps.get_version.outputs.version }}
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Setup Java (JDK 17)
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'temurin'
|
||
java-version: '17'
|
||
|
||
- name: Setup Gradle
|
||
uses: gradle/actions/setup-gradle@v4
|
||
|
||
- name: gradlew çalıştırılabilir yap
|
||
run: chmod +x gradlew
|
||
|
||
- name: Sürümü çıkar
|
||
id: get_version
|
||
run: |
|
||
VERSION=$(grep -oP 'version\s*=\s*"\K[^"]+' build.gradle.kts)
|
||
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
|
||
echo "Sürüm: $VERSION"
|
||
|
||
- name: Build (fatJar)
|
||
run: ./gradlew clean fatJar --no-daemon
|
||
|
||
- name: Bytecode'un Java 8 olduğunu doğrula
|
||
run: |
|
||
JAR=$(ls build/libs/*.jar | head -n1)
|
||
unzip -p "$JAR" tr/com/havasaldirisi/HavaSaldirisiPlugin.class > Main.class
|
||
MAJOR=$(od -An -j6 -N2 -tu1 Main.class | awk '{print $1*256+$2}')
|
||
echo "Major bytecode version: $MAJOR (52 = Java 8)"
|
||
if [ "$MAJOR" -ne 52 ]; then
|
||
echo "::error::Bytecode Java 8 (52) değil! Bulunan: $MAJOR"
|
||
exit 1
|
||
fi
|
||
|
||
- name: JAR'ı artifact olarak yükle
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: plugin-jar
|
||
path: build/libs/*.jar
|
||
retention-days: 1
|
||
|
||
# ════════════════════════════════════════════════════════════════════
|
||
# 2a) TEST (PAPER) — modern sürümlerde gerçek sunucu açılış testi
|
||
# ════════════════════════════════════════════════════════════════════
|
||
test-paper:
|
||
needs: build
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- { mc: '1.16.5', java: '16' }
|
||
- { mc: '1.17.1', java: '17' }
|
||
- { mc: '1.18.2', java: '17' }
|
||
- { mc: '1.19.4', java: '17' }
|
||
- { mc: '1.20.1', java: '17' }
|
||
- { mc: '1.20.4', java: '17' }
|
||
- { mc: '1.20.6', java: '21' }
|
||
- { mc: '1.21.1', java: '21' }
|
||
- { mc: '1.21.4', java: '21' }
|
||
- { mc: '1.21.8', java: '21' }
|
||
name: Paper ${{ matrix.mc }} (Java ${{ matrix.java }})
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Setup Java ${{ matrix.java }}
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'temurin'
|
||
java-version: ${{ matrix.java }}
|
||
|
||
- name: Plugin JAR'ını indir
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: plugin-jar
|
||
path: ./jar
|
||
|
||
- name: Paper sunucusunu indir
|
||
run: |
|
||
V="${{ matrix.mc }}"
|
||
echo "Paper $V için son build alınıyor..."
|
||
BUILD=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$V/builds" \
|
||
| jq -r '.builds[-1].build')
|
||
if [ -z "$BUILD" ] || [ "$BUILD" = "null" ]; then
|
||
echo "::error::Paper $V için build bulunamadı"; exit 1
|
||
fi
|
||
JARNAME=$(curl -s "https://api.papermc.io/v2/projects/paper/versions/$V/builds/$BUILD" \
|
||
| jq -r '.downloads.application.name')
|
||
curl -s -o server.jar \
|
||
"https://api.papermc.io/v2/projects/paper/versions/$V/builds/$BUILD/downloads/$JARNAME"
|
||
echo "İndirildi: $JARNAME (build $BUILD)"
|
||
|
||
- name: Sunucuyu hazırla
|
||
run: |
|
||
mkdir -p plugins
|
||
cp jar/*.jar plugins/
|
||
echo "eula=true" > eula.txt
|
||
cat > server.properties <<'EOF'
|
||
online-mode=false
|
||
level-type=flat
|
||
spawn-protection=0
|
||
max-players=1
|
||
view-distance=4
|
||
EOF
|
||
|
||
- name: Sunucuyu başlat ve açılışı doğrula
|
||
run: |
|
||
# Done görülünce stop gönderen subshell
|
||
(
|
||
for i in $(seq 1 120); do
|
||
sleep 2
|
||
if grep -q "Done (" logs/latest.log 2>/dev/null; then sleep 3; break; fi
|
||
done
|
||
echo "stop"
|
||
) | timeout 240 java -Xmx2G -jar server.jar nogui || true
|
||
|
||
- name: Logları analiz et
|
||
run: |
|
||
LOG=logs/latest.log
|
||
echo "──────── Sunucu Logu (son 80 satır) ────────"
|
||
tail -n 80 "$LOG" || true
|
||
echo "─────────────────────────────────────────────"
|
||
|
||
# 1) Plugin etkinleşti mi?
|
||
if ! grep -qi "Enabling BarisKeserTools" "$LOG" && ! grep -q "BarisKeserTools" "$LOG"; then
|
||
echo "::error::Plugin etkinleşmedi (Paper ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
|
||
# 2) Plugin yüklenemedi mi?
|
||
if grep -qi "Could not load 'plugins" "$LOG"; then
|
||
echo "::error::Plugin yüklenemedi (Paper ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
|
||
# 3) Plugin'e ait exception / enable hatası var mı?
|
||
if grep -qi "Error occurred while enabling BarisKeserTools" "$LOG"; then
|
||
echo "::error::Plugin enable sırasında hata (Paper ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
if grep -i "havasaldirisi" "$LOG" | grep -qi "exception"; then
|
||
echo "::error::Plugin kaynaklı exception (Paper ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
|
||
echo "✔ Paper ${{ matrix.mc }} testi başarılı."
|
||
|
||
# ════════════════════════════════════════════════════════════════════
|
||
# 2b) TEST (LEGACY) — 1.8.8/1.12.2 Spigot (BuildTools ile) açılış testi
|
||
# ════════════════════════════════════════════════════════════════════
|
||
test-legacy:
|
||
needs: build
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
mc: ['1.8.8', '1.12.2']
|
||
name: Spigot ${{ matrix.mc }} (Java 8)
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Setup Java 8
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'temurin'
|
||
java-version: '8'
|
||
|
||
- name: Plugin JAR'ını indir
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: plugin-jar
|
||
path: ./jar
|
||
|
||
- name: Spigot ${{ matrix.mc }} önbelleği
|
||
id: cache-spigot
|
||
uses: actions/cache@v4
|
||
with:
|
||
path: spigot-server.jar
|
||
key: spigot-${{ matrix.mc }}
|
||
|
||
- name: Spigot'u BuildTools ile derle (önbellekte yoksa)
|
||
if: steps.cache-spigot.outputs.cache-hit != 'true'
|
||
run: |
|
||
curl -s -o BuildTools.jar \
|
||
https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
|
||
# BuildTools eski sürümlerde Java 8 ile çalışır
|
||
java -jar BuildTools.jar --rev ${{ matrix.mc }} || true
|
||
SPIGOT=$(ls spigot-*.jar 2>/dev/null | head -n1)
|
||
if [ -z "$SPIGOT" ]; then
|
||
echo "::error::Spigot ${{ matrix.mc }} derlenemedi"; exit 1
|
||
fi
|
||
cp "$SPIGOT" spigot-server.jar
|
||
|
||
- name: Sunucuyu hazırla
|
||
run: |
|
||
mkdir -p plugins
|
||
cp jar/*.jar plugins/
|
||
echo "eula=true" > eula.txt
|
||
cat > server.properties <<'EOF'
|
||
online-mode=false
|
||
level-type=FLAT
|
||
spawn-protection=0
|
||
max-players=1
|
||
view-distance=4
|
||
EOF
|
||
|
||
- name: Sunucuyu başlat ve açılışı doğrula
|
||
run: |
|
||
(
|
||
for i in $(seq 1 120); do
|
||
sleep 2
|
||
if grep -q "Done (" logs/latest.log 2>/dev/null; then sleep 3; break; fi
|
||
done
|
||
echo "stop"
|
||
) | timeout 240 java -Xmx2G -jar spigot-server.jar nogui || true
|
||
|
||
- name: Logları analiz et
|
||
run: |
|
||
LOG=logs/latest.log
|
||
echo "──────── Sunucu Logu (son 80 satır) ────────"
|
||
tail -n 80 "$LOG" || true
|
||
echo "─────────────────────────────────────────────"
|
||
if ! grep -q "BarisKeserTools" "$LOG"; then
|
||
echo "::error::Plugin etkinleşmedi (Spigot ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
if grep -qi "Could not load 'plugins" "$LOG"; then
|
||
echo "::error::Plugin yüklenemedi (Spigot ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
if grep -qi "Error occurred while enabling BarisKeserTools" "$LOG"; then
|
||
echo "::error::Plugin enable hatası (Spigot ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
if grep -qi "UnsupportedClassVersionError" "$LOG"; then
|
||
echo "::error::Bytecode uyumsuz! (Spigot ${{ matrix.mc }})"; exit 1
|
||
fi
|
||
echo "✔ Spigot ${{ matrix.mc }} testi başarılı."
|
||
|
||
# ════════════════════════════════════════════════════════════════════
|
||
# 2c) TEST (FOLIA) — Folia bölgesel-thread sunucusunda açılış testi
|
||
# ════════════════════════════════════════════════════════════════════
|
||
test-folia:
|
||
needs: build
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
include:
|
||
- { mc: '1.20.6', java: '21' }
|
||
- { mc: '1.21.1', java: '21' }
|
||
- { mc: '1.21.4', java: '21' }
|
||
name: Folia ${{ matrix.mc }} (Java ${{ matrix.java }})
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Setup Java ${{ matrix.java }}
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: 'temurin'
|
||
java-version: ${{ matrix.java }}
|
||
|
||
- name: Plugin JAR'ını indir
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: plugin-jar
|
||
path: ./jar
|
||
|
||
- name: Folia sunucusunu indir
|
||
id: folia_dl
|
||
run: |
|
||
V="${{ matrix.mc }}"
|
||
echo "Folia $V için son build alınıyor..."
|
||
BUILD=$(curl -s "https://api.papermc.io/v2/projects/folia/versions/$V/builds" \
|
||
| jq -r '.builds[-1].build')
|
||
if [ -z "$BUILD" ] || [ "$BUILD" = "null" ]; then
|
||
# Folia bu sürümü yayınlamamış — testi zarifçe atla (plugin hatası değil)
|
||
echo "::warning::Folia $V Folia API'sinde mevcut değil, test atlanıyor."
|
||
echo "available=false" >> "$GITHUB_OUTPUT"
|
||
exit 0
|
||
fi
|
||
JARNAME=$(curl -s "https://api.papermc.io/v2/projects/folia/versions/$V/builds/$BUILD" \
|
||
| jq -r '.downloads.application.name')
|
||
curl -s -o server.jar \
|
||
"https://api.papermc.io/v2/projects/folia/versions/$V/builds/$BUILD/downloads/$JARNAME"
|
||
echo "İndirildi: $JARNAME (build $BUILD)"
|
||
echo "available=true" >> "$GITHUB_OUTPUT"
|
||
|
||
- name: Sunucuyu hazırla
|
||
if: steps.folia_dl.outputs.available == 'true'
|
||
run: |
|
||
mkdir -p plugins
|
||
cp jar/*.jar plugins/
|
||
echo "eula=true" > eula.txt
|
||
cat > server.properties <<'EOF'
|
||
online-mode=false
|
||
level-type=flat
|
||
spawn-protection=0
|
||
max-players=1
|
||
view-distance=4
|
||
EOF
|
||
|
||
- name: Sunucuyu başlat ve açılışı doğrula
|
||
if: steps.folia_dl.outputs.available == 'true'
|
||
run: |
|
||
(
|
||
for i in $(seq 1 120); do
|
||
sleep 2
|
||
if grep -q "Done (" logs/latest.log 2>/dev/null; then sleep 3; break; fi
|
||
done
|
||
echo "stop"
|
||
) | timeout 240 java -Xmx2G -jar server.jar nogui || true
|
||
|
||
- name: Logları analiz et (Folia)
|
||
if: steps.folia_dl.outputs.available == 'true'
|
||
run: |
|
||
LOG=logs/latest.log
|
||
echo "──────── Folia Sunucu Logu (son 80 satır) ────────"
|
||
tail -n 80 "$LOG" || true
|
||
echo "───────────────────────────────────────────────────"
|
||
# 1) Plugin etkinleşti mi?
|
||
if ! grep -qi "Enabling BarisKeserTools" "$LOG" && ! grep -q "BarisKeserTools" "$LOG"; then
|
||
echo "::error::Plugin Folia'da etkinleşmedi (${{ matrix.mc }})"; exit 1
|
||
fi
|
||
# 2) folia-supported reddi
|
||
if grep -qi "is not marked as supporting Folia" "$LOG"; then
|
||
echo "::error::Plugin Folia-supported değil! (${{ matrix.mc }})"; exit 1
|
||
fi
|
||
# 3) Enable hatası / scheduler exception
|
||
if grep -qi "Error occurred while enabling BarisKeserTools" "$LOG"; then
|
||
echo "::error::Folia enable hatası (${{ matrix.mc }})"; exit 1
|
||
fi
|
||
if grep -i "havasaldirisi" "$LOG" | grep -qi "exception"; then
|
||
echo "::error::Folia plugin exception (${{ matrix.mc }})"; exit 1
|
||
fi
|
||
# 4) Folia'nın yasakladığı klasik scheduler kullanımı
|
||
if grep -qi "UnsupportedOperationException" "$LOG" | grep -qi "havasaldirisi"; then
|
||
echo "::error::Folia desteklenmeyen scheduler kullanımı (${{ matrix.mc }})"; exit 1
|
||
fi
|
||
echo "✔ Folia ${{ matrix.mc }} testi başarılı."
|
||
|
||
# ════════════════════════════════════════════════════════════════════
|
||
# 3) RELEASE — Tüm testler geçince GitHub Release + Modrinth
|
||
# Yalnızca main'e push'ta çalışır (PR'larda atlanır).
|
||
# ════════════════════════════════════════════════════════════════════
|
||
release:
|
||
needs: [build, test-paper, test-legacy, test-folia]
|
||
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||
runs-on: ubuntu-latest
|
||
permissions:
|
||
contents: write
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
|
||
- name: Plugin JAR'ını indir
|
||
uses: actions/download-artifact@v4
|
||
with:
|
||
name: plugin-jar
|
||
path: build/libs
|
||
|
||
- name: GitHub Release yayınla
|
||
uses: softprops/action-gh-release@v2
|
||
with:
|
||
tag_name: "v${{ needs.build.outputs.version }}"
|
||
name: "BarisKeserTools v${{ needs.build.outputs.version }}"
|
||
draft: false
|
||
prerelease: false
|
||
files: build/libs/*.jar
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
|
||
- name: Modrinth'e yayınla
|
||
uses: Kir-Antipov/mc-publish@v3.3
|
||
with:
|
||
modrinth-id: 'emZl4lnH'
|
||
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
|
||
files: build/libs/*.jar
|
||
name: "BarisKeserTools v${{ needs.build.outputs.version }}"
|
||
version: ${{ needs.build.outputs.version }}
|
||
version-type: release
|
||
loaders: |
|
||
paper
|
||
purpur
|
||
spigot
|
||
folia
|
||
bukkit
|
||
game-versions: |
|
||
1.8.8
|
||
1.9.4
|
||
1.10.2
|
||
1.11.2
|
||
1.12.2
|
||
1.13.2
|
||
1.14.4
|
||
1.15.2
|
||
1.16.5
|
||
1.17.1
|
||
1.18.2
|
||
1.19.4
|
||
1.20
|
||
1.20.1
|
||
1.20.2
|
||
1.20.4
|
||
1.20.6
|
||
1.21
|
||
1.21.1
|
||
1.21.3
|
||
1.21.4
|
||
1.21.5
|
||
1.21.6
|
||
1.21.7
|
||
1.21.8
|