
Shipcastv0.3.0
Shipcast v0.3.0 redacta tus lanzamientos desde una GitHub Action sin nada que alojar, escribe tu blog en los idiomas que elijas y trae una app rediseñada que puedes instalar.
Shipcast convierte una release de GitHub en un lanzamiento: lee el código en la etiqueta, redacta el artículo y un post para cada canal, y los publica cuando los apruebas. La versión 0.3.0 te deja ejecutarlo desde una GitHub Action en tus propios repos sin alojar nada, escribe tu blog en los idiomas que elijas y trae una app rediseñada que puedes instalar en el móvil o en el escritorio.
Si ya usas Shipcast, aquí tienes lo que ha cambiado y qué hacer al actualizar.

¿Por qué una GitHub Action?
Hasta ahora necesitabas un servidor para usar Shipcast. A mí me vale, pero es mucho pedir a quien solo quiere anunciar su próxima release. Con la v0.3.0 todo el flujo corre en GitHub Actions: publicas una release, llega un pull request de borradores a tu repo de lanzamientos con el artículo y un post por canal, y al hacer merge cada canal se publica una vez.
¿Cómo configuro la Action?
En el repo de tu proyecto, con Node 24:
npx @yeyo11/shipcast init
init escribe el workflow de lanzamiento que usa yeyo11/shipcast-action@v1, .github/launch.yml y, para tu repo de lanzamientos, brand.yml y un workflow de publicación. Después imprime todos los secretos que tienes que configurar. Puedes pasarle las opciones de entrada:
npx @yeyo11/shipcast init --launches-repo tu-usuario/launches --ai openai --tone "Directo, práctico, en primera persona."
Los borradores se escriben con tu propia clave. --ai acepta anthropic (por defecto) u openai, y la entrada ai-base-url de la action lo apunta a cualquier servidor compatible con OpenAI. Para probar la configuración sin publicar nada, pon la variable del repositorio SHIPCAST_DRY_RUN=true: la ejecución de publicación lista lo que publicaría.
Cada enlace a tu blog sale con utm_source, utm_medium y utm_campaign, así tu analítica muestra de qué canal llegó cada visita. dev.to y Hashnode mantienen la URL canónica limpia.
¿Y si el cron de GitHub llega tarde?
Los posts programados y los reintentos se ejecutan en una «ronda». GitHub retrasa o descarta las ejecuciones schedule, así que el workflow de publicación tiene tres líneas de cron solo como respaldo y acepta workflow_dispatch. Para que las rondas lleguen a tiempo, lánzalo cada 15 minutos desde fuera de GitHub: un Cloudflare Worker, cron-job.org o tu propio servidor. init imprime la llamada exacta:
curl -fsS -X POST \
-H "Authorization: Bearer $SHIPCAST_DISPATCH_TOKEN" \
-H "Accept: application/vnd.github+json" \
https://api.github.com/repos/<tu-usuario>/launches/actions/workflows/shipcast-publish.yml/dispatches \
-d '{"ref":"main"}'
El token es uno de grano fino solo para el repo de lanzamientos, con permiso de lectura y escritura en Actions. Una ronda tardía solo retrasa un post; no pierde ninguno.
¿Cómo elijo los idiomas de mi blog?
Lístalos en brand.yml con cualquier código ISO 639-1. El primero es el idioma principal:
# brand.yml
languages:
blog: [en, es]
El artículo, el número de la newsletter y los posts siguen esa lista, igual que los selectores de idioma de la app. dev.to y Hashnode republican la versión en inglés si existe; si no, la del primer idioma. Ojo al actualizar: sin languages.blog, Shipcast ahora escribe solo en inglés.
¿Qué ha cambiado en la app?
Todas las pantallas se han rehecho. Los lanzamientos te esperan y los apruebas en la app. Cada borrador se abre en un editor con modos Markdown y Visual, y su barra de herramientas se ajusta a lo que el canal sabe formatear. Las estadísticas muestran cada canal y cada lanzamiento, una paleta de búsqueda te lleva a cualquier lanzamiento, cuenta o página, y Sync all actualiza todas las cuentas en Channels.
La app además se instala. En el móvil o en el escritorio se abre como aplicación independiente, muestra su propia página sin conexión cuando se cae la red y ofrece Reload cuando hay versión nueva, así nada se recarga a mitad de una edición.
¿Cómo funcionan las notificaciones?
Shipcast avisa a tu móvil o a tu escritorio cuando una respuesta a un comentario o un lanzamiento espera tu aprobación, cuando algo falla y cuando un lanzamiento sale. Actívalo en cada dispositivo en Settings → Notifications, con un interruptor por evento. En iPhone, añade antes Shipcast a la pantalla de inicio. Una notificación nunca muestra el texto de un comentario ni de un borrador. En tu propio servidor, define SHIPCAST_VAPID_PUBLIC_KEY y SHIPCAST_VAPID_PRIVATE_KEY (mira docs/push.md).
¿Cómo actualizo una instalación propia?
git pull
pnpm install
pnpm app # las migraciones de la base de datos se ejecutan al arrancar
Dos cosas que revisar:
- claudio arranca ahora con su propio perfil de Compose:
docker compose --profile claudio up -d, oCOMPOSE_PROFILES=claudioen.env. Sin ninguno de los dos,docker compose up -dsolo arranca Postgres. - Si tu blog tiene más idiomas que el inglés, lístalos en
languages.blog.
¿Y ahora qué?
La guía paso a paso de la Action está en docs/getting-started.md, y la lista completa de cambios en el changelog. Si aún no tienes blog, yeyo11/shipcast-blog es una plantilla con Astro y Tailwind que ya lee los artículos de Shipcast y se despliega en GitHub Pages.
Si Shipcast te ahorra escribir el mismo anuncio diez veces, una estrella en el repositorio ayuda a que otros desarrolladores lo encuentren.