blob: 4a707f0de50f754b4d005e859ddf312ad9614e6b [file] [log] [blame]
#!/usr/bin/env bash
#
# A wrapper for all the things to do before a submit.
PROJECT_ROOT=$(dirname $0)/../../
cd ${PROJECT_ROOT}
RUN_CLANG_TIDY=1
RUN_ALL_CPP_STD=1
while [ $# -ne 0 ]; do
case $1 in
--skip-clang-tidy) RUN_CLANG_TIDY=0;;
--skip-cpp-std) RUN_ALL_CPP_STD=0;;
*)
echo "Unknown option $1"
exit 1
;;
esac
shift 1
done
if [ -t 1 ]; then
BOLD=$'\033[1m'
INVERSE=$'\033[7m'
RED=$'\033[1;37;41m'
NORM=$'\033[0m'
else
INVERSE=""
NORM=""
fi
FINAL_EXIT_CODE=0
function check_exit() {
exit_code=$?
if [ ${exit_code} -ne 0 ]; then
FINAL_EXIT_CODE=$((FINAL_EXIT_CODE + exit_code))
echo "${RED} ^^ Got exit code ${exit_code} ^^ ${NORM}"
fi
}
echo "${INVERSE}-- Build bant if not already (comp-db, build-cleaner) --${NORM}"
BANT=$($(dirname $0)/get-bant-path.sh)
# Compilation DB is needed for clang-tidy, but also
# makes sure all external dependencies have been fetched so that
# bant build cleaner can do a good job.
echo "${INVERSE}-- Refresh compilation db --${NORM}"
.github/bin/make-compilation-db.sh
check_exit
echo "${INVERSE}-- Run build cleaner --${NORM}"
. <(${BANT} dwyu ...)
echo "${INVERSE}-- Run all tests --${NORM}"
bazel test -c opt --test_summary=terse ...
check_exit
if [ "${RUN_ALL_CPP_STD}" -eq 1 ]; then
echo "${BOLD}Running other c++ standards. Skip with --skip-cpp-std${NORM}"
for cpp_standard in c++20 c++23 ; do
echo "${INVERSE}-- Run tests wtih -std=${cpp_standard} --${NORM}"
bazel test -c opt --cxxopt=-std=${cpp_standard} --test_summary=terse ...
check_exit
done
fi
if [ "${RUN_CLANG_TIDY}" -eq 1 ]; then
echo "${INVERSE}-- Running clang-tidy and cache results --${NORM}"
echo "This will take a while if run the first time and no cache has"
echo "been created yet. Can't wait ? Skip with "
echo " $0 --skip-clang-tidy"
.github/bin/run-clang-tidy-cached.cc
check_exit
fi
echo "${INVERSE}-- Format code and BUILD files --${NORM}"
.github/bin/run-format.sh
echo "${INVERSE}-- Check for other potential problems --${NORM}"
.github/bin/check-potential-problems.sh
check_exit
echo "Done with before-submit checks."
if [ ${FINAL_EXIT_CODE} -ne 0 ]; then
echo "${RED}Some failures. See in log above what's going on${NORM}"
fi
echo "Exit ${FINAL_EXIT_CODE}"
exit ${FINAL_EXIT_CODE}