Webhook de Sanity → GitHub Actions
Cuando se publica contenido en Sanity, un webhook dispara automáticamente un GitHub Actions workflow que reconstruye y despliega el sitio estático en Cloudflare Pages.
Sanity publica contenido
↓
Webhook de Sanity
↓
GitHub repository_dispatch
↓
GitHub Actions (build + deploy)
↓
Cloudflare Pages (asamamx.com)Requisitos previos
- Acceso al repositorio en GitHub con permisos de admin (para crear secrets)
- Acceso al proyecto en Sanity (sanity.manage → AsamaMéxico)
- Cloudflare Pages configurado con el proyecto
asamamx-web
Paso 1 — Crear un GitHub Personal Access Token
El token permite a Sanity autenticarse contra la API de GitHub para disparar el workflow.
- GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token (classic)
- Nombre:
sanity-webhook - Scope: marcar solo
repo - Copiar el token generado — solo se muestra una vez
Paso 2 — Agregar secrets al repositorio
GitHub → repositorio → Settings → Secrets and variables → Actions → New repository secret.
| Secret | Descripción |
|---|---|
NEXT_PUBLIC_SANITY_PROJECT_ID | Project ID del proyecto Sanity |
NEXT_PUBLIC_SANITY_DATASET | Dataset (production) |
NEXT_PUBLIC_WORKER_URL | URL del worker (https://api.asamamx.com) |
NEXT_PUBLIC_PAYPAL_CLIENT_ID | Client ID de PayPal |
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME | Cloud name de Cloudinary |
CLOUDFLARE_API_TOKEN | API token de Cloudflare con permisos de Pages |
CLOUDFLARE_ACCOUNT_ID | Account ID de Cloudflare |
Los valores se obtienen del archivo de variables de entorno compartido del proyecto.
Paso 3 — Configurar el webhook en Sanity
Sanity → manage.sanity.io → AsamaMéxico → API → Webhooks → Create webhook.
| Campo | Valor |
|---|---|
| Name | Rebuild Web |
| URL | https://api.github.com/repos/PolIsaak/monorep-asamamx/dispatches |
| Dataset | production |
| Trigger on | Create ✓, Update ✓ |
| Filter | _type in ["event", "page", "indexPage"] |
| Projection | {"event_type": "sanity-deploy"} |
| HTTP Method | POST |
| Drafts | desmarcado |
En HTTP Headers, agregar dos entradas:
| Name | Value |
|---|---|
Authorization | Bearer <token-del-paso-1> |
Accept | application/vnd.github.v3+json |
Guardar con Save.
Filter: el webhook solo se dispara cuando se publica un documento de tipo
event,pageoindexPage. Cambios en schemas, usuarios o configuración no generan rebuild.
El workflow de GitHub Actions
El archivo .github/workflows/sanity-deploy.yml define el proceso:
on:
repository_dispatch:
types: [sanity-deploy]Al recibir el dispatch de Sanity:
- Hace checkout del repo en la rama
main - Instala dependencias con pnpm 11
- Ejecuta
pnpm --filter @asamamx/web buildcon todas las variables de entorno - Despliega
apps/web/out/a Cloudflare Pages conwrangler pages deploy
Verificar que funciona
- Publica o edita cualquier evento/página en Sanity Studio
- En GitHub → repositorio → Actions → debe aparecer un run de “Deploy — Sanity content change”
- El run tarda ~2-3 minutos en completarse
- El sitio en
asamamx.comrefleja el cambio publicado
Agregar más tipos de documento al filter
Si se crea un nuevo tipo de documento en Sanity que afecte el frontend, agregar su _type al filtro del webhook:
_type in ["event", "page", "indexPage", "nuevoTipo"]Esto se edita en Sanity → API → Webhooks → el webhook existente.