Docker setup for PDF compilation

Problem

When using engine="docker-sudo", a timeout may happen if sudo requires an interactive password.

Solutions

# Add the current user to the docker group
sudo usermod -aG docker $USER

# Re-login, or run:
newgrp docker

# Check: it should work without sudo
docker run hello-world

After that, use:

render_pdf(data, output="resume.pdf", engine="docker")  # No sudo.

Option 2: Configure passwordless sudo for Docker

Create /etc/sudoers.d/docker:

your_username ALL=(ALL) NOPASSWD: /usr/bin/docker

Warning: This reduces security. Use it only in a development environment.

Option 3: Use auto-detection

The library automatically selects the best available engine:

# Auto-detect: tries xelatex → docker (no sudo)
render_pdf(data, output="resume.pdf")  # engine="auto" by default

Option 4: Install xelatex (best for development)

# Ubuntu/Debian
sudo apt install texlive-xetex texlive-fonts-extra

# After installation
render_pdf(data, output="resume.pdf")  # Uses xelatex automatically

For CI/CD

GitHub Actions

- name: Setup LaTeX
  run: |
    sudo apt-get update
    sudo apt-get install -y texlive-xetex texlive-fonts-extra

- name: Generate PDF
  run: |
    python -c "
    from awesomecv_jinja import render_pdf, load_sample
    data = load_sample('resume')
    render_pdf(data, output='resume.pdf')
    "

Docker in CI/CD

- name: Generate PDF with Docker
  run: |
    docker pull texlive/texlive:latest
    python -c "
    from awesomecv_jinja import render_pdf, load_sample
    data = load_sample('resume')
    render_pdf(data, output='resume.pdf', engine='docker')
    "

Verify the setup

from awesomecv_jinja.compiler import PDFCompiler, CompilationEngine

compiler = PDFCompiler()

# Check xelatex
if compiler.is_available(CompilationEngine.XELATEX):
    print("✅ xelatex is available")
else:
    print("❌ xelatex is not installed")

# Check docker
if compiler.is_available(CompilationEngine.DOCKER):
    print("✅ Docker is available")
else:
    print("❌ Docker is not installed")

# Try auto-detection
try:
    engine = compiler.detect_engine()
    print(f"✅ Engine selected: {engine.value}")
except:
    print("❌ No engine is available")

Recommendations

For development: - Install xelatex (faster, simpler)

For production/CI: - Use Docker (reproducible)

For quick start: - Use engine="auto" (default)


Created: 2024-10-18