Sign inSign up

idomi27/slidev-builder

By idomi27

•Updated 21 days ago

Image
0

340

idomi27/slidev-builder repository overview

⁠slidev-builder

A Docker image that turns a Slidev-format Markdown presentation into three outputs in one step: a static SPA build, a plain PDF, and a separate speaker-notes PDF. Default theme: neversink⁠.

⁠Usage

⁠Locally
# Put your presentation (slides.md + any pages/, images, assets) in a folder,
# then mount it under /slides:
docker run --rm -v "$(pwd):/slides" idomi27/slidev-builder:latest

Output lands in a new out/ subfolder of that same directory:

out/
  dist/               -- static SPA, hostable with any web server
  slides.pdf          -- plain slides PDF
  slides-notes.pdf    -- separate speaker notes PDF
⁠In GitLab CI

Use the image directly as the job image (override the entrypoint so you can call slidev yourself, or just run the image with no command to get the same three outputs it produces locally):

stages:
  - build
  - release

build_slides:
  stage: build
  image:
    name: idomi27/slidev-builder:latest
    entrypoint: [""]
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  script:
    - slidev build slides.md --out dist
    - slidev export slides.md --output "${CI_PROJECT_NAME}.pdf" --wait 5000
    - slidev export-notes slides.md --output "${CI_PROJECT_NAME}-notes.pdf" --wait 5000
    - (cd dist && zip -r "../${CI_PROJECT_NAME}-site.zip" .)
  artifacts:
    paths:
      - dist
      - "*.pdf"
      - "*.zip"
    expire_in: never

create_release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  needs: ["build_slides"]
  rules:
    - if: '$CI_COMMIT_BRANCH == "main"'
  allow_failure: true
  script:
    - echo "Releasing pipeline $CI_PIPELINE_IID"
  release:
    tag_name: "v$CI_PIPELINE_IID"
    description: "Slides build (pipeline $CI_PIPELINE_IID)"
    assets:
      links:
        - name: "${CI_PROJECT_NAME}.pdf"
          url: "$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_REF_NAME/raw/${CI_PROJECT_NAME}.pdf?job=build_slides"
        - name: "${CI_PROJECT_NAME}-notes.pdf"
          url: "$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_REF_NAME/raw/${CI_PROJECT_NAME}-notes.pdf?job=build_slides"
        - name: "${CI_PROJECT_NAME}-site.zip"
          url: "$CI_PROJECT_URL/-/jobs/artifacts/$CI_COMMIT_REF_NAME/raw/${CI_PROJECT_NAME}-site.zip?job=build_slides"

allow_failure: true on the release job because the release-cli image on this GitLab instance occasionally reports a false failure even though the release is created correctly -- check the Releases tab if the job shows red.

⁠Environment variables (when running the image directly, i.e. not via entrypoint: [""])
  • SLIDEV_ENTRY -- input markdown file (default: slides.md)
  • SLIDEV_OUT_DIR -- output subfolder (default: out)
  • SLIDEV_THEME -- theme override for build/export (default: neversink)
  • SLIDEV_WAIT -- milliseconds to wait before capturing each slide during build/export (default: 5000). Icon-heavy themes like neversink can render blank PDF pages if this is too low -- raise it if you see empty pages.

Example:

docker run --rm -v "$(pwd):/slides" -e SLIDEV_ENTRY=talk.md -e SLIDEV_WAIT=8000 idomi27/slidev-builder:latest

⁠What's in the image

node:22-slim + @slidev/cli + @slidev/theme-default + slidev-theme-neversink + playwright-chromium (with Chromium installed) + zip.

⁠Versioning

The VERSION file's content is used for two Docker Hub tags on every push to main: <version> and latest.

Tag summary

Content type

Image

Digest

sha256:85cf3e427…

Size

740.9 MB

Last updated

21 days ago

docker pull idomi27/slidev-builder