From 9880adedaca15cfb5775f82e8508da1b1474444e Mon Sep 17 00:00:00 2001 From: Leumor <116955025+leumor@users.noreply.github.com> Date: Thu, 5 Feb 2026 19:57:12 +0000 Subject: [PATCH 1/2] fix(build): run NodeStarter with gradle run Align the Gradle run task with wrapper.conf by launching NodeStarter and applying required JVM flags so local runs match daemon expectations. Add runLauncher and update skills docs to keep launcher and run-task guidance explicit. --- .opencode/skills/cryptad-build-test/SKILL.md | 9 +++++++ .opencode/skills/cryptad-launcher-ui/SKILL.md | 4 +++ build.gradle.kts | 26 ++++++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/.opencode/skills/cryptad-build-test/SKILL.md b/.opencode/skills/cryptad-build-test/SKILL.md index ef50b799c5d..7e883e449b8 100644 --- a/.opencode/skills/cryptad-build-test/SKILL.md +++ b/.opencode/skills/cryptad-build-test/SKILL.md @@ -43,6 +43,15 @@ When running ./gradlew test via OpenCode bash, set timeout ≥ 15 minutes (≥ 9 - Compile only: - `./gradlew compileJava` +## Run tasks +- Run daemon entrypoint (`NodeStarter`): + - `./gradlew run` +- Pass daemon CLI args: + - `./gradlew run --args="--help"` + - `./gradlew run --args="--version"` +- Run Swing launcher entrypoint (`LauncherKt`): + - `./gradlew runLauncher` + ## Run your build (manual deployment) 1. Build: `./gradlew buildJar` 2. Stop the running node diff --git a/.opencode/skills/cryptad-launcher-ui/SKILL.md b/.opencode/skills/cryptad-launcher-ui/SKILL.md index eaadfd9cbe1..8aa8bfcf9eb 100644 --- a/.opencode/skills/cryptad-launcher-ui/SKILL.md +++ b/.opencode/skills/cryptad-launcher-ui/SKILL.md @@ -64,6 +64,10 @@ If `script` exists, the launcher may wrap the process to reduce buffering. - `build/cryptad-dist/bin/cryptad-launcher` - `build/cryptad-dist/bin/cryptad-launcher.bat` +## Local launcher entrypoint +- For local development without packaging, start the launcher directly with: + - `./gradlew runLauncher` + ## Local testing aid - `-PuseDummyCryptad=true` replaces `bin/cryptad` with `tools/cryptad-dummy.sh` in the dist for local testing. diff --git a/build.gradle.kts b/build.gradle.kts index 6e5420121fa..e8cb11fa8e8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -74,8 +74,32 @@ tasks.register("printVersion") { // Application entrypoint (used by jpackage). This does not change how we build the wrapper // distribution; it's only to inform launchers that invoke the Kotlin main directly. // Align with actual top-level entry in Launcher.kt -application { +application { mainClass.set("network.crypta.launcher.LauncherKt") } + +val nodeRuntimeJvmArgs = + listOf( + "-Dnetworkaddress.cache.ttl=0", + "-Dnetworkaddress.cache.negative.ttl=0", + "-Djava.net.preferIPv4Stack=false", + "--enable-native-access=ALL-UNNAMED", + "--add-opens=java.base/java.lang=ALL-UNNAMED", + "--add-opens=java.base/java.util=ALL-UNNAMED", + "--add-opens=java.base/java.io=ALL-UNNAMED", + "--add-opens=java.base/sun.nio.ch=ALL-UNNAMED", + "-enableassertions:freenet", + ) + +tasks.named("run") { + description = "Runs Cryptad daemon via NodeStarter" + mainClass.set("network.crypta.node.NodeStarter") + jvmArgs(nodeRuntimeJvmArgs) +} + +tasks.register("runLauncher") { + group = "application" + description = "Runs the Cryptad Swing launcher" mainClass.set("network.crypta.launcher.LauncherKt") + classpath = sourceSets.main.get().runtimeClasspath } // Sonar configuration is applied via the build-logic convention plugin 'cryptad.sonar' From d014f31acfbcc008af8b26660f3353be897f3d1c Mon Sep 17 00:00:00 2001 From: Leumor <116955025+leumor@users.noreply.github.com> Date: Thu, 5 Feb 2026 20:38:03 +0000 Subject: [PATCH 2/2] fix(build): use toolchain for runLauncher Set runLauncher to use the Java 25 toolchain so launcher execution matches project bytecode level instead of depending on the Gradle JVM. This prevents UnsupportedClassVersionError when Gradle runs on an older JDK. --- build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle.kts b/build.gradle.kts index e8cb11fa8e8..eec96b23879 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -98,6 +98,7 @@ tasks.named("run") { tasks.register("runLauncher") { group = "application" description = "Runs the Cryptad Swing launcher" + javaLauncher.set(javaToolchains.launcherFor { languageVersion.set(JavaLanguageVersion.of(25)) }) mainClass.set("network.crypta.launcher.LauncherKt") classpath = sourceSets.main.get().runtimeClasspath }