Files
temetro/.gitattributes
Khalid Abdi 7c92c03eed docker: stop a Windows checkout from breaking the backend image
The repo had no .gitattributes at all, so nothing pinned line endings —
`git ls-files --eol backend/docker-entrypoint.sh` showed an empty attr/.
Git for Windows installs with core.autocrlf=true, which rewrites the
entrypoint to CRLF on checkout. The image then ships a script whose
shebang is "#!/bin/sh\r" and the container dies at startup with

  exec /usr/local/bin/docker-entrypoint.sh: no such file or directory

naming the file it just copied in, which reads like the COPY failed.

Verified by building an image from a deliberately CRLF-ified copy of the
entrypoint: it reproduces that exact error, and passes with the sed.

Pin *.sh (and the Dockerfiles) to LF, and strip CR in the image before
chmod as well — .gitattributes only helps fresh clones, and a Windows
contributor who cloned before this commit still has CRLF on disk.
Renormalizing changes no tracked file today; this is purely a guard.

The arm64/Apple Silicon failure that prompted this is already fixed by
6127a0a (Turbopack has no musl/arm64 binding; the build uses webpack).
Confirmed by building both images on an arm64 Mac. Release publishes
linux/amd64 + linux/arm64, there are no bind mounts, no platform: keys
and no host.docker.internal, so the remaining cross-platform hazard was
just the line endings.

Also tighten .dockerignore: backend was shipping docker-compose.tunnel
.yml, fly.toml, railway.json, render.yaml, .env.example and
drizzle.config.ts into the build context; frontend was shipping
tsconfig.tsbuildinfo.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-15 20:27:03 +03:00

33 lines
1021 B
Plaintext

# Normalize line endings so the repo builds the same on Windows, macOS and Linux.
#
# Git for Windows installs with core.autocrlf=true by default, which rewrites
# checked-out files to CRLF. That is harmless for source we only ever compile,
# but fatal for anything the Docker images execute: a shell script whose shebang
# becomes "#!/bin/sh\r" fails at container start with
# exec /usr/local/bin/docker-entrypoint.sh: no such file or directory
# which names the file it just copied in and reads like the file is missing.
* text=auto
# Scripts that run inside a Linux container must stay LF regardless of platform.
*.sh text eol=lf
docker-entrypoint.sh text eol=lf
Dockerfile text eol=lf
*.Dockerfile text eol=lf
.dockerignore text eol=lf
# Lockfiles: keep LF so they don't churn across platforms.
package-lock.json text eol=lf
# Binary assets — never touch these.
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.webp binary
*.woff binary
*.woff2 binary
*.ttf binary
*.otf binary
*.pdf binary