name: Build Book
on:
workflow_call:
inputs:
ref:
description: "Git ref to build"
type: string
required: true
artifact-name:
description: "Name for the uploaded artifact"
type: string
required: true
mdbook-version:
description: "mdbook version"
type: string
default: "0.5"
mdbook-plugins:
description: "Comma-separated mdbook plugins"
type: string
default: "mdbook-katex@0.10.0-alpha, mdbook-mermaid@0.17"
site-url:
description: "Override site-url (e.g. /ranim-book/). If empty, derived from ref."
type: string
default: ""
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Fetch version-select assets from main
uses: actions/checkout@v4
with:
ref: main
sparse-checkout: .github/book-assets
path: __main
- name: Compute tool cache key
id: tool-key
run: echo "hash=$(echo '${{ inputs.mdbook-version }} ${{ inputs.mdbook-plugins }}' | sha256sum | cut -c1-16)" >> "$GITHUB_OUTPUT"
- name: Cache mdbook tools
id: cache-mdbook
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/mdbook
~/.cargo/bin/mdbook-*
key: mdbook-${{ steps.tool-key.outputs.hash }}
- name: Install mdbook and plugins
if: steps.cache-mdbook.outputs.cache-hit != 'true'
uses: taiki-e/install-action@v2
with:
tool: mdbook@${{ inputs.mdbook-version }}, ${{ inputs.mdbook-plugins }}
- name: Patch book.toml and inject version-select
run: |
SITE_URL="${{ inputs.site-url }}"
if [ -z "$SITE_URL" ]; then
REF="${{ inputs.ref }}"
TAG="${REF#refs/tags/}"
SITE_URL="/ranim-book/${TAG}/"
fi
sed -i "s|site-url = .*|site-url = \"${SITE_URL}\"|" book/book.toml
sed -i "s|build-dir = .*|build-dir = \"build\"|" book/book.toml
# Inject version-select assets
cp __main/.github/book-assets/version-select.js book/
cp __main/.github/book-assets/version-select.css book/
# Append to additional-css / additional-js, or add them
if grep -q 'additional-css' book/book.toml; then
sed -i 's|additional-css = \[|additional-css = ["version-select.css", |' book/book.toml
else
echo 'additional-css = ["version-select.css"]' >> book/book.toml
fi
if grep -q 'additional-js' book/book.toml; then
sed -i 's|additional-js *= *\[|additional-js = ["version-select.js", |' book/book.toml
else
echo 'additional-js = ["version-select.js"]' >> book/book.toml
fi
- name: Build book
run: mdbook build book
- uses: actions/upload-artifact@v4
with:
name: ${{ inputs.artifact-name }}
path: book/build