16. Feature: CI/CD y deploy
Objetivo
Automatizar:
- actualización de contenido (pipeline),
- commit/push del contenido generado,
- build del sitio,
- deploy a Cloudflare Pages.
Workflow
Archivo: .github/workflows/update-garden.yml
Triggers:
- Cron: lunes y jueves 03:00 UTC.
- Manual:
workflow_dispatchcon inputs:dry_run(boolean)force_reprocess(boolean)
Job 1 — update-content
Responsabilidad: correr pipeline y commitear si hay cambios.
Pasos clave:
- Checkout con permisos de escritura.
- Setup Python 3.12 + cache pip.
pip install -r scripts/requirements.txt- Tests:
python -m unittest discover -s tests - Ejecutar:
python scripts/pipeline.pycon env desde secrets. - Commit/push:
git add content/notas-automaticas/ data/manifest.json content/index.md- si no hay cambios: no commitea
- si hay cambios: commit con fecha UTC y push a
main
Job 2 — build-and-deploy
Responsabilidad: construir Quartz y desplegar.
Pasos clave:
- Checkout fresh.
- Setup Node.js 22 + cache npm.
npm ci- Build:
npx quartz build(output apublic/) - Deploy:
cloudflare/wrangler-action@v3- comando:
pages deploy public/ --project-name=kdef --branch=main
- comando:
Secrets requeridos
| Secret | Uso |
|---|---|
MOODLE_URL | URL base del Moodle |
MOODLE_USER | Usuario Moodle |
MOODLE_PASS | Contraseña Moodle |
MODELS_API_KEY | LLM primario |
OPENROUTER_API_KEY | LLM secundario |
GEMINI_API_KEY | LLM terciario |
CF_API_TOKEN | Deploy Cloudflare Pages |
CF_ACCOUNT_ID | Cuenta Cloudflare |
Cloudflare Pages: headers y redirects
Archivos:
_headers: headers de seguridad (CSP, HSTS, X-Frame-Options, etc.)_redirects: reglas de redirect (ej. www → apex)
Estos archivos DEBEN mantenerse compatibles con Quartz (en particular CSP con unsafe-eval para el grafo).