Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/e2e.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -61,9 +61,6 @@ jobs:
# (mineflayer/minecraft-data must support the target Minecraft version).
key: e2e-npm-${{ hashFiles('e2e/src/test/e2e/package-lock.json') }}

- name: Build Challenges jar (Maven)
run: mvn -B -DskipTests package

- name: Run E2E tests
working-directory: e2e
env:
Expand Down
4 changes: 4 additions & 0 deletions .mvn/wrapper/maven-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.12/apache-maven-3.9.12-bin.zip
distributionSha256Sum=305773a68d6ddfd413df58c82b3f8050e89778e777f3a745c8e5b8cbea4018ef
67 changes: 58 additions & 9 deletions e2e/build.gradle.kts
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
import java.net.URI
import me.drownek.plugwright.PlugwrightTestTask

plugins {
// Plugwright: boots a real Paper server, deploys plugins, drives Mineflayer bots.
id("io.github.drownek.plugwright") version "2.0.2"
id("java-base")
}

// --- Dependency jars -------------------------------------------------------------------------
Expand DownExpand Up@@ -31,15 +33,62 @@ val bskyblockJar = cachedJar(
"https://github.com/BentoBoxWorld/BSkyBlock/releases/download/1.20.0/BSkyBlock-1.20.0.jar"
)

// Maven-built Challenges jar (version/profile suffix varies: -SNAPSHOT-LOCAL locally, plain on CI).
val challengesJar: File = (file("../target").listFiles()?.toList() ?: emptyList())
.firstOrNull {
it.name.startsWith("Challenges-") && it.name.endsWith(".jar") &&
!it.name.contains("sources") && !it.name.contains("javadoc")
// If Gradle is running on Java 17, try to find a Java 21+ toolchain to satisfy Maven/Paper.
// If Gradle is already running on Java 21+ (e.g., 22, 23), don't force a strict toolchain lock.
val currentJava = JavaVersion.current()
val javaLauncherProvider = if (currentJava < JavaVersion.VERSION_21) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This narrows @mrfloris's toolchain point nicely, but doesn't fully close it: a developer on Java 17 with no JDK 21 installed still gets "no matching toolchains found" and no way to recover automatically. Gradle can provision one if you add the foojay resolver to e2e/settings.gradle.kts:

plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
}

Optional, but it's one line and it makes the "just run ./gradlew plugwrightTest" promise in the PR description actually true on a clean machine.

(On my Mac Gradle did find the Homebrew JDK 21 from a 17 daemon, so this only bites people who genuinely don't have a 21 anywhere.)

extensions.getByType<JavaToolchainService>().launcherFor {
languageVersion.set(JavaLanguageVersion.of(21))
}
?: throw GradleException(
"Challenges jar not found in ../target — run 'mvn -q -DskipTests package' first."
)
} else {
null
}

val buildChallenges = tasks.register<Exec>("buildChallenges") {
workingDir = file("..")

inputs.dir(file("../src"))
inputs.file(file("../pom.xml"))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor completeness point: .mvn/, mvnw and mvnw.cmd aren't inputs, so bumping the Maven version wouldn't retrigger the build. Cheap to add:

inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

Not a blocker — the src + pom.xml inputs are the ones that matter day to day, and I confirmed those work.

// The wrapper pins the Maven version, so a bump there has to retrigger the build too.
inputs.dir(file("../.mvn"))
inputs.file(file("../mvnw"))

val isWindows = System.getProperty("os.name").lowercase().contains("win")
val executable = if (isWindows) listOf("cmd", "/c", "mvnw.cmd") else listOf("./mvnw")
commandLine(executable + listOf("-q", "package", "-DskipTests"))

// Pass the correct JAVA_HOME to Maven if we needed a custom toolchain
if (javaLauncherProvider != null) {
environment["JAVA_HOME"] = javaLauncherProvider.get().metadata.installationPath.asFile.absolutePath

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Optional: javaLauncherProvider.get() here resolves the toolchain at configuration time, which forces the lookup (and potentially a provision) whenever the task is realised, even on a no-op run. Moving it into doFirst { environment("JAVA_HOME", …) } keeps it lazy and is friendlier to the configuration cache if this build ever turns that on.

Separately, the else branch overriding JAVA_HOME with java.home is a no-op in the normal case (Exec inherits the environment) but does override a JAVA_HOME the developer set deliberately when the daemon JVM was chosen via org.gradle.java.home. Narrow edge case, just noting it.

} else {
environment["JAVA_HOME"] = System.getProperty("java.home")
}

// Explicitly define the expected output file
val outputJar = layout.buildDirectory.file("Challenges.jar")
outputs.file(outputJar)

doFirst {
logger.lifecycle("Building Challenges project using Maven Wrapper (mvnw package)...")
}

doLast {
val builtJar = fileTree("../target") {
include("Challenges-*.jar")
exclude("*sources*", "*javadoc*")
}.files.maxByOrNull { it.lastModified() }
?: throw GradleException("No Challenges jar found in target/")

builtJar.copyTo(outputJar.get().asFile, overwrite = true)
}
}

tasks.named<PlugwrightTestTask>("plugwrightTest") {
dependsOn(buildChallenges)
if (javaLauncherProvider != null) {
javaLauncher.set(javaLauncherProvider)
}
}

plugwright {
minecraftVersion.set("1.21.11")
Expand All@@ -52,6 +101,6 @@ plugwright {
writeFiles {
file("plugins/BentoBox.jar", bentoboxJar)
file("plugins/BentoBox/addons/BSkyBlock.jar", bskyblockJar)
file("plugins/BentoBox/addons/Challenges.jar", challengesJar)
file("plugins/BentoBox/addons/Challenges.jar", file("build/Challenges.jar"))
}
}
Binary file modifiede2e/gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
5 changes: 4 additions & 1 deletion e2e/gradle/wrapper/gradle-wrapper.properties
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=84fbba45c7f4c64abc77460e1c00f541e9f960e3c7ed2538f1ede19eacd873ae
distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
6 changes: 3 additions & 3 deletions e2e/gradlew

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 12 additions & 23 deletions e2e/gradlew.bat

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading