| #!/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 |