El problema con los submódulos
El mayor problema de tener el contenido en un repo separado al del blog es mantenerlos sincronizados. Si publicas desde Obsidian pero el blog vive en otro repo, alguien tiene que decirle al blog que hay contenido nuevo. Ese alguien puede ser GitHub Actions.
El problema con los submódulos
Mi vault de Obsidian vive en un repo privado. Mi blog referencia ese vault como un git submodule — específicamente la carpeta 20-Areas/Blog/ donde guardo los posts.
Los submódulos en git no se actualizan solos. Cuando hacés push al repo del submódulo (el vault), el repo padre (el blog) sigue apuntando al commit anterior. Para que el blog vea los posts nuevos, alguien tiene que entrar al repo del blog, correr git submodule update --remote y hacer push.
Hacerlo manualmente es tedioso y se olvida. Automatizarlo con un Action toma 20 minutos y nunca más pensás en eso.
Cómo funciona el Action
El workflow vive en el vault. Se dispara en cada push a main que toque la carpeta 20-Areas/Blog/.
name: Sync blog content
on:
push:
branches: [main]
paths:
- "20-Areas/Blog/**"
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Trigger blog submodule update
uses: actions/github-script@v7
with:
github-token: ${{ secrets.BLOG_REPO_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: 'tu-usuario',
repo: 'tu-blog',
workflow_id: 'update-submodule.yml',
ref: 'main'
})
El blog tiene su propio workflow que, al recibir el dispatch, actualiza el submódulo:
name: Update vault submodule
on:
workflow_dispatch:
jobs:
update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
token: ${{ secrets.BLOG_REPO_TOKEN }}
- name: Update submodule
run: |
git submodule update --remote content/vault
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add content/vault
git diff --staged --quiet || git commit -m "chore: update vault submodule"
git push
Cuando Vercel detecta el push al repo del blog, redespliega automáticamente.
El flujo completo
- Escribo un post en Obsidian y cambio
draft: false - Obsidian Git hace push al vault
- El Action del vault detecta el push en
20-Areas/Blog/ - Dispara el workflow del blog via
workflow_dispatch - El blog actualiza el submódulo y hace push
- Vercel redespliega
Desde que termino el post hasta que aparece online: entre 2 y 5 minutos, sin que yo toque nada.
El token entre repos
Para que el Action del vault pueda disparar workflows en el blog (repo separado), necesitás un Personal Access Token (PAT) con permiso workflow. Guardalo como secret en el vault repo con el nombre BLOG_REPO_TOKEN.
Si los repos están bajo la misma organización de GitHub, podés usar un token de organización en vez de uno personal para mayor seguridad.
Lo que habría hecho diferente
La solución del submódulo funciona, pero agrega complejidad al setup inicial. Una alternativa más simple: leer los archivos Markdown directamente desde la API de GitHub en build time, sin submódulo. Menos partes móviles, más fácil de debuggear cuando algo falla.