...
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