Skip to content

Commit a448468

Browse files
michalharakalclaude
andcommitted
ci: add custom Antora Docker image with built-in Mermaid renderer
Custom image based on node:20-alpine with: - Antora 3.1 site generator - asciidoctor-kroki for diagram blocks - @mermaid-js/mermaid-cli with Chromium for local SVG rendering - No external Kroki server dependency The GitHub Actions workflow builds the image from docs/.docker/Dockerfile then uses it to generate the site. Mermaid diagrams are rendered locally inside the container. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f55dd75 commit a448468

4 files changed

Lines changed: 52 additions & 8 deletions

File tree

.github/workflows/docs.yml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,20 +24,27 @@ permissions:
2424
jobs:
2525
build-docs:
2626
runs-on: ubuntu-latest
27-
timeout-minutes: 10
27+
timeout-minutes: 15
2828

2929
steps:
3030
- name: Checkout
3131
uses: actions/checkout@v6
3232

33+
- name: Build custom Antora image
34+
run: |
35+
docker build \
36+
-t skainet-antora:local \
37+
-f docs/.docker/Dockerfile \
38+
docs/.docker/
39+
3340
- name: Build Antora site
3441
run: |
3542
docker run --rm \
3643
-v "${{ github.workspace }}:/antora" \
3744
--workdir /antora/docs \
38-
--entrypoint sh \
39-
docker.io/antora/antora:3.1 \
40-
-c "npm i asciidoctor-kroki && antora --stacktrace antora-playbook.yml"
45+
skainet-antora:local \
46+
--stacktrace \
47+
antora-playbook.yml
4148
4249
- name: Upload artifact
4350
uses: actions/upload-pages-artifact@v3

docs/.docker/.dockerignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules
2+
build

docs/.docker/Dockerfile

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
FROM node:20-alpine
2+
3+
LABEL org.opencontainers.image.title="SKaiNET Antora" \
4+
org.opencontainers.image.description="Antora site generator with built-in Mermaid rendering" \
5+
org.opencontainers.image.source="https://github.com/SKaiNET-developers/SKaiNET-transformers"
6+
7+
# Chromium for mermaid-cli (puppeteer)
8+
RUN apk add --no-cache chromium font-noto
9+
10+
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser \
11+
PUPPETEER_SKIP_DOWNLOAD=true
12+
13+
WORKDIR /antora
14+
15+
# Install Antora + extensions + mermaid-cli in one layer
16+
RUN npm i --save-exact \
17+
@antora/cli@3.1 \
18+
@antora/site-generator@3.1 \
19+
asciidoctor-kroki@0.18 \
20+
@mermaid-js/mermaid-cli@11 \
21+
&& npm cache clean --force
22+
23+
# Mermaid-cli config: use installed Chromium, no sandbox (container)
24+
RUN echo '{ \
25+
"executablePath": "/usr/bin/chromium-browser", \
26+
"args": ["--no-sandbox", "--disable-gpu", "--disable-dev-shm-usage"] \
27+
}' > /antora/puppeteer-config.json
28+
29+
# Pre-generate a simple diagram to warm up and verify the stack works
30+
RUN echo 'graph TD; A-->B;' > /tmp/test.mmd \
31+
&& npx mmdc -i /tmp/test.mmd -o /tmp/test.svg -p /antora/puppeteer-config.json \
32+
&& rm /tmp/test.mmd /tmp/test.svg
33+
34+
ENTRYPOINT ["npx", "antora"]
35+
CMD ["--stacktrace", "antora-playbook.yml"]

docs/antora-playbook.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ content:
1111
asciidoc:
1212
extensions:
1313
- asciidoctor-kroki
14-
15-
kroki:
16-
server-url: https://kroki.io
17-
fetch-diagram: true
14+
attributes:
15+
# Use local mermaid-cli via Kroki (no external server needed when
16+
# built with the custom Docker image in docs/.docker/Dockerfile)
17+
kroki-fetch-diagram: true
1818

1919
ui:
2020
bundle:

0 commit comments

Comments
 (0)