\usepackage{github-actions}

Compile LaTeX en GitHub Actions

Automatice la compilación de LaTeX en su pipeline de CI/CD. Cada push compila sus documentos, detecta errores antes de la fusión y publica los PDF como artefactos descargables, sin necesidad de instalar TeX Live en local.

\section{Por qué usar CI/CD con LaTeX}

Publique documentos con confianza

Trate su código fuente LaTeX como software. Las compilaciones automáticas detectan paquetes rotos, archivos que faltan y errores de compilación antes de que lleguen a sus lectores.

Nunca publique PDF defectuosos

Detecte errores de compilación antes de la fusión. Las comprobaciones de las solicitudes de incorporación de cambios fallan si el documento no compila.

Distribución automatizada

Los artefactos PDF se adjuntan a cada ejecución del flujo de trabajo. Comparta un enlace directo al último documento compilado.

Sin necesidad de TeX Live local

Los miembros del equipo contribuyen al código fuente LaTeX sin instalar TeX Live. La API gestiona la compilación en la nube.

\section{Prerequisites}

Antes de empezar

  • Una cuenta de FormaTeX; el plan gratuito sirve (15 compilaciones al mes)
  • Una clave de API de FormaTeX de su panel
  • Un repositorio de GitHub que contenga archivos .tex

\section{Guía paso a paso}

Configuración en cuatro pasos

1

Obtenga su clave de API

Regístrese en FormaTeX y copie su clave de API desde el panel. El plan gratuito incluye 15 compilaciones al mes, suficientes para empezar.

2

Añada el secreto a GitHub

Guarde su clave de API como secreto del repositorio para que nunca quede expuesta en el YAML de su flujo de trabajo. Vaya a Repository → Settings → Secrets and variables → Actions → New secret y asígnele el nombre FORMATEX_API_KEY.

# Add your FormaTeX API key as a GitHub Actions secret
# Go to: Repository → Settings → Secrets and variables → Actions → New secret
# Name: FORMATEX_API_KEY
# Value: your API key from formatex.io/dashboard/api-keys

# Test locally before committing:
export FORMATEX_API_KEY="your-key-here"
curl -X POST https://api.formatex.io/api/v1/compile \
  -H "X-API-Key: $FORMATEX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"latex": "\\documentclass{article}\\begin{document}Hello\\end{document}", "engine": "pdflatex"}'
3

Cree el archivo del flujo de trabajo

Cree .github/workflows/latex.yml en su repositorio. Este flujo de trabajo mínimo compila main.tex y sube el PDF resultante como artefacto.

# .github/workflows/latex.yml
name: Compile LaTeX

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  compile:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Compile LaTeX to PDF
        env:
          FORMATEX_API_KEY: ${{ secrets.FORMATEX_API_KEY }}
        run: |
          jq -n --rawfile latex main.tex '{engine: "xelatex", latex: $latex}' \
            | curl --fail-with-body -sS -X POST https://api.formatex.io/api/v1/compile \
                -H "X-API-Key: $FORMATEX_API_KEY" \
                -H "Content-Type: application/json" \
                -d @- -o output.pdf

      - name: Upload PDF artifact
        uses: actions/upload-artifact@v4
        with:
          name: compiled-pdf
          path: output.pdf
4

Haga push y observe la compilación

Haga commit y push del archivo del flujo de trabajo. GitHub Actions se activará automáticamente en su próximo push a main. Vaya a la pestaña Actions de su repositorio para ver la ejecución del flujo de trabajo. Cuando termine, el PDF compilado aparecerá en Artifacts.

\section{Configuración completa del flujo de trabajo}

Compilación en matriz con gestión de errores

Escale a varios documentos con una estrategia de matriz. Este flujo de trabajo compila tesis, presentación y apéndice en paralelo, captura los errores HTTP de forma explícita y conserva los PDF durante 30 días.

# .github/workflows/latex-full.yml
name: LaTeX Build Pipeline

on:
  push:
    paths: ['**.tex', '**.bib']

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        document: [thesis, presentation, appendix]

    steps:
      - uses: actions/checkout@v4

      - name: Compile ${{ matrix.document }}
        env:
          FORMATEX_API_KEY: ${{ secrets.FORMATEX_API_KEY }}
          DOC: ${{ matrix.document }}
        run: |
          jq -n --rawfile latex "$DOC.tex" '{engine: "xelatex", latex: $latex}' \
            | curl --fail-with-body -sS -X POST https://api.formatex.io/api/v1/compile \
                -H "X-API-Key: $FORMATEX_API_KEY" \
                -H "Content-Type: application/json" \
                -d @- -o "$DOC.pdf"

      - name: Upload PDFs
        uses: actions/upload-artifact@v4
        with:
          name: pdfs-${{ matrix.document }}
          path: ${{ matrix.document }}.pdf
          retention-days: 30

\section{Selección del motor}

Elija su motor de LaTeX

Incluya un campo opcional engine en el cuerpo JSON para controlar qué compilador usa FormaTeX. Si se omite, el valor predeterminado es pdflatex.

pdflatexxelatexlualatex

\section{Troubleshooting}

Problemas comunes y soluciones

Clave de API no configurada

Asegúrese de que FORMATEX_API_KEY esté añadida como secreto del repositorio, no como variable. Los secretos están cifrados; las variables no. Vaya a Settings → Secrets and variables → Actions → Secrets (no Variables).

Archivos .tex grandes

Para archivos de más de 10 MB, use el endpoint de compilación asíncrona (/api/v1/compile/async). El endpoint asíncrono devuelve un ID de trabajo que puede consultar para obtener el resultado.

Paquetes que faltan

El entorno aislado de FormaTeX incluye TeX Live 2023 completo: la mayoría de los paquetes de CTAN están disponibles de fábrica. Si falta algún paquete, contacte con soporte y lo añadiremos.

\section{Integraciones relacionadas}

Use FormaTeX desde cualquier entorno

FormaTeX es una API HTTP sencilla. Ejemplos para copiar y pegar en todos los lenguajes y plataformas principales.

¿Listo para automatizar sus compilaciones de LaTeX?

Plan gratuito: 15 compilaciones al mes. No se requiere tarjeta de crédito.