@@ -2,6 +2,7 @@ name: Build Developer Guide Docs
22
33on :
44 pull_request :
5+ types : [opened, synchronize, reopened, ready_for_review]
56 paths :
67 - ' docs/developer-guide/**'
78 - ' .github/workflows/developer-guide-docs.yml'
@@ -21,23 +22,49 @@ jobs:
2122 - name : Check out repository
2223 uses : actions/checkout@v4
2324
24- - name : Update publication metadata for release
25- if : ${{ github.event_name == 'release' && github.event.action == 'published' }}
26- env :
27- RELEASE_TAG : ${{ github.event.release.tag_name }}
25+ - name : Determine publication metadata
2826 run : |
2927 set -euo pipefail
3028 REV_DATE="$(date -u +%Y-%m-%d)"
31- VERSION="${RELEASE_TAG :-}"
29+ VERSION="${GITHUB_HEAD_REF :-}"
3230 if [ -z "$VERSION" ] && [ -n "${GITHUB_REF_NAME:-}" ]; then
3331 VERSION="$GITHUB_REF_NAME"
3432 fi
33+ if [ -z "$VERSION" ] && [ -n "${GITHUB_SHA:-}" ]; then
34+ VERSION="${GITHUB_SHA:0:7}"
35+ fi
3536 VERSION="${VERSION#v}"
3637 if [ -z "$VERSION" ]; then
3738 VERSION="UNKNOWN"
3839 fi
39- sed -i -E "s/^:revdate: .*/:revdate: ${REV_DATE}/" docs/developer-guide/developer-guide.asciidoc
40- sed -i -E "s/^:revnumber: .*/:revnumber: ${VERSION}/" docs/developer-guide/developer-guide.asciidoc
40+ if date -u -d "$REV_DATE" '+%B %-d, %Y' >/tmp/rev_human 2>/dev/null; then
41+ REV_HUMAN_DATE="$(cat /tmp/rev_human)"
42+ else
43+ REV_HUMAN_DATE="$(date -u '+%B %-d, %Y')"
44+ fi
45+ {
46+ echo "REV_DATE=$REV_DATE"
47+ echo "REV_NUMBER=$VERSION"
48+ echo "REV_HUMAN_DATE=$REV_HUMAN_DATE"
49+ } >> "$GITHUB_ENV"
50+
51+ - name : Render publication cover artwork
52+ run : |
53+ set -euo pipefail
54+ sudo apt-get update
55+ sudo apt-get install -y --no-install-recommends librsvg2-bin
56+ SOURCE="docs/developer-guide/book-cover.svg"
57+ GENERATED_SVG="docs/developer-guide/book-cover.generated.svg"
58+ GENERATED_PNG="docs/developer-guide/book-cover.generated.png"
59+ cp "$SOURCE" "$GENERATED_SVG"
60+ export GENERATED_SVG
61+ python3 -c "import os, re, pathlib; target = pathlib.Path(os.environ['GENERATED_SVG']); text = target.read_text(encoding='utf-8'); rev = os.environ.get('REV_NUMBER', 'UNKNOWN'); date = os.environ.get('REV_HUMAN_DATE') or os.environ.get('REV_DATE', ''); replacement = f\"Version {rev}\" + (f\" - {date}\" if date else ''); new_text, count = re.subn(r'Version\\s+[^<]+', replacement.strip(), text, count=1); assert count == 1, 'Could not find version text placeholder in cover artwork'; target.write_text(new_text, encoding='utf-8')"
62+ rsvg-convert -w 2551 -h 3579 "$GENERATED_SVG" -o "$GENERATED_PNG"
63+ {
64+ echo "COVER_IMAGE_ATTR=$(basename "$GENERATED_PNG")"
65+ echo "GENERATED_COVER_IMAGE=$GENERATED_PNG"
66+ echo "GENERATED_COVER_SVG=$GENERATED_SVG"
67+ } >> "$GITHUB_ENV"
4168
4269 - name : Set up Ruby
4370 uses : ruby/setup-ruby@v1
@@ -55,19 +82,46 @@ jobs:
5582 HTML_BUILD_DIR="${OUTPUT_ROOT}/html"
5683 PDF_BUILD_DIR="${OUTPUT_ROOT}/pdf"
5784 PACKAGE_DIR="${OUTPUT_ROOT}/html-package"
85+ COVER_IMAGE_ATTR_VALUE="${COVER_IMAGE_ATTR:-book-cover.svg}"
86+ GENERATED_COVER_IMAGE="${GENERATED_COVER_IMAGE:-}"
87+ GENERATED_COVER_SVG="${GENERATED_COVER_SVG:-}"
5888 mkdir -p "$HTML_BUILD_DIR" "$PDF_BUILD_DIR"
59- asciidoctor -D "$HTML_BUILD_DIR" -o developer-guide.html docs/developer-guide/developer-guide.asciidoc
60- asciidoctor-pdf -D "$PDF_BUILD_DIR" -o developer-guide.pdf docs/developer-guide/developer-guide.asciidoc
89+ asciidoctor \
90+ -a revdate="$REV_DATE" \
91+ -a revnumber="$REV_NUMBER" \
92+ -a cover-image="$COVER_IMAGE_ATTR_VALUE" \
93+ -D "$HTML_BUILD_DIR" \
94+ -o developer-guide.html \
95+ docs/developer-guide/developer-guide.asciidoc
96+ asciidoctor-pdf \
97+ -a revdate="$REV_DATE" \
98+ -a revnumber="$REV_NUMBER" \
99+ -a cover-image="$COVER_IMAGE_ATTR_VALUE" \
100+ -D "$PDF_BUILD_DIR" \
101+ -o developer-guide.pdf \
102+ docs/developer-guide/developer-guide.asciidoc
61103 rm -rf "$PACKAGE_DIR"
62104 mkdir -p "$PACKAGE_DIR"
105+ if [ -n "$GENERATED_COVER_IMAGE" ] && [ -f "$GENERATED_COVER_IMAGE" ]; then
106+ cp "$GENERATED_COVER_IMAGE" "$HTML_BUILD_DIR/$(basename "$GENERATED_COVER_IMAGE")"
107+ fi
63108 cp "$HTML_BUILD_DIR/developer-guide.html" "$PACKAGE_DIR/"
64109 for asset_dir in docs/developer-guide/*; do
65110 base_name="$(basename "$asset_dir")"
66111 if [ -d "$asset_dir" ] && [ "$base_name" != "sketch" ]; then
67112 cp -R "$asset_dir" "$PACKAGE_DIR/"
68113 fi
69114 done
115+ if [ -n "$GENERATED_COVER_IMAGE" ] && [ -f "$GENERATED_COVER_IMAGE" ]; then
116+ cp "$GENERATED_COVER_IMAGE" "$PACKAGE_DIR/$(basename "$GENERATED_COVER_IMAGE")"
117+ fi
70118 (cd "$PACKAGE_DIR" && zip -r "../developer-guide-html.zip" .)
119+ if [ -n "$GENERATED_COVER_IMAGE" ] && [ -f "$GENERATED_COVER_IMAGE" ]; then
120+ rm -f "$GENERATED_COVER_IMAGE"
121+ fi
122+ if [ -n "$GENERATED_COVER_SVG" ] && [ -f "$GENERATED_COVER_SVG" ]; then
123+ rm -f "$GENERATED_COVER_SVG"
124+ fi
71125
72126 - name : Upload HTML artifact
73127 uses : actions/upload-artifact@v4
0 commit comments