You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Since #263 merged (d45dfeb1), CI on master and on every PR is red. The
failing jobs are exclusively the self-hosted ones, and they fail in the Configure step, before any compilation: FetchContent's git clone of a
dependency is answered with a credential challenge, and git — having no tty —
aborts.
[1/9] Performing download step (git clone) for 'glaze-populate'
Cloning into 'glaze-src'...
fatal: could not read Username for 'https://github.com': No such device or address
fatal: expected flush after ref listing
Cloning into 'glaze-src'...
fatal: could not read Username for 'https://github.com': No such device or address
fatal: expected flush after ref listing
Cloning into 'glaze-src'...
fatal: could not read Username for 'https://github.com': No such device or address
fatal: expected flush after ref listing
Had to git clone more than once: 3 times.
CMake Error at glaze-subbuild/glaze-populate-prefix/tmp/glaze-populate-gitclone.cmake:50 (message):
Failed to clone repository: 'https://github.com/stephenberry/glaze.git'
CMake Error at /usr/local/share/cmake-3.31/Modules/FetchContent.cmake:1918 (message):
Build step for glaze failed: 1
stephenberry/glaze is public, so an anonymous clone needs no credentials. A
credential prompt means the server answered the ref advertisement with an
auth challenge rather than the refs.
Verification status
Measured on runs 33617999890 (master, d45dfeb1), 33626533084 and 33627249007 (PRs #394 and #395), all on 2026-09-02.
Confirmed:
Self-hosted only. Every failing job in every one of the three runs carries runs-on = self-hosted,Linux,X64,morph-docker. No GitHub-hosted job failed in
any of them.
Not a general network fault. In the same job, apt-get update over HTTPS
to apt.llvm.org, archive.ubuntu.com and ppa.launchpadcontent.net all
succeed, seconds before the clone fails. DNS, TLS and egress are fine.
Not a static misconfiguration of the image..github/self-hosted-runner/Dockerfile
and entrypoint.sh set no proxy, no insteadOf, no credential helper and no GIT_CONFIG. The same job name and preset (Linux / clang-tsan, clang-tsan) succeeded on morph-docker-5 and failed on morph-docker-4
inside run 33617999890. A bad ~/.gitconfig would fail every time.
The failing dependency varies.glaze in one run, reflection-cpp in
another — so it is not one repository or one URL.
Load correlation, measured — self-hosted jobs per run, and how many failed:
The two PR runs overlap, putting ~22 self-hosted jobs across 5 containers into
the same ten-minute window. Failure timestamps cluster tightly inside it — 11:57:11Z (×2), 11:59:08Z, 11:59:28Z, 11:59:31Z, 12:01:02Z. The
failure rate rises monotonically with how many jobs are configuring at once.
Inferred, not proven: that the challenge is GitHub throttling
unauthenticated git traffic from a single source IP. The five runners are five
containers on one host (.github/self-hosted-runner/README.md), so they share
one egress IP, and each configure clones several dependencies plus their
transitive ones. That fits every observation above — intermittency, load
correlation, which-dependency-varies, and an otherwise healthy network — but the HTTP status code is not in the logs, so the mechanism is inferred from
behaviour rather than read off the wire.
Not verified:
The actual HTTP response. git does not log it without GIT_CURL_VERBOSE=1 / GIT_TRACE=1, neither of which is set.
Whether GitHub-hosted runners survive because they are not throttled, or
because they never share an IP for long. Not tested.
I initially took "no git clone lines in a successful job's log" as evidence
that successful jobs never clone. That was wrong — FetchContent only
echoes its subbuild output when the subbuild fails, so a successful clone is
silent. Recording it because it is an easy trap for the next reader.
What would change the verdict
Confirmed if a failing configure is re-run with GIT_CURL_VERBOSE=1 and
shows a 401/429 from github.com, or if authenticating the clones (below)
makes the failures stop.
Refuted if the failures continue at the same rate with authenticated
clones, or if a run with exactly one self-hosted job in flight fails at the
same rate as a saturated one.
Suggested direction, not yet implemented
Authenticate the FetchContent clones on the self-hosted path, so they are
charged against a token's quota rather than the shared IP's anonymous one:
That is the standard remedy and needs no change to CMakeLists.txt. A vendored
or host-side dependency mirror would also remove the exposure and would cut
configure time, but is a larger change.
Filed rather than fixed: this is CI infrastructure that #263 has just landed,
and whoever owns that setup should choose the remedy.
Summary
Since #263 merged (
d45dfeb1), CI onmasterand on every PR is red. Thefailing jobs are exclusively the self-hosted ones, and they fail in the
Configurestep, before any compilation: FetchContent'sgit cloneof adependency is answered with a credential challenge, and git — having no tty —
aborts.
stephenberry/glazeis public, so an anonymous clone needs no credentials. Acredential prompt means the server answered the ref advertisement with an
auth challenge rather than the refs.
Verification status
Measured on runs
33617999890(master,d45dfeb1),33626533084and33627249007(PRs #394 and #395), all on 2026-09-02.Confirmed:
runs-on = self-hosted,Linux,X64,morph-docker. No GitHub-hosted job failed inany of them.
masteratd45dfeb1fails on its own, with no PRinvolved. PR ci: flip
!=back to==so those assertions are mutated at all #394 changes onlyscripts/scenario/*.pyand cannot affect aCMake configure.
apt-get updateover HTTPSto
apt.llvm.org,archive.ubuntu.comandppa.launchpadcontent.netallsucceed, seconds before the clone fails. DNS, TLS and egress are fine.
.github/self-hosted-runner/Dockerfileand
entrypoint.shset no proxy, noinsteadOf, no credential helper and noGIT_CONFIG. The same job name and preset (Linux / clang-tsan,clang-tsan) succeeded onmorph-docker-5and failed onmorph-docker-4inside run
33617999890. A bad~/.gitconfigwould fail every time.glazein one run,reflection-cppinanother — so it is not one repository or one URL.
Load correlation, measured — self-hosted jobs per run, and how many failed:
33617999890(master, alone)33626533084(PR #394)33627249007(PR #395, overlapping the above)The two PR runs overlap, putting ~22 self-hosted jobs across 5 containers into
the same ten-minute window. Failure timestamps cluster tightly inside it —
11:57:11Z(×2),11:59:08Z,11:59:28Z,11:59:31Z,12:01:02Z. Thefailure rate rises monotonically with how many jobs are configuring at once.
Inferred, not proven: that the challenge is GitHub throttling
unauthenticated git traffic from a single source IP. The five runners are five
containers on one host (
.github/self-hosted-runner/README.md), so they shareone egress IP, and each configure clones several dependencies plus their
transitive ones. That fits every observation above — intermittency, load
correlation, which-dependency-varies, and an otherwise healthy network — but
the HTTP status code is not in the logs, so the mechanism is inferred from
behaviour rather than read off the wire.
Not verified:
gitdoes not log it withoutGIT_CURL_VERBOSE=1/GIT_TRACE=1, neither of which is set.because they never share an IP for long. Not tested.
git clonelines in a successful job's log" as evidencethat successful jobs never clone. That was wrong — FetchContent only
echoes its subbuild output when the subbuild fails, so a successful clone is
silent. Recording it because it is an easy trap for the next reader.
What would change the verdict
GIT_CURL_VERBOSE=1andshows a
401/429fromgithub.com, or if authenticating the clones (below)makes the failures stop.
clones, or if a run with exactly one self-hosted job in flight fails at the
same rate as a saturated one.
Suggested direction, not yet implemented
Authenticate the FetchContent clones on the self-hosted path, so they are
charged against a token's quota rather than the shared IP's anonymous one:
That is the standard remedy and needs no change to
CMakeLists.txt. A vendoredor host-side dependency mirror would also remove the exposure and would cut
configure time, but is a larger change.
Filed rather than fixed: this is CI infrastructure that #263 has just landed,
and whoever owns that setup should choose the remedy.