blob: 72662197bd2b3346c11d8c0ca87eeb6c84d7c828 [file] [log] [blame]
#!/bin/bash
#
# This script is used to verify links in markdown docs.
#
# - External links are ignored in CI because these links may go down out of our control.
# - Anchors are ignored
# - Internal links conventions
# - Must be absolute and start from repo root
# - Only files in current directory and /media are allowed
# - When a file was moved, all other references are required to be updated for now, even if alias are given
# - This is recommended because of less redirects and better anchors support.
ROOT=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}")/.. && pwd)
cd $ROOT
yarn add markdown-link-check@3.8.1
VERBOSE=${VERBOSE:-}
CONFIG_TMP=$(mktemp)
ERROR_REPORT=$(mktemp)
trap 'rm -f $CONFIG_TMP $ERROR_REPORT' EXIT
# Check all directories starting with 'v\d.*' and dev.
echo "info: checking links under $ROOT directory..."
sed \
-e "s#<ROOT>#$ROOT#g" \
scripts/markdown-link-check.tpl > $CONFIG_TMP
if [ -n "$VERBOSE" ]; then
cat $CONFIG_TMP
fi
# TODO simplify this if markdown-link-check can process multiple files together
while read -r tasks; do
for task in $tasks; do
(
output=$(yarn markdown-link-check --config "$CONFIG_TMP" "$task" -q)
if [ $? -ne 0 ]; then
printf "$output" >> $ERROR_REPORT
fi
if [ -n "$VERBOSE" ]; then
echo "$output"
fi
) &
done
wait
done <<<"$(find "." -type f -not -path './node_modules/*' -name '*.md' | xargs -n 10)"
error_files=$(cat $ERROR_REPORT | grep 'FILE: ' | wc -l)
error_output=$(cat $ERROR_REPORT)
echo ""
if [ "$error_files" -gt 0 ]; then
echo "Link error: $error_files files have invalid links. The faulty files are listed below, please fix the wrong links!"
echo ""
echo "=== Hint on how to fix links === "
echo "Links in TiDB documentation follow a style like '/tidb-binlog/deploy-tidb-binlog.md#服务器要求'. That is, you need to make sure that:"
echo "1) Links start with a slash; 2) Anchor links are written in a '/dir/xxx.md#anchor-point' style; 3) Links don't start with a version, e.g. '/v3.0/...' is wrong and '/v3.0' should be removed."
echo ""
echo "=== ERROR REPORT == ":
echo "$error_output"
exit 1
else
echo "Link check report: All files are ok. No deadlink found!"
fi