Pular para o conteúdo
Voltar ao início
Voltar ao blog
Tutorial

Workflows: Automatize tarefas de dev no Android, sem servidor

Automatize tarefas no Android com os Workflows do PocketCode: gatilhos por evento, agendamento cron no seu celular, retentativas e um editor visual — sem servidor, tudo no dispositivo.

10 min
Por Pelayo Naredo
Workflows: Automatize tarefas de dev no Android, sem servidor

Todo desenvolvedor acumula as mesmas pequenas tarefas repetitivas: rodar os testes depois de um push, fazer backup do banco de dados quando um deploy termina, formatar ao salvar, avisar a si mesmo quando um build falha. Num notebook, você cola tudo isso com runners de CI, jobs de cron e alguns scripts de shell num servidor em algum lugar. No celular, a resposta de sempre é "não dá". O PocketCode muda isso com os Workflows — um motor de automação orientado a eventos que permite automatizar tarefas no Android inteiramente no dispositivo, sem servidor para alugar e sem nada para manter vivo na nuvem.

Um workflow é simples de descrever: um gatilho (um evento dentro da IDE, ou um agendamento) mais uma sequência de passos que rodam sobre um contexto compartilhado. Isso já basta para montar fluxos de dev de verdade — do tipo para o qual você normalmente levantaria um pipeline de CI — bem ao lado do seu editor, terminal e gerenciador de banco de dados.

Três maneiras de criar um

Você nunca precisa começar de uma tela em branco. O módulo oferece três pontos de partida:

ModoComo você criaExemplo
TemplateToque em Ativar em um dos 8 templates prontos"Pipeline CI/CD", "Auto-Deploy no Push", "Backup do BD no Deploy"
Gerar com IADigite um prompt e receba um esqueleto editável"quando houver push para main, faça deploy e notifique" vira um workflow de 2 passos
EditorToque no botão "+" (FAB) para o formulário completoMonte do zero com bindings e políticas de retentativa

Ativar um template o clona em uma cópia editável com um ID novo, então você pode ajustá-lo sem tocar no original.

Gatilhos: o que acorda um workflow

Os workflows escutam eventos que fluem pela IDE. O motor se inscreve no barramento de eventos interno do app e mapeia cada evento para um tipo de gatilho. São dez tipos de gatilho:

GatilhoDispara emFiltro típico
Push do GitUm push concluídobranch ("main", "develop")
Commit do GitUm novo commitbranch
Arquivo salvoUm salvamento de arquivo no editorextensão (".kt", ".ts")
App abertoO app vindo para o primeiro plano
Comando de terminal finalizadoUm comando de terminal concluídopadrão do comando
Consulta de banco executadaUm resultado de consulta chegandonome da tabela
Deploy concluídoUm deploy bem-sucedidoprovedor ("vercel", "railway")
Deploy falhouUm deploy com falhaprovedor
Erro detectadoOutro workflow falhandonome do workflow / padrão de erro
ManualNada — roda por agendamento ou manualmente

Só entram na avaliação os workflows habilitados cujo tipo de gatilho corresponde, e um filtro opcional restringe ainda mais com uma correspondência de substring sem diferenciar maiúsculas de minúsculas — assim, um workflow de push do Git filtrado por main ignora todos os outros branches.

Agendamento: cron no seu celular, sem servidor

É aqui que a "automação sem servidor" fica concreta. Um workflow com gatilho manual e um agendamento anexado vira um job agendado. Nos bastidores, o agendador embrulha o WorkManager do Android e oferece dois modos.

Agendamentos por intervalo usam uma requisição de trabalho periódica. O piso do WorkManager é de 15 minutos, então valores menores são arredondados para cima. Os presets:

PresetIntervalo
A cada 15 minutos15 min
De hora em hora60 min
A cada 6 horas360 min

Agendamentos por cron são a parte interessante. O PocketCode traz seu próprio parser de cron de 5 campos (minuto, hora, dia do mês, mês, dia da semana) — sem biblioteca externa — com suporte a curingas *, valores únicos, listas N,M, intervalos N-M e passos */N. Dois presets de cron vêm embutidos:

  • Diariamente às 9h0 9 * * *
  • Semanalmente, segunda às 9h0 9 * * 1

Como a API periódica do WorkManager não consegue expressar cron de verdade, cada execução de cron é agendada como um job único que rearma o próximo disparo ao terminar, mantendo o cron vivo indefinidamente. O editor de agendamento mostra uma prévia ao vivo do "Próximo disparo" calculada a partir da sua expressão, e fica vermelho com "Expressão cron inválida" no instante em que o parse falha — feedback imediato antes de você salvar. O parser propositalmente mantém as coisas simples nesta versão: nomes de mês e dia, ?, L, #, segundos e ano não são suportados.

Os agendamentos são persistidos e recolocados na fila na inicialização do app, para que a morte de um processo não esvazie silenciosamente a sua automação.

O editor visual

O editor é um formulário completo: nome, descrição, um botão de habilitar, um dropdown de gatilho com filtro opcional e uma lista vertical de cards de passo que você pode reordenar, editar ou excluir. Adicionar um passo abre um seletor dividido em Controle de fluxo (Esperar, Se / Senão) e Ações — oito tipos de ação, cada um com um rótulo legível e um formulário de configuração dinâmico:

AçãoCampos do formulário
Executar comandoComando
NotificaçãoTítulo, mensagem
Analisar com IAPrompt, linguagem (opcional)
Gerar com IAPrompt, linguagem (opcional)
Operação GitOperação (commit/push/pull), branch, mensagem
DeployBranch (opcional)
Backup do bancoComando (opcional)
Abrir arquivoCaminho do arquivo, linha (opcional)

