Repository navigation
fix(ci): address recurring Testsuite failures on macOS and dmd-master jobs - #3176
Merged
Merged
Conversation
|
✅ PR OK, no changes in deprecations or warnings Total deprecations: 0 Total warnings: 0 Build statistics: statistics (-before, +after)
executable size=5688656 bin/dub
rough build time=43sFull build output |
Member
|
@Geod24 can you split your changes in atomic commits? |
Member
Author
|
Yeah will do - need dlang/dmd#24127 first anyway, as ubuntu isn't going to pass without it. |
The 1s/2s/10s `timeout` budgets raced DUB's own internal timeouts (default 8s) — DUB startup alone can take a second or two, especially in coverage builds on loaded runners — and the `! cmd; rc=$?` / `if cmd; elif [ $? -eq 124 ]` idioms under `set -e` made the rc==124 checks dead code, so flakes showed up as misleading status codes. Capture the exit status explicitly and distinguish a timeout (124, a hang) from other failures, with budgets generous enough to only ever catch actual hangs. Co-Authored-By: Claude Code <noreply@anthropic.com>
When the ninja generator tests failed, the exit status alone carried no diagnostic information. Dump the captured output of every failing invocation and split the regeneration checks so the exact failure mode is visible in CI logs. This is what surfaced the upstream dmd segfault: the ninja children intermittently die with status 139 on dmd master nightlies since dmd#23999 (bump-allocator heap corruption). Co-Authored-By: Claude Code <noreply@anthropic.com>
Member
Author
|
Three commits. Also submitted vibe-d/vibe-stream#24 . Still haven't managed to land the PR I intended to though 😅 |
vibe-stream 1.5.1 drops the hardcoded
`-L/usr/local/opt/openssl{,@1.1}/lib` lflags on macOS, which took
precedence over LIBRARY_PATH and pointed at paths that don't exist on
ARM runners (falling back to the system LibreSSL) or at the stale
OpenSSL 1.1.1w keg on Intel runners (clashing with the OpenSSL 3.x
API the deimos bindings select via pkg-config).
Also bump openssl to 3.4.0, as the new vibe-stream:tls requires
`~>3.4`.
Co-Authored-By: Claude Code <noreply@anthropic.com>
The OpenSSL-using test dependencies (vibe-stream:tls, openssl bindings) must agree on one libssl: the linker finds it via LIBRARY_PATH, while the deimos bindings select their API version via pkg-config. On ARM64 runners neither is set, so the link falls back to the system LibreSSL (missing DTLSv1_* symbols), and any bindings/libssl version mix yields undefined symbols such as _ERR_new or _SSL_get1_peer_certificate. Install openssl@3 and point LIBRARY_PATH and PKG_CONFIG_PATH at it, so the libssl actually linked always matches the selected bindings. Since vibe-stream 1.5.1 removed the hardcoded `-L/usr/local/opt/openssl` lflags, no other workaround is needed. Also use `brew --prefix` for the GNU utils PATH so the step works on ARM (/opt/homebrew) as well as Intel (/usr/local). Co-Authored-By: Claude Code <noreply@anthropic.com>
thewilsonator
approved these changes
Oct 30, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three distinct issues have been keeping the Testsuite workflow red:
test: give fetchzip.sh and timeout.sh realistic timeout budgets The `timeout 1s`/`timeout 2s` budgets around `$DUB` invocations were exceeded by DUB's total runtime (startup + fetch) on slow runners, especially with coverage-instrumented builds, so `timeout` killed DUB after it had already printed success. Additionally, in fetchzip.sh the `rc -eq 124` checks were unreachable because the ERR trap fired on the `timeout` command itself before the checks could run; restructure the commands with `|| rc=$?` so the exit status is actually inspected. Budgets are now generous (30-60s): they only need to catch hangs, the semantic checks (DUB's own 8s HTTP timeout, retry counts) are unchanged.
ci: fix OpenSSL resolution on ARM64 macOS runners vibe-d:tls hardcodes `-L/usr/local/opt/openssl@1.1/lib`, which only exists for Intel Homebrew. On ARM64 runners (Homebrew in /opt/homebrew) `-lssl` fell back to the system LibreSSL, which lacks the deprecated DTLSv1_* symbols, so linking dub-test-library-nonet failed with undefined symbols. Install openssl@3 and export LIBRARY_PATH/PKG_CONFIG_PATH via `brew --prefix` (also making the coreutils PATH arch-independent).
test: print captured output when ninja generator tests fail The ninja tests used `execute()` which captures the subprocess output, so CI failures ('initial ninja build failed', 'build.ninja was not actually regenerated') carried no diagnostic information at all. Dump the captured output and distinguish the regen failure modes, so the remaining intermittent dmd-master failures can be diagnosed.