Saltar al contenido
Volver al inicio
Volver al blog
Tutorial

Workflows: automatiza tareas de desarrollo en Android, sin servidor

Automatiza tareas en Android con los Workflows de PocketCode: disparadores por eventos, cron programado en el móvil, reintentos y editor visual, sin servidor.

11 min
Por Pelayo Naredo
Workflows: automatiza tareas de desarrollo en Android, sin servidor

Todo desarrollador acumula las mismas pequeñas tareas repetitivas: lanzar los tests después de un push, hacer una copia de seguridad de la base de datos cuando sale un deploy, formatear al guardar, avisarte cuando falla un build. En un portátil lo unes todo con runners de CI, tareas cron y un par de scripts de shell en algún servidor. En un móvil, la respuesta de siempre es «no se puede». Pocket Code cambia eso con los Workflows: un motor de automatización basado en eventos que te permite automatizar tareas en Android por completo en el dispositivo, sin ningún servidor que alquilar ni nada que mantener vivo en la nube.

Un workflow es sencillo de describir: un disparador (un evento dentro del IDE o una programación) más una secuencia de pasos que se ejecutan sobre un contexto compartido. Eso basta para construir flujos de desarrollo reales —del tipo para el que normalmente montarías un pipeline de CI— justo al lado de tu editor, tu terminal y tu gestor de base de datos.

Tres formas de crear uno

Nunca tienes que empezar desde un lienzo en blanco. El módulo te ofrece tres puntos de partida:

ModoCómo lo creasEjemplo
PlantillaToca Activar en una de las 8 plantillas integradas"CI/CD Pipeline", "Auto-Deploy on Push", "DB Backup on Deploy"
Generar con IAEscribe un prompt y obtén un esqueleto editable"cuando haya push a main, despliega y notifica" se convierte en un workflow de 2 pasos
EditorToca el botón "+" (FAB) para el formulario completoConstrúyelo desde cero con bindings y políticas de reintento

Activar una plantilla la clona en una copia editable con un ID nuevo, así que puedes ajustarla sin tocar el original.

Disparadores: qué despierta a un workflow

Los workflows escuchan los eventos que fluyen por el IDE. El motor se suscribe al bus de eventos interno de la app y asocia cada evento a un tipo de disparador. Hay diez tipos de disparador:

DisparadorSe dispara conFiltro típico
Git pushUn push completadorama ("main", "develop")
Git commitUn nuevo commitrama
Archivo guardadoAl guardar un archivo en el editorextensión (".kt", ".ts")
App abiertaLa app pasando a primer plano
Comando de terminal terminadoUn comando de terminal que terminapatrón de comando
Consulta de base de datos ejecutadaUn resultado de consulta que lleganombre de tabla
Deploy completadoUn deploy correctoproveedor ("vercel", "railway")
Deploy fallidoUn deploy fallidoproveedor
Error detectadoOtro workflow que fallanombre de workflow / patrón de error
ManualNada; se ejecuta por programación o a mano

Solo entran en evaluación los workflows habilitados cuyo tipo de disparador coincide, y un filtro opcional lo acota aún más con una coincidencia de subcadena que no distingue mayúsculas de minúsculas, de modo que un workflow de Git push filtrado a main ignora cualquier otra rama.

Programación: cron en tu móvil, sin servidor

Aquí es donde la «automatización sin servidor» se vuelve concreta. Un workflow con un disparador manual y una programación asociada se convierte en una tarea programada. Por debajo, el programador envuelve el WorkManager de Android y ofrece dos modos.

Las programaciones por intervalo usan una petición de trabajo periódica. El mínimo de WorkManager es de 15 minutos, así que los valores más cortos se elevan hasta ese límite. Los presets:

PresetIntervalo
Cada 15 minutos15 min
Cada hora60 min
Cada 6 horas360 min

