diff --git a/.github/workflows/build_1_20_4.yml b/.github/workflows/build_1_20_4.yml_dis similarity index 97% rename from .github/workflows/build_1_20_4.yml rename to .github/workflows/build_1_20_4.yml_dis index e427438..577145a 100644 --- a/.github/workflows/build_1_20_4.yml +++ b/.github/workflows/build_1_20_4.yml_dis @@ -37,7 +37,7 @@ jobs: - name: Build project to paperclip jar uses: gradle/gradle-build-action@bd5760595778326ba7f1441bcf7e88b49de61a25 # v2.6.0 with: - arguments: createReobfPaperclipJar + arguments: createReobfBundlerJar createReobfPaperclipJar - name: Capture build artifacts uses: actions/upload-artifact@v3 with: diff --git a/.github/workflows/build_1_20_4_v2.yml b/.github/workflows/build_1_20_4_v2.yml new file mode 100644 index 0000000..0d45a57 --- /dev/null +++ b/.github/workflows/build_1_20_4_v2.yml @@ -0,0 +1,64 @@ +name: Luminol CI v2 - Ver/1.20.4 + +on: + push: + branches: [ "ver/1.20.4" ] + pull_request: + branches: [ "ver/1.20.4" ] + # workflow_dispatch: +permissions: write-all +jobs: + build: + runs-on: ubuntu-latest + environment: default + + steps: + - name: Checkout Git Repository + uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + - name: Setup Git Config + run: | + git config --global user.email "ci@luminolmc.com" + git config --global user.name "Luminol CI" + - name: Apply Patches + run: ./gradlew applyPatches + - name: Build + run: ./gradlew createReobfBundlerJar createReobfPaperclipJar + - uses: "actions/upload-artifact@v3" + with: + name: "Luminol CI Artifacts" + path: "build/libs/*.jar" + - name: Rename jar file + run: | + mv build/libs/luminol-bundler-1.20.4-R0.1-SNAPSHOT-reobf.jar build/libs/luminol-1.20.4-bundler.jar + mv build/libs/luminol-paperclip-1.20.4-R0.1-SNAPSHOT-reobf.jar build/libs/luminol-1.20.4-paperclip.jar + - name: setenv + run: | + sh scripts/SetENV.sh + echo "${{ env.tag }}" + - name: Create Release + if: "!contains(github.event.commits[0].message, '[release-skip]')" + uses: ncipollo/release-action@v1.12.0 + with: + tag: ${{ env.tag }} + name: Luminol ${{ env.mcversion }} - ${{ env.commitid }} + body: | + 📦Version: `${{ env.mcversion }}` | Commit ${{ env.commitid }} [![download](https://img.shields.io/github/downloads/LuminolMC/Luminol/${{ env.tag }}/total?color=0)](https://github.com/LeavesMC/LuminolMC/Luminol/download/${{ env.tag }}/luminol-1.20.4-paperclip.jar) + This release is automatically compiled by GitHub Actions + artifacts: | + build/libs/luminol-1.20.4-bundler.jar + build/libs/luminol-1.20.4-paperclip.jar + generateReleaseNotes: true + prerelease: ${{ env.pre }} + makeLatest: ${{ env.make_latest }} + token: "${{ secrets.GITHUB_TOKEN }}" + - name: Push to Api + if: "!contains(github.event.commits[0].message, '[release-skip]')" + env: + secret_v2: ${{ secrets.API_KEY }} + tag: ${{ env.tag }} + run: sh scripts/PushToAPI.sh diff --git a/README.md b/README.md index fb47da6..983484f 100644 --- a/README.md +++ b/README.md @@ -74,3 +74,4 @@ QQ群: [368632360](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MfosKhcDd8Fdxn1MREu Star历史表 + diff --git a/gradle.properties b/gradle.properties index 5c0e033..fa22334 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,3 +7,7 @@ org.gradle.caching = true org.gradle.parallel = true org.gradle.vfs.watch = false org.gradle.jvmargs = -Xmx3G + +mcVersion=1.20.4 +GroupMCV=1.20 +preVersion=false \ No newline at end of file diff --git a/patches/server/0064-Rewrite-linear-region-flush-task-dispatching.patch b/patches/server/0064-Rewrite-linear-region-flush-task-dispatching.patch new file mode 100644 index 0000000..f5dfafa --- /dev/null +++ b/patches/server/0064-Rewrite-linear-region-flush-task-dispatching.patch @@ -0,0 +1,120 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MrHua269 +Date: Fri, 12 Apr 2024 13:48:09 +0000 +Subject: [PATCH] Rewrite linear region flush task dispatching + + +diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java +index e40989889f3821bb7484fc0bae5d94b033013904..dc5a5f42c9ca7a50295c18424722568a3ad33fa5 100644 +--- a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java ++++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java +@@ -126,7 +126,7 @@ public class LinearRegionFile implements AbstractRegionFile, AutoCloseable { + } + + public void flush() throws IOException { +- if (isMarkedToSave()) flushWrapper(); // sync ++ if (getAndResetSaveMarker()) flushWrapper(); // sync + } + + private void markToSave() { +@@ -134,10 +134,18 @@ public class LinearRegionFile implements AbstractRegionFile, AutoCloseable { + markedToSave.set(true); + } + +- public boolean isMarkedToSave() { ++ public boolean getAndResetSaveMarker() { + return markedToSave.getAndSet(false); + } + ++ public boolean isMarkedToSave(){ ++ return this.markedToSave.get(); ++ } ++ ++ public void resetSaveMarker(){ ++ this.markedToSave.set(false); ++ } ++ + public void flushWrapper() { + try { + save(); +diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java +index f06d7767c79e465f999b2032086cc224de95152a..65435eb666b2e1cabffc145e016faa5e3b373464 100644 +--- a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java ++++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFileFlusher.java +@@ -1,17 +1,14 @@ + package dev.kaiijumc.kaiiju.region; + + import com.google.common.util.concurrent.ThreadFactoryBuilder; +-import java.util.Queue; ++ ++import java.util.Set; + import java.util.concurrent.*; + import org.bukkit.Bukkit; + + public class LinearRegionFileFlusher { +- private final Queue savingQueue = new LinkedBlockingQueue<>(); +- private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor( +- new ThreadFactoryBuilder() +- .setNameFormat("linear-flush-scheduler") +- .build() +- ); ++ private final Set pendingSaving = ConcurrentHashMap.newKeySet(); ++ + private final ExecutorService executor = Executors.newFixedThreadPool( + me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads, + new ThreadFactoryBuilder() +@@ -19,26 +16,42 @@ public class LinearRegionFileFlusher { + .build() + ); + ++ private final Executor delayedFlusher = CompletableFuture.delayedExecutor( ++ me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushFrequency, ++ TimeUnit.SECONDS, ++ executor ++ ); ++ + public LinearRegionFileFlusher() { + Bukkit.getLogger().info("Using " + me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushThreads + " threads for linear region flushing."); +- scheduler.scheduleAtFixedRate(this::pollAndFlush, 0L, me.earthme.luminol.config.modules.misc.RegionFormatConfig.linearFlushFrequency, TimeUnit.SECONDS); + } + + public void scheduleSave(LinearRegionFile regionFile) { +- if (savingQueue.contains(regionFile)) return; +- savingQueue.add(regionFile); +- } +- +- private void pollAndFlush() { +- while (!savingQueue.isEmpty()) { +- LinearRegionFile regionFile = savingQueue.poll(); +- if (!regionFile.closed && regionFile.isMarkedToSave()) +- executor.execute(regionFile::flushWrapper); ++ if (this.pendingSaving.contains(regionFile) || !regionFile.isMarkedToSave()){ ++ return; + } ++ ++ this.pendingSaving.add(regionFile); ++ this.delayedFlusher.execute(()->{ ++ try { ++ if (!regionFile.closed && regionFile.isMarkedToSave()){ ++ regionFile.flushWrapper(); ++ } ++ }finally { ++ regionFile.resetSaveMarker(); ++ this.pendingSaving.remove(regionFile); ++ } ++ }); + } + + public void shutdown() { +- executor.shutdown(); +- scheduler.shutdown(); ++ this.executor.shutdown(); ++ for (;;) { ++ try { ++ if (this.executor.awaitTermination(5_00,TimeUnit.MILLISECONDS)) break; ++ } catch (InterruptedException e) { ++ e.printStackTrace(); ++ } ++ } + } + } diff --git a/scripts/PushToAPI.sh b/scripts/PushToAPI.sh index e69de29..0bfbd59 100644 --- a/scripts/PushToAPI.sh +++ b/scripts/PushToAPI.sh @@ -0,0 +1,48 @@ +sha256() { + sha256sum $1 | awk '{print $1}' +} + +prop() { + grep "${1}" gradle.properties | cut -d'=' -f2 | sed 's/\r//' +} + +project_id="luminol" +mcversion_group=$(prop GroupMCV) +mcversion=$(prop mcVersion) +pre=$(prop preVersion) + +if [ $pre = "true" ]; then + channel="experimental" +else + channel="default" +fi +changes=$(git log -1 --pretty="[{\"commit\": \"%H\", \"message\": \"%s\", \"summary\": \"%s\"}]") +jar_sha256=`sha256 build/libs/luminol-1.20.4-paperclip.jar` +jar_name="luminol-1.20.4-paperclip.jar" +ctime=$(date -u +"%s")"000" + +# v2 +echo "Authentication: $secret_v2" +#echo "{\"version_group\":\"$mcversion_group\",\"channel\":\"$channel\",\"changes\":\"$changes\",\"jar_name\":\"$jar_name\",\"sha256\":\"$jar_sha256\",\"release_tag\":\"$tag\",\"time\":\"$ctime\"}" > data.json +json=$(printf "{\\\"channel\\\":\\\"%s\\\", \\\"jar_name\\\":\\\"%s\\\", \\\"sha256\\\":\\\"%s\\\", \\\"tag\\\":\\\"%s\\\", \\\"time\\\":\\\"%s\\\", \\\"changes\\\":\\\"%s\\\"}" \ + "$channel" "$jar_name" "$jar_sha256" "$tag" "$ctime" "$changes") +echo "[DEBUG] $json" +echo "[DEBUG] $changes" +echo "[DEBUG] curl --location --request POST \"https://api.luminolmc.com/v2/projects/$project_id/$mcversion/build/commit\" \ + -H \"Content-Type: application/x-www-form-urlencoded\" \ + -H \"Authorization: $secret_v2\" \ + --data-urlencode \"channel=$channel\" \ + --data-urlencode \"jar_name=$jar_name\" \ + --data-urlencode \"sha256=$jar_sha256\" \ + --data-urlencode \"release_tag=$tag\" \ + --data-urlencode \"time=$ctime\" \ + --data-urlencode \"changes=$changes\"" +curl -L --request POST "https://api.luminolmc.com/v2/projects/$project_id/$mcversion/build/commit" \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -H "Authorization: $secret_v2" \ + --data-urlencode "channel=$channel" \ + --data-urlencode "jar_name=$jar_name" \ + --data-urlencode "sha256=$jar_sha256" \ + --data-urlencode "release_tag=$tag" \ + --data-urlencode "time=$ctime" \ + --data-urlencode "changes=$changes" diff --git a/scripts/SetENV.sh b/scripts/SetENV.sh new file mode 100644 index 0000000..88f4caa --- /dev/null +++ b/scripts/SetENV.sh @@ -0,0 +1,18 @@ +prop() { + grep "${1}" gradle.properties | cut -d'=' -f2 | sed 's/\r//' +} + +commitid=$(git log --pretty='%h' -1) +mcversion=$(prop mcVersion) +preVersion=$(prop preVersion) +release_tag="$mcversion-$commitid" +jarName="build/libs/luminol-1.20.4-paperclip.jar" +make_latest=$([ $preVersion = "true" ] && echo "false" || echo "true") + +echo "commitid=$commitid" >> $GITHUB_ENV +echo "mcversion=$mcversion" >> $GITHUB_ENV +echo "$mcversion" +echo "tag=$release_tag" >> $GITHUB_ENV +echo "jar=$jarName" >> $GITHUB_ENV +echo "pre=$preVersion" >> $GITHUB_ENV +echo "make_latest=$make_latest" >> $GITHUB_ENV