Merge pull request #6867 from alvasw/makefile_enforce_jdk

Makefile: Enforce same JDK
This commit is contained in:
Alejandro García 2023-09-11 21:42:20 +00:00 committed by GitHub
commit 70b8195a8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 212 additions and 119 deletions

111
Makefile
View file

@ -100,7 +100,7 @@
# Set up everything necessary for deploying your localnet. This is the
# default target.
setup: build .localnet
setup: .localnet
clean: clean-build clean-localnet
@ -110,15 +110,6 @@ clean-build:
clean-localnet:
rm -rf .localnet ./dao-setup
# Build Bisq binaries and shell scripts used in the targets below
build: seednode/build desktop/build
seednode/build:
./gradlew :seednode:build
desktop/build:
./gradlew :desktop:build
# Unpack and customize a Bitcoin regtest node and Alice and Bob Bisq
# nodes that have been preconfigured with a blockchain containing the
# BSQ genesis transaction
@ -147,106 +138,22 @@ localnet: .localnet
# user, you'll need to manually run each of the targets listed below
# commands manually in a separate terminal or as background jobs.
deploy: setup
# ensure localnet is not already deployed
if screen -ls localnet | grep Detached; then false; fi
# create a new screen session named 'localnet'
screen -dmS localnet
# deploy each node in its own named screen window
for target in \
bitcoind \
seednode \
seednode2 \
alice \
bob \
mediator; do \
screen -S localnet -X screen -t $$target; \
screen -S localnet -p $$target -X stuff "make $$target\n"; \
done;
./gradlew :startRegtest
# give bitcoind rpc server time to start
sleep 5
# generate a block to ensure Bisq nodes get dao-synced
make block
tail -f .localnet/bitcoind_shell.log \
.localnet/seednode_1_shell.log \
.localnet/seednode_2_shell.log \
.localnet/alice_shell.log \
.localnet/bob_shell.log \
.localnet/mediator_shell.log
# Undeploy a running localnet by killing all Bitcoin and Bisq
# node processes, then killing the localnet screen session altogether
undeploy:
# kill all Bitcoind and Bisq nodes running in screen windows
screen -S localnet -X at "#" stuff "^C"
# quit all screen windows which results in killing the session
screen -S localnet -X at "#" kill
# remove dead screens
screen -wipe || true
bitcoind: .localnet
bitcoind \
-regtest \
-prune=0 \
-txindex=1 \
-peerbloomfilters=1 \
-server \
-rpcuser=bisqdao \
-rpcpassword=bsq \
-datadir=.localnet/bitcoind \
-blocknotify='.localnet/bitcoind/blocknotify %s'
seednode: seednode/build
./bisq-seednode \
--baseCurrencyNetwork=BTC_REGTEST \
--useLocalhostForP2P=true \
--useDevPrivilegeKeys=true \
--fullDaoNode=true \
--rpcUser=bisqdao \
--rpcPassword=bsq \
--rpcBlockNotificationPort=5120 \
--nodePort=2002 \
--userDataDir=.localnet \
--appName=seednode
seednode2: seednode/build
./bisq-seednode \
--baseCurrencyNetwork=BTC_REGTEST \
--useLocalhostForP2P=true \
--useDevPrivilegeKeys=true \
--fullDaoNode=true \
--rpcUser=bisqdao \
--rpcPassword=bsq \
--rpcBlockNotificationPort=5121 \
--nodePort=3002 \
--userDataDir=.localnet \
--appName=seednode2
mediator: desktop/build
./bisq-desktop \
--baseCurrencyNetwork=BTC_REGTEST \
--useLocalhostForP2P=true \
--useDevPrivilegeKeys=true \
--nodePort=4444 \
--appDataDir=.localnet/mediator \
--appName=Mediator
alice: setup
./bisq-desktop \
--baseCurrencyNetwork=BTC_REGTEST \
--useLocalhostForP2P=true \
--useDevPrivilegeKeys=true \
--nodePort=5555 \
--fullDaoNode=true \
--rpcUser=bisqdao \
--rpcPassword=bsq \
--rpcBlockNotificationPort=5122 \
--genesisBlockHeight=111 \
--genesisTxId=30af0050040befd8af25068cc697e418e09c2d8ebd8d411d2240591b9ec203cf \
--appDataDir=.localnet/alice \
--appName=Alice
bob: setup
./bisq-desktop \
--baseCurrencyNetwork=BTC_REGTEST \
--useLocalhostForP2P=true \
--useDevPrivilegeKeys=true \
--nodePort=6666 \
--appDataDir=.localnet/bob \
--appName=Bob
./gradlew :stopRegtest
# Generate a new block on your Bitcoin regtest network. Requires that
# bitcoind is already running. See the `bitcoind` target above.

View file

@ -0,0 +1,18 @@
package bisq.gradle.regtest_plugin
import org.gradle.api.DefaultTask
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
abstract class KillTask : DefaultTask() {
@get:Internal
abstract val pidFile: RegularFileProperty
@TaskAction
fun run() {
ProcessKiller(pidFile.asFile.get())
.kill()
}
}