Las programaciones cron son la parte interesante. PocketCode incorpora su propio parser de cron de 5 campos (minuto, hora, día del mes, mes, día de la semana) —sin librería externa— compatible con comodines *, valores únicos, listas N,M, rangos N-M y pasos */N. Hay dos presets de cron integrados:

  • Diario a las 9am0 9 * * *
  • Semanal, lunes a las 9am0 9 * * 1

Como la API periódica de WorkManager no puede expresar un cron real, cada ejecución de cron se programa como una tarea puntual que rearma el siguiente disparo cuando termina, manteniendo el cron vivo de forma indefinida. El editor de programación muestra una vista previa en vivo de «Próximo disparo» calculada a partir de tu expresión, y se pone en rojo con «Expresión cron no válida» en el momento en que falla el análisis: feedback inmediato antes de guardar. El parser mantiene las cosas simples a propósito en esta versión: los nombres de mes y día, ?, L, #, los segundos y el año no son compatibles.

Las programaciones se persisten y se vuelven a encolar al arrancar la app, de modo que la muerte de un proceso no vacía tu automatización sin que te enteres.

El editor visual

El editor es un formulario completo: nombre, descripción, un interruptor de activado, un desplegable de disparador con un filtro opcional y una lista vertical de tarjetas de paso que puedes reordenar, editar o eliminar. Añadir un paso abre un selector dividido en Control de flujo (Wait, If / Else) y Acciones: ocho tipos de acción, cada uno con una etiqueta legible y un formulario de configuración dinámico:

AcciónCampos del formulario
Ejecutar comandoComando
NotificaciónTítulo, mensaje
Analizar con IAPrompt, lenguaje (opcional)
Generar con IAPrompt, lenguaje (opcional)
Operación GitOperación (commit/push/pull), rama, mensaje
DeployRama (opcional)
Copia de base de datosComando (opcional)
Abrir archivoRuta del archivo, línea (opcional)

Cada paso de acción tiene además secciones plegables de Fiabilidad y Condicional (más sobre eso más abajo). Nada llega a la base de datos hasta que pulsas Guardar en la barra superior: aplicar y cancelar trabajan sobre el estado local del editor, así que puedes experimentar con libertad. Guardar solo se habilita una vez que el workflow tiene un nombre y al menos un paso.

El editor expone Wait y un nivel de If/Else hoy por hoy. El propio motor también ejecuta pasos Loop, Parallel y Try/Catch, pero un editor visual para esos es un siguiente paso conocido más que una superficie ya disponible, así que trátalos como bloques de construcción a nivel de motor, no como algo que puedas arrastrar desde el selector todavía.

Pasar datos entre pasos

Los pasos no se ejecutan de forma aislada: comparten un contexto, y cualquier campo de valor puede referenciar un paso anterior con un {{binding}}. La sintaxis:

ExpresiónSe resuelve a
{{var.<name>}}Una variable de contexto
{{step.<id>.status}}El estado de un paso
{{step.<id>.output.<field>}}Un campo de la salida de un paso
{{step.<id>.error}}El mensaje de error de un paso
{{item.<alias>}}El elemento actual dentro de un loop
{{trigger.eventName}}El evento que inició la ejecución

Una expresión que no se resuelve devuelve una cadena vacía a propósito, de modo que un binding a un paso que nunca se ejecutó (por ejemplo, en una rama condicional que se saltó) no revienta toda la ejecución. Las condiciones se construyen sobre la misma idea: comparan valores resueltos con igual, distinto, mayor que, menor que, contiene o es nulo, y se combinan con la lógica booleana habitual de y/o/no.

Fiabilidad: reintentos, backoff y timeouts

Una automatización en la que no puedes confiar no es automatización. Cada paso de acción admite una política de reintentos y un timeout, expuestos en esa sección plegable de Fiabilidad:

AjusteValor por defecto
Máximo de intentos1 (sin reintento)
Estrategia de backoffExponencial
Retardo inicial500 ms
Retardo máximoinicial × 30
Timeoutninguno

