Harden linkcheck

This commit is contained in:
cytopia 2018-07-25 17:17:36 +02:00
parent 56538c10d8
commit 88ab56c617
No known key found for this signature in database
GPG Key ID: 6D56EDB8695128A2

View File

@ -1,19 +1,42 @@
#!/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
header="$( curl -I "${url}" 2>/dev/null )"
line="$( echo "${header}" | grep -E '^HTTP/(1|2)' )"
stat="$( echo "${line}" | awk '{print $2}' )"
# 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
if [ "${stat}" != "200" ]; then
printf "\e[0;31m[ERR]\e[0m %s %s\n" "${url}" "${line}"
RETURN=1
# Curl request failed
if [ "${fail}" = "1" ]; then
printf "\e[0;31m[FAIL]\e[0m %s %s\n" "${url}" "${errval}"
# Curl request succeeded
else
printf "\e[0;32m[OK]\e[0m %s\n" "${url}"
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