diff --git a/docker/regtest/docker-compose-common.yml b/docker/regtest/docker-compose-common.yml index aed7b682..d7b03264 100644 --- a/docker/regtest/docker-compose-common.yml +++ b/docker/regtest/docker-compose-common.yml @@ -21,6 +21,13 @@ services: - 62601 # obwatch - 28183 # jmwalletd api - 28283 # jmwalletd websocket + healthcheck: + test: ["CMD", "supervisorctl", "status"] + interval: 10s + timeout: 10s + retries: 20 + start_period: 60s + start_interval: 3s joinmarket_jam_standalone: build: @@ -40,3 +47,10 @@ services: expose: - 80 # nginx - 28183 # jmwalletd api + healthcheck: + test: [ "CMD", "dinitctl", "status", "jmwalletd" ] + interval: 10s + timeout: 10s + retries: 20 + start_period: 60s + start_interval: 3s diff --git a/docker/regtest/docker-compose.yml b/docker/regtest/docker-compose.yml index 59271807..5f95191c 100644 --- a/docker/regtest/docker-compose.yml +++ b/docker/regtest/docker-compose.yml @@ -19,9 +19,12 @@ services: - "joinmarket_datadir:/root/.joinmarket" - "initializer_datadir:/root/.regtest-initializer" depends_on: - - bitcoind - - bitcoind_regtest_initializer - - irc + bitcoind: + condition: service_healthy + bitcoind_regtest_initializer: + condition: service_started + irc: + condition: service_started joinmarket2: container_name: jm_regtest_joinmarket2 @@ -40,8 +43,12 @@ services: volumes: - "joinmarket2_datadir:/root/.joinmarket" depends_on: - - bitcoind - - irc + bitcoind: + condition: service_healthy + bitcoind_regtest_initializer: + condition: service_started + irc: + condition: service_started joinmarket3: container_name: jm_regtest_joinmarket3 @@ -61,9 +68,12 @@ services: - "joinmarket3_datadir:/root/.joinmarket" - "initializer_datadir:/root/.regtest-initializer" depends_on: - - bitcoind - - bitcoind_regtest_initializer - - irc + bitcoind: + condition: service_healthy + bitcoind_regtest_initializer: + condition: service_started + irc: + condition: service_started joinmarket_directory_node: container_name: jm_regtest_joinmarket_directory_node @@ -79,6 +89,13 @@ services: volumes: - "joinmarket_directory_node_datadir:/root/.joinmarket" - "./out/hidden_service_dir:/root/.joinmarket/hidden_service_dir:z" + healthcheck: + test: ["CMD", "supervisorctl", "status"] + interval: 10s + timeout: 10s + retries: 20 + start_period: 60s + start_interval: 3s irc: container_name: jm_regtest_irc @@ -92,7 +109,7 @@ services: bitcoind: container_name: jm_regtest_bitcoind restart: unless-stopped - image: polarlightning/bitcoind:27.0@sha256:7ac359cacd1c667fae321fe049d3d860eb85f1f14aff805e96246c5dc70f2f13 + image: polarlightning/bitcoind:28.0@sha256:ff435d758c89f01823924e057d5d5e4206d350ae69dff5e0dc1bbc9c6a36d010 command: # rpcauth (user=regtest; password=regtest) # rpcauth (user=joinmarket; password=joinmarket) @@ -136,6 +153,13 @@ services: volumes: - "bitcoin_datadir:/home/bitcoin/data" - "bitcoin_wallet_datadir:/home/bitcoin/walletdata" + healthcheck: + test: [ "CMD", "/entrypoint.sh", "bitcoin-cli", "-chain=regtest", "-rpcport=43782", "-datadir=/home/bitcoin/data", "-getinfo" ] + interval: 10s + timeout: 10s + retries: 20 + start_period: 60s + start_interval: 3s bitcoind_regtest_initializer: container_name: jm_regtest_bitcoind_initializer @@ -152,17 +176,25 @@ services: volumes: - "initializer_datadir:/root/.regtest-initializer" depends_on: - - bitcoind + bitcoind: + condition: service_healthy nginx: container_name: jm_regtest_nginx_test_basepath - image: nginx + image: nginx:1.27.4-alpine3.21@sha256:4ff102c5d78d254a6f0da062b3cf39eaf07f01eec0927fd21e219d0af8bc0591 volumes: - ./dockerfile-deps/nginx:/etc/nginx/templates ports: - "8000:80" extra_hosts: - "host.docker.internal:host-gateway" + healthcheck: + test: ["CMD-SHELL", "wget --output-document /dev/null http://127.0.0.1:80/health || exit 1"] + interval: 10s + timeout: 10s + retries: 20 + start_period: 60s + start_interval: 3s explorer: container_name: jm_regtest_explorer @@ -182,7 +214,8 @@ services: ports: - "3002:3002" depends_on: - - bitcoind + bitcoind: + condition: service_healthy volumes: bitcoin_datadir: diff --git a/docker/regtest/dockerfile-deps/joinmarket/directory_node/default.cfg b/docker/regtest/dockerfile-deps/joinmarket/directory_node/default.cfg index 90c9994d..308829d8 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/directory_node/default.cfg +++ b/docker/regtest/dockerfile-deps/joinmarket/directory_node/default.cfg @@ -363,6 +363,11 @@ size_factor = 0.1 gaplimit = 6 +# Disable the caching of addresses and scripts when +# syncing the wallet. You DO NOT need to set this to 'true', +# unless there is an issue of file corruption or a code bug. +wallet_caching_disabled = false + [SNICKER] # Any other value than 'true' will be treated as False, # and no SNICKER actions will be enabled in that case: diff --git a/docker/regtest/dockerfile-deps/joinmarket/latest/default.cfg b/docker/regtest/dockerfile-deps/joinmarket/latest/default.cfg index 5654b06c..73a1faed 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/latest/default.cfg +++ b/docker/regtest/dockerfile-deps/joinmarket/latest/default.cfg @@ -377,6 +377,11 @@ size_factor = 0.1 gaplimit = 6 +# Disable the caching of addresses and scripts when +# syncing the wallet. You DO NOT need to set this to 'true', +# unless there is an issue of file corruption or a code bug. +wallet_caching_disabled = false + [SNICKER] # Any other value than 'true' will be treated as False, # and no SNICKER actions will be enabled in that case: diff --git a/docker/regtest/dockerfile-deps/joinmarket/webui-standalone/default.cfg b/docker/regtest/dockerfile-deps/joinmarket/webui-standalone/default.cfg index 5654b06c..73a1faed 100644 --- a/docker/regtest/dockerfile-deps/joinmarket/webui-standalone/default.cfg +++ b/docker/regtest/dockerfile-deps/joinmarket/webui-standalone/default.cfg @@ -377,6 +377,11 @@ size_factor = 0.1 gaplimit = 6 +# Disable the caching of addresses and scripts when +# syncing the wallet. You DO NOT need to set this to 'true', +# unless there is an issue of file corruption or a code bug. +wallet_caching_disabled = false + [SNICKER] # Any other value than 'true' will be treated as False, # and no SNICKER actions will be enabled in that case: diff --git a/docker/regtest/dockerfile-deps/nginx/default.conf.template b/docker/regtest/dockerfile-deps/nginx/default.conf.template index 94f01c3b..213bf0d8 100644 --- a/docker/regtest/dockerfile-deps/nginx/default.conf.template +++ b/docker/regtest/dockerfile-deps/nginx/default.conf.template @@ -1,6 +1,6 @@ # To test the reverse proxy setup, run the dev server using: # -# PUBLIC_URL=/joinmarket npm start +# PUBLIC_URL=/joinmarket npm run dev # # And visit http://localhost:8000/joinmarket/extrapath/ # Note: Keep the trailing slash! @@ -29,4 +29,9 @@ server { location /joinmarket { proxy_pass http://host.docker.internal:3000/joinmarket; } + + location = /health { + default_type application/json; + return 200 '{ "status": "UP" }'; + } } diff --git a/docker/regtest/generate-onion-address.sh b/docker/regtest/generate-onion-address.sh index 61904a52..422d5c82 100755 --- a/docker/regtest/generate-onion-address.sh +++ b/docker/regtest/generate-onion-address.sh @@ -31,7 +31,7 @@ VANITYTORGEN_REPO_DIR="${WORKDIR}/vanitytorgen" # TODO: fork of "https://github.com/Kexkey/vanitytorgen" - should be forked by jam org? VANITYTORGEN_REPO_URL="https://github.com/theborakompanioni/vanitytorgen" VANITYTORGEN_REPO_BRANCH="main" -VANITYTORGEN_REPO_REF="85fa0c36208975f4e22bf10fb77b3d9bafb51979" +VANITYTORGEN_REPO_REF="f497346ab540153f06edabe65df37ae5536a2d9a" # onion addresses are base32 - base32 alphabet allows letters [a-z] and digits [2-7] PREFIX_CHARS="234567abcdefghijklmnopqrstuvwxyz" # "jam" diff --git a/package.json b/package.json index 2092815d..75e4bd4f 100644 --- a/package.json +++ b/package.json @@ -61,9 +61,10 @@ "version": "node scripts/changelog.mjs && git checkout -b \"prepare-v${npm_package_version}-$(date +%s)\" && git add --all && git commit --message \"chore(release): v${npm_package_version}\" && git push --set-upstream origin $(git branch --show-current)", "postversion": "which gh && gh pr create --title \"chore(release): v${npm_package_version}\" --body \"Prepares the v${npm_package_version} release.\" --assignee @me --label release --repo joinmarket-webui/jam --draft", "regtest:build": "npm run regtest:clear && docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml build --pull", - "regtest:rebuild": "npm run regtest:build -- --no-cache", + "regtest:rebuild": "rm -rf docker/regtest/.tmp && npm run regtest:build -- --no-cache", "regtest:clear": "docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml down --volumes --remove-orphans", - "regtest:up": "./docker/regtest/prepare-setup.sh && docker compose --env-file docker/regtest/.env.generated --file docker/regtest/docker-compose.yml up", + "regtest:up": "./docker/regtest/prepare-setup.sh && docker compose --env-file docker/regtest/.env.generated --file docker/regtest/docker-compose.yml up --detach --wait --wait-timeout 120", + "regtest:logs": "docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml logs --follow", "regtest:down": "docker compose --env-file docker/regtest/.env.example --file docker/regtest/docker-compose.yml down", "regtest:logs:jmwalletd": "docker exec -t jm_regtest_joinmarket tail -f /var/log/jam/jmwalletd_stdout.log", "regtest:logs:schedule": "docker exec -t jm_regtest_joinmarket tail -f /root/.joinmarket/logs/TUMBLE.schedule",