Cada passo de ação também tem seções recolhíveis de Confiabilidade e Condicional (mais sobre elas abaixo). Nada chega ao banco de dados até você pressionar Salvar na barra superior — aplicar e cancelar operam sobre o estado local do editor, então você pode experimentar à vontade. Salvar só é habilitado depois que o workflow tem um nome e ao menos um passo.

O editor expõe Esperar e um nível de Se/Senão hoje. O próprio motor também executa passos de Loop, Paralelo e Try/Catch, mas um editor visual para eles é um próximo passo conhecido, e não uma funcionalidade já disponível — então trate-os como blocos de construção no nível do motor, não como algo que você possa arrastar do seletor ainda.

Passando dados entre passos

Os passos não rodam isolados — eles compartilham um contexto, e qualquer campo de valor pode referenciar um passo anterior com um {{binding}}. A sintaxe:

ExpressãoResolve para
{{var.<name>}}Uma variável de contexto
{{step.<id>.status}}O status de um passo
{{step.<id>.output.<field>}}Um campo da saída de um passo
{{step.<id>.error}}A mensagem de erro de um passo
{{item.<alias>}}O item atual dentro de um loop
{{trigger.eventName}}O evento que iniciou a execução

Uma expressão que não resolve retorna uma string vazia de propósito, para que um binding a um passo que nunca rodou (digamos, em um ramo condicional pulado) não derrube a execução inteira. As condições se apoiam na mesma ideia: comparam valores resolvidos com igual, diferente, maior que, menor que, contém ou é-nulo, e os combinam com a lógica booleana usual de e/ou/não.

Confiabilidade: retentativas, backoff e timeouts

Uma automação em que você não pode confiar não é automação. Todo passo de ação suporta uma política de retentativa e um timeout, exibidos naquela seção recolhível de Confiabilidade:

ConfiguraçãoPadrão
Máximo de tentativas1 (sem retentativa)
Estratégia de backoffExponencial
Atraso inicial500 ms
Atraso máximoinicial × 30
Timeoutnenhum

O backoff vem nos sabores fixo, linear e exponencial (dobrando de forma exponencial: 500, 1000, 2000, 4000…), cada um limitado ao atraso máximo. Timeouts são timeouts de verdade — quando um dispara, o passo é marcado como expirado. Há também uma condição leve que você pode anexar a uma única ação: vincule-a a um valor, e aquele único passo é pulado quando o valor está vazio, é false, 0 ou nulo — assim você pode barrar um passo isolado sem envolvê-lo em um condicional completo.

Histórico de execuções que você pode inspecionar

Cada execução é persistida com um snapshot completo dos resultados de seus passos, o que significa que o histórico sobrevive a travamentos. A linha do tempo de Execuções lista as execuções da mais nova para a mais antiga com um ícone de status, timestamp, contagem de passos, duração e uma prévia de erro em uma linha, caso algo tenha falhado. Tocar em uma execução abre um detalhamento passo a passo: cor de status por passo (sucesso, falha, pulado, expirado, em execução), a duração do passo, sua saída renderizada como pares chave=valor e qualquer string de erro.

A retenção é automática — o repositório mantém as últimas 100 execuções por workflow e descarta qualquer coisa com mais de 30 dias, então o histórico continua útil sem crescer sem limite.

Templates para começar

Oito templates prontos cobrem os casos comuns, para que você tenha uma automação funcionando com um toque — ativar um o clona em uma cópia editável, então ajustá-lo nunca toca no original:

  • Pipeline CI/CD — ao dar push, rode os testes, faça deploy e notifique você
  • Auto-Deploy no Push — ao dar push para main, faça deploy e notifique você
  • Backup do BD no Deploy — quando um deploy for concluído, faça backup do banco e notifique você
  • Em um erro de workflow, notifique você e peça à IA para sugerir uma correção
  • Ao salvar um arquivo, rode o Prettier (prettier --write .)
  • Ao salvar um arquivo, faça stage e commit (git add -A && git commit)
  • Ao dar push para main, rode os testes e avise você que o branch é protegido
  • A cada commit, rode os testes e notifique você

Descreva em português simples

Se você prefere não montar os passos à mão, o Gerador com IA transforma um prompt em um workflow editável. Ele lê palavras-chave para inferir um gatilho ("push", "deploy failed", "error", "save"…) e uma sequência de ações ("deploy", "backup", "test", "format", "notify"…), e então mostra uma prévia que você pode Salvar e habilitar ou descartar. Um prompt como "quando houver push para main, faça deploy e notifique" produz um workflow de dois passos ligado a um push do Git em main. O gerador também tem um caminho apoiado por LLM que usa o provedor de IA configurado por você e recorre silenciosamente ao parser heurístico se algo der errado — então você sempre recebe uma prévia ou uma mensagem clara de "não foi possível inferir".

Sua automação permanece no seu dispositivo

Definições de workflow, histórico de execuções e agendamentos vivem em um banco de dados local no seu celular. As definições podem ter backup na nuvem para restauração, mas nada na nuvem é lido para executar a sua automação — o motor roda localmente, ponto final. Histórico de execuções e agendamentos não são sincronizados de forma alguma: o histórico é local do dispositivo, e os agendamentos são estado do WorkManager específico de cada aparelho. Sua automação é sua, e roda onde você está.

O PocketCode está a caminho da Google Play, trazendo um motor de automação completo — gatilhos, agendamento cron no celular, retentativas e um editor visual — para o mesmo app onde você escreve e publica o código. Faça o pré-cadastro para estar entre os primeiros a experimentá-lo no seu próprio dispositivo.

A ferramenta por trás deste artigo

Workflows

Pronto para experimentar o PocketCode?

Baixe o app e comece a programar pelo seu celular.