ci: route all nimble build tasks through --useSystemNim

The Windows build hung for 6h (until Actions cancelled it) at
`nimble wakunode2`, on "Downloading nim-lang/Nim.git using git".

`nimble setup` runs with --localdeps, so the locked nim is never placed
in nimbledeps/. Every later `nimble <task>` re-resolves deps, finds nim
missing, and clones the full Nim repo from git — a fetch that completes
on Linux/macOS but blocks forever on the MSYS2 runner.

--useSystemNim cannot be set from inside waku.nimble: it is a nimble CLI
flag governing the dependency resolution that wraps the task, and the
.nimble file is evaluated as part of that step. So fix it at the single
place every task is invoked — the Makefile NIMBLE variable.

NIMBLE resolves nimble via PATH rather than $(HOME)/.nimble/bin: on the
MSYS2 Windows runner that absolute path does not hold the binary (it is
on PATH via the workflow's GITHUB_PATH), so a hardcoded path fails with
"No such file or directory". Bare `nimble` works on every platform.

clean and the global nph install stay bare; they resolve no project deps.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Ivan FB 2026-06-02 22:01:30 +02:00
parent eadd7dcc06
commit 1e87fb714e
No known key found for this signature in database
GPG Key ID: DF0C67A04C543270

View File

@ -24,7 +24,14 @@ export PATH := $(HOME)/.nimble/bin:$(PATH)
# NIM binary location
NIM_BINARY := $(shell which nim 2>/dev/null)
NPH := $(HOME)/.nimble/bin/nph
NIMBLE := $(HOME)/.nimble/bin/nimble
# Resolve nimble via PATH (not an absolute path): on the MSYS2 Windows runner
# $(HOME)/.nimble/bin does not hold the binary, so a hardcoded path is "not
# found", whereas PATH is populated for every platform (see export PATH above
# and the workflow's GITHUB_PATH). --useSystemNim makes every invocation reuse
# the nim already on PATH: nimble re-resolves the locked deps before each task,
# and since setup runs with --localdeps the locked nim is never installed, so
# without this nimble re-clones nim-lang/Nim — a fetch that hangs on Windows.
NIMBLE := nimble --useSystemNim
NIMBLEDEPS_STAMP := nimbledeps/.nimble-setup
# Compilation parameters
@ -204,7 +211,7 @@ clean: | clean-librln
testcommon: | build-deps build
echo -e $(BUILD_MSG) "build/$@" && \
nimble testcommon
$(NIMBLE) testcommon
##########
## Waku ##
@ -213,47 +220,47 @@ testcommon: | build-deps build
testwaku: | build-deps build rln-deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble test
$(NIMBLE) test
wakunode2: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble wakunode2
$(NIMBLE) wakunode2
benchmarks: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble benchmarks
$(NIMBLE) benchmarks
testwakunode2: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble testwakunode2
$(NIMBLE) testwakunode2
example2: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble example2
$(NIMBLE) example2
chat2: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble chat2
$(NIMBLE) chat2
chat2mix: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble chat2mix
$(NIMBLE) chat2mix
rln-db-inspector: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble rln_db_inspector
$(NIMBLE) rln_db_inspector
chat2bridge: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble chat2bridge
$(NIMBLE) chat2bridge
liteprotocoltester: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble liteprotocoltester
$(NIMBLE) liteprotocoltester
lightpushwithmix: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble lightpushwithmix
$(NIMBLE) lightpushwithmix
api_example: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
@ -261,12 +268,12 @@ api_example: | build-deps build deps librln
build/%: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$*" && \
nimble buildone $*
$(NIMBLE) buildone $*
compile-test: | build-deps build deps librln
echo -e $(BUILD_MSG) "$(TEST_FILE)" "\"$(TEST_NAME)\"" && \
nimble buildTest $(TEST_FILE) && \
nimble execTest $(TEST_FILE) "\"$(TEST_NAME)\""
$(NIMBLE) buildTest $(TEST_FILE) && \
$(NIMBLE) execTest $(TEST_FILE) "\"$(TEST_NAME)\""
################
## Waku tools ##
@ -277,11 +284,11 @@ tools: networkmonitor wakucanary
wakucanary: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble wakucanary
$(NIMBLE) wakucanary
networkmonitor: | build-deps build deps librln
echo -e $(BUILD_MSG) "build/$@" && \
nimble networkmonitor
$(NIMBLE) networkmonitor
############
## Format ##
@ -327,7 +334,7 @@ clean:
docs: | build deps
echo -e $(BUILD_MSG) "build/$@" && \
nimble doc --run --index:on --project --out:.gh-pages waku/waku.nim waku.nims
$(NIMBLE) doc --run --index:on --project --out:.gh-pages waku/waku.nim waku.nims
coverage:
echo -e $(BUILD_MSG) "build/$@" && \
@ -424,10 +431,10 @@ else ifeq ($(detected_OS),Linux)
endif
libwaku: | build-deps librln
nimble --verbose libwaku$(BUILD_COMMAND) waku.nimble
$(NIMBLE) --verbose libwaku$(BUILD_COMMAND) waku.nimble
liblogosdelivery: | build-deps librln
nimble --verbose liblogosdelivery$(BUILD_COMMAND) waku.nimble
$(NIMBLE) --verbose liblogosdelivery$(BUILD_COMMAND) waku.nimble
logosdelivery_example: | build liblogosdelivery
@echo -e $(BUILD_MSG) "build/$@"
@ -502,7 +509,7 @@ endif
build-libwaku-for-android-arch:
ifneq ($(findstring /nix/store,$(LIBRLN_FILE)),)
mkdir -p $(CURDIR)/build/android/$(ABIDIR)/
CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_ARCH=$(ANDROID_ARCH) ANDROID_COMPILER=$(ANDROID_COMPILER) ANDROID_TOOLCHAIN_DIR=$(ANDROID_TOOLCHAIN_DIR) nimble libWakuAndroid
CPU=$(CPU) ABIDIR=$(ABIDIR) ANDROID_ARCH=$(ANDROID_ARCH) ANDROID_COMPILER=$(ANDROID_COMPILER) ANDROID_TOOLCHAIN_DIR=$(ANDROID_TOOLCHAIN_DIR) $(NIMBLE) libWakuAndroid
else
./scripts/build_rln_android.sh $(CURDIR)/build $(LIBRLN_BUILDDIR) $(LIBRLN_VERSION) $(CROSS_TARGET) $(ABIDIR)
endif
@ -559,7 +566,7 @@ else
endif
build-libwaku-for-ios-arch:
IOS_SDK=$(IOS_SDK) IOS_ARCH=$(IOS_ARCH) IOS_SDK_PATH=$(IOS_SDK_PATH) nimble libWakuIOS
IOS_SDK=$(IOS_SDK) IOS_ARCH=$(IOS_ARCH) IOS_SDK_PATH=$(IOS_SDK_PATH) $(NIMBLE) libWakuIOS
libwaku-ios-device: IOS_ARCH=arm64
libwaku-ios-device: IOS_SDK=iphoneos