diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 677fc1756afed538e41308fd255591858af1dcd0..f8631d704c591c762421dd76eb0c70b5abad70e0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -111,6 +111,24 @@ FileFormatCheck: - git fetch upstream - scripts/check-file-format.sh upstream +FileEndCheck: + stage: checkFormat + image: alpine + tags: + - docker + only: + refs: + - merge_requests + variables: + - $CI_MERGE_REQUEST_PROJECT_PATH == "computing/cbmroot" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" + script: + # Get the upstream repository manually. I did not find any other way to have it for + # comparison + - apk update && apk add git bash file + - scripts/connect_upstream_repo.sh $CI_MERGE_REQUEST_PROJECT_URL + - git fetch upstream + - scripts/check-file-ending.sh upstream + CbmRoot_Continuous: stage: build tags: diff --git a/scripts/check-file-ending.sh b/scripts/check-file-ending.sh new file mode 100755 index 0000000000000000000000000000000000000000..775f2be86ce9c1baa4f37ca82e851b4fcfda3d08 --- /dev/null +++ b/scripts/check-file-ending.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +if [[ $# -eq 1 ]]; then + UPSTREAM=$1 +else + if [ -z $UPSTREAM ]; then + UPSTREAM=$(git remote -v | grep git.cbm.gsi.de[:/]computing/cbmroot | cut -f1 | uniq) + if [ -z $UPSTREAM ]; then + echo "Error: Name of upstream repository not provided and not found by automatic means" + echo 'Please provide if by checking your remotes with "git remote -v" and exporting UPSTREAM' + echo "or passing as an argument" + exit -1 + fi + fi +fi +echo "Upstream name is :" $UPSTREAM + + +# If one wants to find all files in the CbmRoot and not only the changed ones +# uncomment the follwing line and comment the next two +#CHANGED_FILES=$(find . -type f -not \( -path "./.git/*" -o -path "./geometry/*" -o -path "./input/*" -o -path "./external/*" -o -path "./parameters/*" -prune \)) + +BASE_COMMIT=$UPSTREAM/master +CHANGED_FILES=$(git diff --name-only $BASE_COMMIT) + +echo "" +for file in $CHANGED_FILES; do + + # First check for text files and only do the further test on line endings + # for text files + result=$(file $file | grep -v text) + if [[ -z $result ]]; then + if [[ $(tail -c 1 $file) ]]; then + echo "File $file does not finish with end of line" + okay=false + fi + fi +done + +if [[ "$okay" = "false" ]]; then + echo "" + echo "Not all files have the correct file ending" + echo "Test failed" + echo "" + exit 1 +else + exit 0 +fi +