ranim 0.2.0

An animation engine inspired by manim and JAnim
Documentation
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