The repository had no .gitattributes. With core.autocrlf=true a Windows checkout handed deploy/bootstrap.sh 2374 CRs, and bootstrap_asset.go embeds that file from the working tree verbatim, so a dev-built felis piped a CRLF script into `bash -s` on the target host. CI builds on Linux, which is why released binaries were clean and only local builds carried it. eol=lf is global rather than scoped to *.sh because go:embed reaches further than the installer: deploy/*/Dockerfile, deploy/*/entrypoint.sh, plugins/*/src, the migrations and internal/panel/static are all compiled in and read on Linux. *.bat is the one exception, for the gradle wrappers' Windows launchers. Renormalizing the index touched exactly one tracked file, cmd/felis/version.go, and only its line endings: `git diff --cached --ignore-cr-at-eol` reports nothing outside .gitattributes itself. TestBootstrapPinsViaBlockConnectionsOff used to strip \r\n before asserting, with a comment stating that the repository pinned no eol attribute. That is no longer true, and the stripping hid the regression this commit prevents. It now asserts the absence of CRs, so losing the attribute reports itself as line endings rather than as a missing serverside-blockconnections pin. Closes #5
9 lines
436 B
Plaintext
9 lines
436 B
Plaintext
# Everything in this repository is consumed on Linux: deploy/bootstrap.sh is embedded
|
|
# verbatim by bootstrap_asset.go and piped into `bash -s`, the Dockerfiles and entrypoints
|
|
# are read inside the images, and the operator ships YAML. Without eol=lf a Windows
|
|
# checkout under core.autocrlf=true hands all of them CRs.
|
|
* text=auto eol=lf
|
|
|
|
# The gradle wrappers' Windows launchers are the one thing that wants CRLF.
|
|
*.bat text eol=crlf
|