cp2k/tools/docker/scripts/ci_entrypoint.sh
2021-07-05 14:30:20 +02:00

65 lines
1.8 KiB
Bash
Executable file

#!/bin/bash -e
# author: Ole Schuett
set -eo pipefail
ulimit -c 0 # Disable core dumps as they can take a very long time to write.
# Calculate checksums of critical files.
CHECKSUMS=/workspace/checksums.md5
shopt -s nullglob # ignore missing files
md5sum /workspace/cp2k/Makefile \
/workspace/cp2k/tools/build_utils/* \
/workspace/cp2k/arch/local* \
> $CHECKSUMS
shopt -u nullglob
# Get cp2k sources.
if [ -n "${GIT_REF}" ]; then
echo -e "\n========== Fetching Git Commit =========="
cd /workspace/cp2k
git fetch --quiet origin "${GIT_BRANCH}"
git checkout --quiet "${GIT_REF}"
git submodule update --init --recursive
git --no-pager log -1 --pretty='%nCommitSHA: %H%nCommitTime: %ci%nCommitAuthor: %an%nCommitSubject: %s%n'
elif [ -d /mnt/cp2k ]; then
echo -e "\n========== Copying Changed Files =========="
# We can't rely on timestamps as they depend on the git checkout time.
# Hence, we use checksums despite the IO because a full rebuild would be even more costly.
rsync --checksum \
--delete \
--executability \
--verbose \
--recursive \
--exclude="*~" \
--exclude=".*/" \
--exclude="*.py[cod]" \
--exclude="__pycache__" \
--exclude="/obj/" \
--exclude="/lib/" \
--exclude="/exe/" \
--exclude="/regtesting/" \
--exclude="/arch/local*" \
--exclude="/tools/toolchain/build/" \
--exclude="/tools/toolchain/install/" \
/mnt/cp2k/ /workspace/cp2k/
else
echo "Neither GIT_REF nor /mnt/cp2k found - aborting."
exit 255
fi
if ! md5sum --status --check ${CHECKSUMS}; then
echo -e "\n========== Cleaning Build Cache =========="
cd /workspace/cp2k
make distclean
fi
# Run actual test.
echo -e "\n========== Running Test =========="
cd /workspace
if ! "$@"; then
echo -e "\nSummary: Test had non-zero exit status.\nStatus: FAILED"
fi
#EOF