Files
Barış Keser 2ad5efc038 ci: Folia testini dayaniklilastir (mevcut olmayan surumu zarifce atla) + README v1.4.0
- 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.
2026-06-06 19:28:46 +03:00

438 lines
17 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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