diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..4928cb0dfca --- /dev/null +++ b/.gitattributes @@ -0,0 +1,53 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Git auto-detects text vs binary; text files are stored as LF in the index. +* text=auto + +# Files that MUST be LF on every platform. +# Shell scripts, the Gradle wrapper launcher, the published KEYS file, and the +# Dockerfile all run on Linux during release verification. CRLF in any of them +# breaks the verification flow (kernel rejects scripts with bash\r shebangs and +# verify-keys.sh fails the byte-for-byte SVN comparison). +*.sh text eol=lf +gradlew text eol=lf +KEYS text eol=lf +Dockerfile text eol=lf +*.properties text eol=lf + +# Files that MUST be CRLF (Windows scripts). +*.bat text eol=crlf +*.cmd text eol=crlf +gradlew.bat text eol=crlf + +# Common binary types - never normalize. +*.jar binary +*.zip binary +*.gz binary +*.tgz binary +*.7z binary +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.ico binary +*.pdf binary +*.p12 binary +*.gpg binary +*.keystore binary +*.class binary +*.so binary +*.dylib binary +*.dll binary diff --git a/etc/bin/Dockerfile b/etc/bin/Dockerfile index 085843dbd13..675049eb75e 100644 --- a/etc/bin/Dockerfile +++ b/etc/bin/Dockerfile @@ -38,6 +38,15 @@ ADD --chown=groovy gradlew /home/groovy/scripts ADD --chown=groovy KEYS /home/groovy/scripts ADD --chown=groovy gradle/wrapper/gradle-wrapper.jar /home/groovy/scripts/gradle/wrapper ADD --chown=groovy gradle/wrapper/gradle-wrapper.properties /home/groovy/scripts/gradle/wrapper + +# Defensive line-ending normalization. The repository's .gitattributes pins +# shell scripts, gradlew, KEYS, and the Dockerfile to LF on every platform, but +# committers with a pre-existing local checkout under core.autocrlf=true may +# still feed CRLF into the build context. Linux refuses scripts with bash\r +# shebangs and verify-keys.sh would fail the byte-for-byte SVN comparison. +# Strip CRs from any text file that must be LF on Linux. +RUN find /home/groovy/scripts -type f \( -name '*.sh' -o -name 'gradlew' -o -name 'KEYS' -o -name '*.properties' \) -exec sed -i 's/\r$//' {} \; + ENV PATH="/home/groovy/scripts:/home/groovy/scripts/etc/bin:$PATH" ENV CI=true ENV LANG=C.UTF-8