From 46399516e343454b9259be0c810d41006d45a5d8 Mon Sep 17 00:00:00 2001 From: Alva Swanson Date: Sat, 5 Aug 2023 15:13:31 +0200 Subject: [PATCH] build-logic: Create 'bisq.application' plugin --- .../src/main/groovy/bisq.application.gradle | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 build-logic/commons/src/main/groovy/bisq.application.gradle diff --git a/build-logic/commons/src/main/groovy/bisq.application.gradle b/build-logic/commons/src/main/groovy/bisq.application.gradle new file mode 100644 index 00000000000..232aae91e62 --- /dev/null +++ b/build-logic/commons/src/main/groovy/bisq.application.gradle @@ -0,0 +1,65 @@ +plugins { + id 'bisq.java-conventions' + id 'application' +} + +build.dependsOn installDist +installDist.destinationDir = file('build/app') +distZip.enabled = false +distTar.enabled = false + +// the 'installDist' and 'startScripts' blocks below configure bisq executables to put +// generated shell scripts in the root project directory, such that users can easily +// discover and invoke e.g. ./bisq-desktop, ./bisq-seednode, etc. +// See https://stackoverflow.com/q/46327736 for details. + +installDist { + doLast { + // copy generated shell scripts, e.g. `bisq-desktop` directly to the project + // root directory for discoverability and ease of use + + copy { + from "$destinationDir/bin" + into rootProject.projectDir + } + // copy libs required for generated shell script classpaths to 'lib' dir under + // the project root directory + copy { + from "$destinationDir/lib" + into "${rootProject.projectDir}/lib" + } + + // edit generated shell scripts such that they expect to be executed in the + // project root dir as opposed to a 'bin' subdirectory + def windowsScriptFile = file("${rootProject.projectDir}/bisq-${applicationName}.bat") + windowsScriptFile.text = windowsScriptFile.text.replace( + 'set APP_HOME=%DIRNAME%..', 'set APP_HOME=%DIRNAME%') + + def unixScriptFile = file("${rootProject.projectDir}/bisq-$applicationName") + unixScriptFile.text = unixScriptFile.text.replace( + 'APP_HOME=$( cd "${APP_HOME:-./}.." && pwd -P ) || exit', 'APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit') + + if (applicationName == 'desktop') { + def script = file("${rootProject.projectDir}/bisq-$applicationName") + script.text = script.text.replace( + 'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="-XX:MaxRAM=8g -Xss1280k -XX:+UseG1GC ' + + '-XX:MaxHeapFreeRatio=10 -XX:MinHeapFreeRatio=5 -XX:+UseStringDeduplication ' + + '-Djava.net.preferIPv4Stack=true"') + } + + if (applicationName == 'apitest') { + // Pass the logback config file as a system property to avoid chatty + // logback startup due to multiple logback.xml files in the classpath + // (:daemon & :cli). + def script = file("${rootProject.projectDir}/bisq-$applicationName") + script.text = script.text.replace( + 'DEFAULT_JVM_OPTS=""', 'DEFAULT_JVM_OPTS="' + + '-Dlogback.configurationFile=apitest/build/resources/main/logback.xml"') + } + } +} + +startScripts { + // rename scripts from, e.g. `desktop` to `bisq-desktop` + applicationName = "bisq-$applicationName" +}