...

Text file src/jschan/godoc_static.sh

Documentation: jschan

     1#!/usr/bin/env bash
     2
     3function extract_module_name {
     4    # Extract module name
     5    sed -n -E 's/^\s*module\s+([[:graph:]]+)\s*$/\1/p'
     6}
     7
     8function normalize_url {
     9    # Normalize provided URL. Removing double slashes
    10    echo "$1" | sed -E 's,([^:]/)/+,\1,g'
    11}
    12
    13function generate_go_documentation {
    14    # Go doc
    15    local URL
    16    local PID
    17    local STATUS
    18
    19    # Setup
    20    rm -rf "${GO_DOC_HTML_OUTPUT:-godoc}"
    21
    22    # Extract Go module name from a Go module file
    23    if [[ -z "$GO_MODULE" ]]; then
    24        local FILE
    25
    26        FILE="$(go env GOMOD)"
    27
    28        if [[ -f "$FILE" ]]; then
    29            GO_MODULE=$(cat "$FILE" | extract_module_name)
    30        fi
    31    fi
    32
    33    # URL path to Go package and module documentation
    34    URL=$(normalize_url "http://${GO_DOC_HTTP:-localhost:6060}/pkg/$GO_MODULE/")
    35
    36    # Starting godoc server
    37    echo "Starting godoc server..."
    38    godoc -http="${GO_DOC_HTTP:-localhost:6060}" &
    39    PID=$!
    40
    41    # Waiting for godoc server
    42    while ! curl --fail --silent "$URL" 2>&1 >/dev/null; do
    43        sleep 0.1
    44    done
    45
    46    # Download all documentation content from running godoc server
    47    wget \
    48        --recursive \
    49        --no-verbose \
    50        --convert-links \
    51        --page-requisites \
    52        --adjust-extension \
    53        --execute=robots=off \
    54        --include-directories="/lib,/pkg/$GO_MODULE,/src/$GO_MODULE" \
    55        --exclude-directories="*" \
    56        --directory-prefix="${GO_DOC_HTML_OUTPUT:-godoc}" \
    57        --no-host-directories \
    58        "$URL"
    59
    60    # Stop godoc server
    61    kill -9 "$PID"
    62    echo "Stopped godoc server"
    63    echo "Go source code documentation generated under ${GO_DOC_HTML_OUTPUT:-godoc}"
    64}
    65
    66generate_go_documentation

View as plain text