fix: build conformance offline when the deps are already cached (#81) #98

Merged
yuris merged 1 commit from conformance-offline into main 2026-08-21 18:21:09 +00:00
Owner

What #81 actually is

Two separate failures wearing one issue number.

The teardown race is fixed. html5-conformance.mjs:170 kills the process group, and the flake hunt found nothing: 21 v2 runs and 5 v1 runs green, no leaked chromium process, no leaked profile directory. The one stale /tmp/stdb-chromium-* on this box is dated Aug 19, before that fix.

What remains is not a race. After 18 runs GitHub began refusing, and three consecutive runs died with every phase untested:

SEVERE Failed to fetch library https://github.com/defold/extension-websocket/archive/refs/tags/4.2.3.zip: HTTP connect timed out

bob resolve re-contacts GitHub on every invocation, and the fetch is fatal even though the archive it wants is already sitting in .internal/lib. Same commit, fails then passes, and nothing to do with the SDK.

The fix

Both tiers now pass resolve to bob only when the cache is empty, so a warm checkout builds with no network at all. The HTML5 tier keeps the fetch for the fresh-checkout case and retries three times with backoff, because a transient GitHub failure must not read as a code failure.

Verification

  • Warm path: dependencies already resolved; building offline / using the extension archive already in .internal/lib, then PASS on both tiers.
  • Cold path: .internal/lib moved aside -> resolving dependencies (attempt 1) -> PASS, cache repopulated.
  • Loops after the fix: 6/6 v2, 5/5 v1, where the same v1 loop was 2/5 before it.
  • bash -n clean on both scripts.

No SDK code touched.

## What #81 actually is Two separate failures wearing one issue number. **The teardown race is fixed.** `html5-conformance.mjs:170` kills the process group, and the flake hunt found nothing: **21 v2 runs and 5 v1 runs green**, no leaked chromium process, no leaked profile directory. The one stale `/tmp/stdb-chromium-*` on this box is dated Aug 19, before that fix. **What remains is not a race.** After 18 runs GitHub began refusing, and three consecutive runs died with every phase untested: ``` SEVERE Failed to fetch library https://github.com/defold/extension-websocket/archive/refs/tags/4.2.3.zip: HTTP connect timed out ``` `bob resolve` re-contacts GitHub on every invocation, and the fetch is fatal even though the archive it wants is already sitting in `.internal/lib`. Same commit, fails then passes, and nothing to do with the SDK. ## The fix Both tiers now pass `resolve` to bob only when the cache is empty, so a warm checkout builds with no network at all. The HTML5 tier keeps the fetch for the fresh-checkout case and retries three times with backoff, because a transient GitHub failure must not read as a code failure. ## Verification - Warm path: `dependencies already resolved; building offline` / `using the extension archive already in .internal/lib`, then PASS on both tiers. - Cold path: `.internal/lib` moved aside -> `resolving dependencies (attempt 1)` -> PASS, cache repopulated. - Loops after the fix: **6/6 v2, 5/5 v1**, where the same v1 loop was 2/5 before it. - `bash -n` clean on both scripts. No SDK code touched.
fix: build conformance offline when the deps are already cached (#81)
Some checks failed
ci / ci (pull_request) Successful in 41s
conformance / conformance (v1) (pull_request) Failing after 26s
conformance / conformance (v2) (pull_request) Failing after 26s
451b4c68b6
Fifteen HTML5 runs in a row passed, so the teardown race that #81 named is
genuinely fixed. Then runs 18 through 20 failed in a row, and none of them
reached a phase: GitHub started refusing, and `bob resolve` re-downloads
extension-websocket on EVERY invocation even though the archive it wants is
already in .internal/lib. That is the same signature the issue describes -
same commit, fails then passes - and it is not a race, it is a download the
build does not need.

Both tiers now ask for `resolve` only when the cache is empty, so a
warm checkout builds with no network at all. The HTML5 tier keeps the fetch
for the fresh-checkout case and retries it three times with backoff, because
a transient GitHub failure must not read as a code failure.

Verified: warm path 21 v2 runs and 5 v1 runs green, cold path proven by
moving .internal/lib aside (resolve attempt 1, PASS).
yuris merged commit 349a6412ce into main 2026-08-21 18:21:09 +00:00
Sign in to join this conversation.
No description provided.