|  | #!/usr/bin/env bash | 
|  |  | 
|  | set -e | 
|  | set -o pipefail | 
|  |  | 
|  | LINKCHECK_BINARY=mdbook-linkcheck2 | 
|  |  | 
|  | set_github_token() { | 
|  | jq '.config.output.linkcheck."http-headers"."github\\.com" = ["Authorization: Bearer $GITHUB_TOKEN"]' | 
|  | } | 
|  |  | 
|  | if [ -z "$ENABLE_LINKCHECK" ] ; then | 
|  | echo "Skipping link check." | 
|  | exit 0 | 
|  | fi | 
|  |  | 
|  | # https://docs.github.com/en/actions/reference/environment-variables | 
|  | if [ "$GITHUB_EVENT_NAME" = "schedule" ] ; then # running in scheduled job | 
|  | FLAGS="" | 
|  | USE_TOKEN=1 | 
|  |  | 
|  | echo "Doing full link check." | 
|  | elif [ "$GITHUB_EVENT_NAME" = "pull_request" ] ; then # running in PR CI build | 
|  | if [ -z "$BASE_SHA" ]; then | 
|  | echo "error: unexpected state: BASE_SHA must be non-empty in CI" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | CHANGED_FILES=$(git diff --name-only $BASE_SHA... | sed 's#^src/##' | tr '\n' ' ') | 
|  | FLAGS="--no-cache -f $CHANGED_FILES" | 
|  | USE_TOKEN=1 | 
|  |  | 
|  | echo "Checking files changed since $BASE_SHA: $CHANGED_FILES" | 
|  | else # running locally | 
|  | COMMIT_RANGE=master... | 
|  | CHANGED_FILES=$(git diff --name-only $COMMIT_RANGE | sed 's#^src/##' | tr '\n' ' ') | 
|  | FLAGS="-f $CHANGED_FILES" | 
|  |  | 
|  | echo "Checking files changed in $COMMIT_RANGE: $CHANGED_FILES" | 
|  | fi | 
|  |  | 
|  | echo "exec $LINKCHECK_BINARY $FLAGS" | 
|  | if [ "$USE_TOKEN" = 1 ]; then | 
|  | config=$(set_github_token) | 
|  | exec $LINKCHECK_BINARY $FLAGS <<<"$config" | 
|  | else | 
|  | exec $LINKCHECK_BINARY $FLAGS | 
|  | fi |