Soul found that on a Windows clone (core.autocrlf=true) SHA256SUMS and MANIFEST.txt were written with CRLF, so the documented `sha256sum -c SHA256SUMS` failed on every line: each filename ended in \r. CI stayed green only because it checks out on Linux. After this rule and a fresh checkout, the check passes on Starfire for all four binaries. Provenance, recorded here because verify-committed only checks the committed files against the committed sums: run 35912901846 rebuilt all four binaries from scratch after they were committed, and every artifact is byte-identical to the committed file (libmsquic.so.2 c09a72f9..., libgamecult_mesh_quic_native.so 0ee3d283..., msquic.dll c17c6581..., gamecult_mesh_quic_native.dll 9dae391a...). Two independent CI builds produce the same bytes, which shows both where they came from and that the build is reproducible. Self edited this one-line config directly instead of dispatching Hands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
1.7 KiB
Text
31 lines
1.7 KiB
Text
# Auto detect text files and perform LF normalization
|
|
* text=auto
|
|
|
|
# Shell scripts keep LF in the working tree as well as in the index. Left to
|
|
# `text=auto`, a Windows clone writes them with carriage returns, and the
|
|
# documented Linux path then dies inside the container in under a second: the
|
|
# shebang reads as the interpreter `bash\r`, which does not exist. Nothing about
|
|
# that failure names line endings, and the same clone builds and tests fine
|
|
# everywhere else, so it reads as a broken image rather than a broken checkout.
|
|
#
|
|
# A clone checked out before this rule keeps its carriage returns, because the
|
|
# blob is unchanged and git has no reason to rewrite the file. The one-line
|
|
# repair is in native/GameCult.Mesh.Quic.Native/README.md, beside the container
|
|
# path it unblocks.
|
|
*.sh text eol=lf
|
|
|
|
# The committed CultMesh QUIC native binaries (cut 6, packaging) ride the
|
|
# deploy `git archive` as raw bytes. `* text=auto` already autodetects them as
|
|
# binary by content, but that autodetection is a heuristic; say so explicitly
|
|
# so no future text-processing rule (a diff driver, an export filter) can
|
|
# apply text conversion and poison the committed digests in SHA256SUMS.
|
|
packages/cultmesh-ts/native/**/*.dll binary
|
|
packages/cultmesh-ts/native/**/*.so binary
|
|
packages/cultmesh-ts/native/**/*.so.* binary
|
|
|
|
# The digest list and manifest beside them keep LF on every checkout. Left to
|
|
# `text=auto`, a Windows clone writes them with carriage returns, and the
|
|
# documented `sha256sum -c SHA256SUMS` then fails on every line (each filename
|
|
# ends in `\r`) while CI, checking out on Linux, stays green.
|
|
packages/cultmesh-ts/native/SHA256SUMS text eol=lf
|
|
packages/cultmesh-ts/native/MANIFEST.txt text eol=lf
|