File indexing completed on 2026-04-17 07:46:50
0001
0002 set -euo pipefail
0003
0004 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
0005 REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
0006
0007 LINKCHECK_IGNORE_REPO="${LINKCHECK_IGNORE_REPO:-acts-project/linkcheck-ignore}"
0008 LINKCHECK_IGNORE_REF="${LINKCHECK_IGNORE_REF:-main}"
0009 LINKCHECK_IGNORE_PATH="${LINKCHECK_IGNORE_PATH:-data.json}"
0010 LINKCHECK_IGNORE_URL="${LINKCHECK_IGNORE_URL:-https://raw.githubusercontent.com/${LINKCHECK_IGNORE_REPO}/${LINKCHECK_IGNORE_REF}/${LINKCHECK_IGNORE_PATH}}"
0011 LINKCHECK_THREADS="${LINKCHECK_THREADS:-4}"
0012 LINKCHECK_TIMEOUT="${LINKCHECK_TIMEOUT:-20}"
0013
0014 if [[ -n "${LINKCHECK_START_URL:-}" ]]; then
0015 START_URL="${LINKCHECK_START_URL}"
0016 else
0017 LINKCHECK_START_PATH="${LINKCHECK_START_PATH:-${REPO_ROOT}/build/docs/html/index.html}"
0018 START_URL="${LINKCHECK_START_PATH}"
0019 fi
0020
0021 if command -v gh >/dev/null 2>&1; then
0022 if IGNORE_JSON="$(
0023 gh api \
0024 -H "Accept: application/vnd.github.raw" \
0025 "/repos/${LINKCHECK_IGNORE_REPO}/contents/${LINKCHECK_IGNORE_PATH}?ref=${LINKCHECK_IGNORE_REF}" \
0026 2>/dev/null
0027 )"; then
0028 echo "Loaded ignore list via gh api from ${LINKCHECK_IGNORE_REPO}@${LINKCHECK_IGNORE_REF}:${LINKCHECK_IGNORE_PATH}"
0029 else
0030 echo "gh api failed, falling back to curl from ${LINKCHECK_IGNORE_URL}"
0031 IGNORE_JSON="$(curl -fsSL "${LINKCHECK_IGNORE_URL}")"
0032 fi
0033 else
0034 IGNORE_JSON="$(curl -fsSL "${LINKCHECK_IGNORE_URL}")"
0035 fi
0036 jq -e 'type == "array" and all(.[]; type == "string")' <<<"${IGNORE_JSON}" >/dev/null
0037 mapfile -t IGNORE_PATTERNS < <(jq -r '.[]' <<<"${IGNORE_JSON}")
0038
0039 IGNORE_ARGS=(--ignore-url='^mailto:')
0040 for pattern in "${IGNORE_PATTERNS[@]}"; do
0041 IGNORE_ARGS+=(--ignore-url="${pattern}")
0042 done
0043
0044 echo "Loaded ${#IGNORE_PATTERNS[@]} external link ignore patterns"
0045
0046 uvx --from LinkChecker linkchecker \
0047 --config="${SCRIPT_DIR}/linkcheckerrc" \
0048 --check-extern \
0049 --threads="${LINKCHECK_THREADS}" \
0050 --timeout="${LINKCHECK_TIMEOUT}" \
0051 "${IGNORE_ARGS[@]}" \
0052 "${START_URL}"