El backoff viene en variantes fija, lineal y exponencial (duplicación exponencial: 500, 1000, 2000, 4000…), cada una limitada por el retardo máximo. Los timeouts son timeouts reales: cuando salta uno, el paso se marca como agotado. También hay una condición ligera que puedes asociar a una sola acción: enlázala a un valor y ese paso se salta cuando el valor está vacío, es false, 0 o null, de modo que puedes condicionar un solo paso sin envolverlo en un condicional completo.

Historial de ejecuciones que puedes inspeccionar

Cada ejecución se persiste con una instantánea completa de los resultados de sus pasos, lo que significa que el historial sobrevive a los cierres inesperados. La línea de tiempo de Ejecuciones lista las ejecuciones de la más reciente a la más antigua con un icono de estado, marca de tiempo, número de pasos, duración y una vista previa de error de una línea si algo falló. Al tocar una ejecución se abre un desglose paso a paso: color de estado por paso (éxito, fallo, saltado, con timeout, en ejecución), la duración del paso, su salida renderizada como pares clave=valor y cualquier cadena de error.

La retención es automática: el repositorio conserva las últimas 100 ejecuciones por workflow y descarta todo lo más antiguo de 30 días, de modo que el historial sigue siendo útil sin crecer sin límite.

Plantillas para empezar

Ocho plantillas integradas cubren los casos habituales, así que puedes tener una automatización funcionando con un solo toque — activar una la clona en una copia editable, así que ajustarla nunca toca el original:

  • CI/CD Pipeline — al hacer push, lanza los tests, despliega y te notifica
  • Auto-Deploy on Push — al hacer push a main, despliega y te notifica
  • DB Backup on Deploy — cuando termina un deploy, hace copia de la base de datos y te notifica
  • Ante un error de un workflow, te notifica y le pide a la IA que sugiera un arreglo
  • Al guardar un archivo, ejecuta Prettier (prettier --write .)
  • Al guardar un archivo, hace stage y commit (git add -A && git commit)
  • Al hacer push a main, lanza los tests y te notifica que la rama está protegida
  • En cada commit, lanza los tests y te notifica

Descríbelo en lenguaje natural

Si prefieres no ensamblar los pasos a mano, el Generador con IA convierte un prompt en un workflow editable. Lee palabras clave para inferir un disparador ("push", "deploy failed", "error", "save"…) y una secuencia de acciones ("deploy", "backup", "test", "format", "notify"…), y luego muestra una vista previa que puedes Guardar y activar o descartar. Un prompt como "cuando haya push a main, despliega y notifica" produce un workflow de dos pasos conectado a un Git push en main. El generador también tiene una vía respaldada por LLM que usa tu proveedor de IA configurado y recurre en silencio al parser heurístico si algo sale mal, así que siempre obtienes una vista previa o un mensaje claro de «no se pudo inferir».

Tu automatización se queda en tu dispositivo

Las definiciones de workflow, el historial de ejecuciones y las programaciones viven en una base de datos local en tu móvil. Las definiciones pueden respaldarse en la nube para restaurarlas, pero nunca se lee nada de la nube para ejecutar tu automatización: el motor se ejecuta localmente, punto. El historial de ejecuciones y las programaciones no se sincronizan en absoluto: el historial es local del dispositivo, y las programaciones son estado de WorkManager específico de cada dispositivo. Tu automatización es tuya, y se ejecuta donde estás.

PocketCode va camino de Google Play, llevando un motor de automatización completo —disparadores, programación cron en el móvil, reintentos y editor visual— a la misma app donde escribes y publicas el código. Apúntate al preregistro para estar entre los primeros en probarlo en tu propio dispositivo.

La herramienta detrás de este artículo

Workflows

¿Listo para probar PocketCode?

Descarga la app y empieza a programar desde tu móvil.