devilbox/docs/linkcheck.sh
2018-07-26 09:39:00 +02:00

44 lines
1016 B
Bash
Executable File

#!/usr/bin/env bash
setval() {
printf -v "$1" "%s" "$(cat)";
declare -p "$1";
}
RETURN=0
for url in $(find _includes/ -name \*.rst -exec grep -Eo 'http(s)?://[-?:,._a/#-Z0-9]+' {} \; | sort -u ); do
# Try to curl multiple times in case host is currently not reachable
max=60; i=0; fail=0
eval "$( curl -SsI "${url}" 2> >(setval errval) > >(setval header); <<<"$?" setval retval; )"
while [ "${retval}" != "0" ] ; do
#while ! header="$( curl -I "${url}" 2>/dev/null )"; do
i=$(( i + 1 ))
sleep 2
if [ "${i}" -gt "${max}" ]; then
fail=1
break;
fi
done
# Curl request failed
if [ "${fail}" = "1" ]; then
printf "\e[0;31m[FAIL]\e[0m %s %s\n" "${url}" "${errval}"
# Curl request succeeded
else
line="$( echo "${header}" | grep -E '^HTTP/(1|2)' )"
stat="$( echo "${line}" | awk '{print $2}' )"
if [ "${stat}" != "200" ]; then
printf "\e[0;31m[ERR]\e[0m %s %s\n" "${url}" "${line}"
RETURN=1
else
printf "\e[0;32m[OK]\e[0m %s\n" "${url}"
fi
fi
done
exit ${RETURN}