View file

@ -0,0 +1,31 @@
package bisq.gradle.regtest_plugin
import java.io.File
class ProcessKiller(private val pidFile: File) {
companion object {
private const val SIG_INT_NUMBER = 2
}
fun kill() {
if (!pidFile.exists()) {
return
}
val pid = pidFile.readText()
val processBuilder = ProcessBuilder(
"kill",
"-s", SIG_INT_NUMBER.toString(),
pid
)
processBuilder.redirectErrorStream(true)
processBuilder.redirectOutput(ProcessBuilder.Redirect.DISCARD)
val process = processBuilder.start()
process.waitFor()
}
}

View file

@ -13,14 +13,22 @@ class RegtestPlugin : Plugin<Project> {
override fun apply(project: Project) {
val startBitcoindTask = project.tasks.register<StartBitcoindTask>("startRegtestBitcoind") {
pidFile.set(project.layout.projectDirectory.file(".localnet/bitcoind.pid"))
dataDirectory.set(project.layout.projectDirectory.dir(".localnet/bitcoind"))
rpcUser.set(RPC_USER)
rpcPassword.set(RPC_PASSWORD)
blockNotifyArg.set(".localnet/bitcoind/blocknotify %s")
}
val startFirstSeedNodeTask = project.tasks.register<StartSeedNodeTask>("startRegtestFirstSeednode") {
val stopBitcoindTask = project.tasks.register<KillTask>("stopRegtestBitcoind") {
pidFile.set(startBitcoindTask.flatMap { it.pidFile })
}
val startFirstSeedNodeTask = project.tasks.register<StartBisqTask>("startRegtestFirstSeednode") {
dependsOn(startBitcoindTask)
pidFile.set(project.layout.projectDirectory.file(".localnet/seednode_1.pid"))
startScriptFile.set(project.layout.projectDirectory.file("bisq-seednode"))
arguments.set(
@ -31,9 +39,15 @@ class RegtestPlugin : Plugin<Project> {
logFile.set(project.layout.projectDirectory.file(".localnet/seednode_1_shell.log"))
}
val startSecondSeedNodeTask = project.tasks.register<StartSeedNodeTask>("startRegtestSecondSeednode") {
val stopFirstSeedNodeTask = project.tasks.register<KillTask>("stopRegtestFirstSeednode") {
pidFile.set(startFirstSeedNodeTask.flatMap { it.pidFile })
}
val startSecondSeedNodeTask = project.tasks.register<StartBisqTask>("startRegtestSecondSeednode") {
dependsOn(startBitcoindTask)
dependsOn(startFirstSeedNodeTask)
pidFile.set(project.layout.projectDirectory.file(".localnet/seednode_2.pid"))
startScriptFile.set(project.layout.projectDirectory.file("bisq-seednode"))
arguments.set(
@ -43,20 +57,113 @@ class RegtestPlugin : Plugin<Project> {
workingDirectory.set(project.layout.projectDirectory)
logFile.set(project.layout.projectDirectory.file(".localnet/seednode_2_shell.log"))
}
val stopSeedNodeTask = project.tasks.register<KillTask>("stopRegtestSecondSeednode") {
pidFile.set(startSecondSeedNodeTask.flatMap { it.pidFile })
}
val startMediatorTask = project.tasks.register<StartBisqTask>("startRegtestMediator") {
dependsOn(startFirstSeedNodeTask)
dependsOn(startSecondSeedNodeTask)
pidFile.set(project.layout.projectDirectory.file(".localnet/mediator.pid"))
startScriptFile.set(project.layout.projectDirectory.file("bisq-desktop"))
arguments.set(
createBisqUserArgs(4444, ".localnet/mediator", "Mediator")
)
workingDirectory.set(project.layout.projectDirectory)
logFile.set(project.layout.projectDirectory.file(".localnet/mediator_shell.log"))
}
val stopMediatorTask = project.tasks.register<KillTask>("stopRegtestMediator") {
pidFile.set(startMediatorTask.flatMap { it.pidFile })
}
val startAliceTask = project.tasks.register<StartBisqTask>("startRegtestAlice") {
dependsOn(startFirstSeedNodeTask)
dependsOn(startSecondSeedNodeTask)
pidFile.set(project.layout.projectDirectory.file(".localnet/alice.pid"))
startScriptFile.set(project.layout.projectDirectory.file("bisq-desktop"))
val additionalArgs = listOf(
"--fullDaoNode=true",
"--rpcUser=bisqdao",
"--rpcPassword=bsq",
"--rpcBlockNotificationPort=5122",
"--genesisBlockHeight=111",
"--genesisTxId=30af0050040befd8af25068cc697e418e09c2d8ebd8d411d2240591b9ec203cf"
)
arguments.set(
createBisqUserArgs(5555, ".localnet/alice", "Alice", additionalArgs)
)
workingDirectory.set(project.layout.projectDirectory)
logFile.set(project.layout.projectDirectory.file(".localnet/alice_shell.log"))
}
val stopAliceTask = project.tasks.register<KillTask>("stopRegtestAlice") {
pidFile.set(startAliceTask.flatMap { it.pidFile })
}
val startBobTask = project.tasks.register<StartBisqTask>("startRegtest") {
dependsOn(startMediatorTask)
dependsOn(startAliceTask)
pidFile.set(project.layout.projectDirectory.file(".localnet/bob.pid"))
startScriptFile.set(project.layout.projectDirectory.file("bisq-desktop"))
arguments.set(
createBisqUserArgs(6666, ".localnet/bob", "Bob")
)
workingDirectory.set(project.layout.projectDirectory)
logFile.set(project.layout.projectDirectory.file(".localnet/bob_shell.log"))
}
project.tasks.register<KillTask>("stopRegtest") {
dependsOn(stopBitcoindTask)
dependsOn(stopFirstSeedNodeTask)
dependsOn(stopSeedNodeTask)
dependsOn(stopMediatorTask)
dependsOn(stopAliceTask)
pidFile.set(startBobTask.flatMap { it.pidFile })
}
}
private fun createSeedNodeArgs(blockNotificationPort: Int, nodePort: Int, appName: String): List<String> = listOf(
"--baseCurrencyNetwork=BTC_REGTEST",
"--useLocalhostForP2P=true",
"--useDevPrivilegeKeys=true",
"--fullDaoNode=true",
private fun createBisqUserArgs(nodePort: Int,
dataDir: String,
appName: String,
additionalArgs: List<String> = emptyList()): List<String> =
createBisqCommonArgs(nodePort) +
listOf(
"--appDataDir=$dataDir",
"--appName=$appName"
) + additionalArgs
"--rpcUser=${RPC_USER}",
"--rpcPassword=${RPC_PASSWORD}",
"--rpcBlockNotificationPort=$blockNotificationPort",
private fun createSeedNodeArgs(blockNotificationPort: Int, nodePort: Int, appName: String): List<String> =
createBisqCommonArgs(nodePort) +
listOf(
"--fullDaoNode=true",
"--nodePort=$nodePort",
"--userDataDir=.localnet",
"--appName=$appName"
)
"--rpcUser=${RPC_USER}",
"--rpcPassword=${RPC_PASSWORD}",
"--rpcBlockNotificationPort=$blockNotificationPort",
"--userDataDir=.localnet",
"--appName=$appName"
)
private fun createBisqCommonArgs(nodePort: Int): List<String> =
listOf(
"--baseCurrencyNetwork=BTC_REGTEST",
"--useLocalhostForP2P=true",
"--useDevPrivilegeKeys=true",
"--nodePort=$nodePort"
)
}

View file

@ -10,7 +10,7 @@ import org.gradle.api.tasks.InputFile
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
abstract class StartSeedNodeTask : DefaultTask() {
abstract class StartBisqTask : DefaultTask() {
@get:InputFile
abstract val startScriptFile: RegularFileProperty
@ -24,8 +24,17 @@ abstract class StartSeedNodeTask : DefaultTask() {
@get:Internal
abstract val logFile: RegularFileProperty
@get:Internal
abstract val pidFile: RegularFileProperty
@TaskAction
fun run() {
ProcessKiller(pidFile.asFile.get())
.kill()
// Wait until process stopped
Thread.sleep(5000)
val processBuilder = ProcessBuilder(
"bash", startScriptFile.asFile.get().absolutePath, arguments.get().joinToString(" ")
)
@ -34,6 +43,11 @@ abstract class StartSeedNodeTask : DefaultTask() {
processBuilder.redirectErrorStream(true)
processBuilder.redirectOutput(logFile.asFile.get())
processBuilder.start()
val process = processBuilder.start()
val pid = process.pid()
pidFile.asFile
.get()
.writeText(pid.toString())
}
}

View file

@ -2,13 +2,18 @@ package bisq.gradle.regtest_plugin
import org.gradle.api.DefaultTask
import org.gradle.api.file.DirectoryProperty
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.InputDirectory
import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction
abstract class StartBitcoindTask : DefaultTask() {
@get:Internal
abstract val pidFile: RegularFileProperty
@get:InputDirectory
abstract val dataDirectory: DirectoryProperty
@ -23,6 +28,12 @@ abstract class StartBitcoindTask : DefaultTask() {
@TaskAction
fun run() {
ProcessKiller(pidFile.asFile.get())
.kill()
// Wait until process stopped
Thread.sleep(5000)
val processBuilder = ProcessBuilder(
"bitcoind",
"-datadir=${dataDirectory.asFile.get().absolutePath}",
@ -42,6 +53,11 @@ abstract class StartBitcoindTask : DefaultTask() {
processBuilder.redirectErrorStream(true)
processBuilder.redirectOutput(ProcessBuilder.Redirect.DISCARD)
processBuilder.start()
val process = processBuilder.start()
val pid = process.pid()
pidFile.asFile
.get()
.writeText(pid.toString())
}
}