Skip to content

Commit 2361bf1

Browse files
committed
Generate cover metadata during developer guide build
1 parent 701c2e6 commit 2361bf1

File tree

3 files changed

+73
-10
lines changed

3 files changed

+73
-10
lines changed

.github/workflows/developer-guide-docs.yml

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,59 @@ jobs:
2121
- name: Check out repository
2222
uses: actions/checkout@v4
2323

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 }}
24+
- name: Determine publication metadata
2825
run: |
2926
set -euo pipefail
3027
REV_DATE="$(date -u +%Y-%m-%d)"
31-
VERSION="${RELEASE_TAG:-}"
28+
VERSION="${GITHUB_HEAD_REF:-}"
3229
if [ -z "$VERSION" ] && [ -n "${GITHUB_REF_NAME:-}" ]; then
3330
VERSION="$GITHUB_REF_NAME"
3431
fi
32+
if [ -z "$VERSION" ] && [ -n "${GITHUB_SHA:-}" ]; then
33+
VERSION="${GITHUB_SHA:0:7}"
34+
fi
3535
VERSION="${VERSION#v}"
3636
if [ -z "$VERSION" ]; then
3737
VERSION="UNKNOWN"
3838
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
39+
if date -u -d "$REV_DATE" '+%B %-d, %Y' >/tmp/rev_human 2>/dev/null; then
40+
REV_HUMAN_DATE="$(cat /tmp/rev_human)"
41+
else
42+
REV_HUMAN_DATE="$(date -u '+%B %-d, %Y')"
43+
fi
44+
{
45+
echo "REV_DATE=$REV_DATE"
46+
echo "REV_NUMBER=$VERSION"
47+
echo "REV_HUMAN_DATE=$REV_HUMAN_DATE"
48+
} >> "$GITHUB_ENV"
49+
50+
- name: Render publication cover artwork
51+
run: |
52+
set -euo pipefail
53+
SOURCE="docs/developer-guide/book-cover.svg"
54+
GENERATED="docs/developer-guide/book-cover.generated.svg"
55+
cp "$SOURCE" "$GENERATED"
56+
export GENERATED
57+
python - <<'PY'
58+
import os
59+
import re
60+
from pathlib import Path
61+
62+
target = Path(os.environ["GENERATED"])
63+
rev = os.environ.get("REV_NUMBER", "UNKNOWN")
64+
date = os.environ.get("REV_HUMAN_DATE", os.environ.get("REV_DATE", ""))
65+
replacement = f"Version {rev} - {date}".strip()
66+
text = target.read_text(encoding="utf-8")
67+
pattern = re.compile(r"Version\s+[^<]+")
68+
if not pattern.search(text):
69+
raise SystemExit("Could not find version text placeholder in cover artwork")
70+
text = pattern.sub(replacement, text, count=1)
71+
target.write_text(text, encoding="utf-8")
72+
PY
73+
{
74+
echo "COVER_SVG_ATTR=$(basename "$GENERATED")"
75+
echo "GENERATED_COVER_PATH=$GENERATED"
76+
} >> "$GITHUB_ENV"
4177

4278
- name: Set up Ruby
4379
uses: ruby/setup-ruby@v1
@@ -55,19 +91,44 @@ jobs:
5591
HTML_BUILD_DIR="${OUTPUT_ROOT}/html"
5692
PDF_BUILD_DIR="${OUTPUT_ROOT}/pdf"
5793
PACKAGE_DIR="${OUTPUT_ROOT}/html-package"
94+
COVER_SVG_ATTR_VALUE="${COVER_SVG_ATTR:-book-cover.svg}"
95+
GENERATED_COVER_PATH="${GENERATED_COVER_PATH:-}"
5896
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
97+
asciidoctor \
98+
-a revdate="$REV_DATE" \
99+
-a revnumber="$REV_NUMBER" \
100+
-a cover-svg="$COVER_SVG_ATTR_VALUE" \
101+
-D "$HTML_BUILD_DIR" \
102+
-o developer-guide.html \
103+
docs/developer-guide/developer-guide.asciidoc
104+
asciidoctor-pdf \
105+
-a revdate="$REV_DATE" \
106+
-a revnumber="$REV_NUMBER" \
107+
-a cover-svg="$COVER_SVG_ATTR_VALUE" \
108+
-D "$PDF_BUILD_DIR" \
109+
-o developer-guide.pdf \
110+
docs/developer-guide/developer-guide.asciidoc
61111
rm -rf "$PACKAGE_DIR"
62112
mkdir -p "$PACKAGE_DIR"
113+
if [ -n "$GENERATED_COVER_PATH" ] && [ -f "$GENERATED_COVER_PATH" ]; then
114+
cp "$GENERATED_COVER_PATH" "$HTML_BUILD_DIR/$(basename "$GENERATED_COVER_PATH")"
115+
fi
63116
cp "$HTML_BUILD_DIR/developer-guide.html" "$PACKAGE_DIR/"
64117
for asset_dir in docs/developer-guide/*; do
65118
base_name="$(basename "$asset_dir")"
66119
if [ -d "$asset_dir" ] && [ "$base_name" != "sketch" ]; then
67120
cp -R "$asset_dir" "$PACKAGE_DIR/"
68121
fi
69122
done
123+
if [ -n "$GENERATED_COVER_PATH" ] && [ -f "$GENERATED_COVER_PATH" ]; then
124+
cp "$GENERATED_COVER_PATH" "$PACKAGE_DIR/$(basename "$GENERATED_COVER_PATH")"
125+
elif [ -f docs/developer-guide/book-cover.svg ]; then
126+
cp docs/developer-guide/book-cover.svg "$PACKAGE_DIR/"
127+
fi
70128
(cd "$PACKAGE_DIR" && zip -r "../developer-guide-html.zip" .)
129+
if [ -n "$GENERATED_COVER_PATH" ] && [ -f "$GENERATED_COVER_PATH" ]; then
130+
rm -f "$GENERATED_COVER_PATH"
131+
fi
71132
72133
- name: Upload HTML artifact
73134
uses: actions/upload-artifact@v4

docs/developer-guide/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
book-cover.generated.svg

docs/developer-guide/developer-guide.asciidoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
:autofit-option:
1717
//:hide-uri-scheme:
1818
:uuid: 92CA37B2-EB2B-4B8F-AC7C-1ED13683F7FB
19-
:front-cover-image: image:img/cover.png[Front Cover,1000,1600]
19+
:cover-svg: book-cover.svg
20+
:front-cover-image: image:{cover-svg}[Front Cover,1000,1600]
2021
:lang: en-US
2122
:revdate: 2025-10-20
2223
:revnumber: DEV-SNAPSHOT

0 commit comments

Comments
 (0)