Executando verificação de segurança...
30

Pitch: Ruke, uma ferramenta de automação de tarefas

Opa, tudo bem? Queria compartilhar um projeto que estou fazendo e mantendo.

O Ruke é uma ferramenta simples para automatizar tarefas de um projeto. Com ele, você pode definir uma tarefa com comandos que serão executados de maneira sequencial. Essas tarefas e comandos ficam em um arquivo TOML bem fácil de ler e configurar.

O projeto é feito em Rust e tem uma interface de linha de comando (CLI).

Veja uma demonstração do Ruke na versão 0.1.3.

Demonstração do ruke, mostrando a interface e executando algumas tarefas.

Escolhas importantes

Decidi desenvolver esse projeto usando Rust porque é uma linguagem de programação que estou aprendendo e ela tem uma boa reputação quanto a criação de ferramentas para desenvolvedores.

O Ruke foi totalmente inspirado pelo GNU Make e pelo just, porém uma diferença relevante está na escolha do arquivo de configuração. Enquanto esses projetos citados optaram por ter um formato próprio, eu escolhi usar o TOML por alguns motivos:

  • Dados os objetivos, não há necessidade de um controle total da implementação (sintaxe, funcionalidades, estruturas de dados).
  • A diferença do esforço para os ganhos de escrever um parser próprio é drástica.
  • Usar um formato simples e conhecido faz com que a curva de aprendizado seja mínima.

E esse nome, veio de onde?

O nome "ruke" é uma combinação de "rust" e "make".

O primeiro nome era "rufile" de "rust" e "makefile", mas em um post meu no Twitter o coelho Jeff Quesado comentou sobre o comando que seria utilizado e deu uma sugestão: Makefile -> make, Rufile -> ruke.

A partir desse momento, o projeto começou a se chamar ruke e o arquivo Rukefile (por implicações práticas, atualmente o arquivo principal é Ruke.toml).

Primeiros contribuidores

Eu tenho pouquíssimos repositórios privados, tudo que fiz e faço gosto de deixar público para os outros verem, se inspirarem, sugerirem alterações ou melhorias.

Open source and build in public are the ways!

Felizmente, conheci pessoas incríveis no Twitter (uma surpresa, não?) que me ajudaram e decidiram contribuir para o Ruke.

Uma delas já foi citada, o Jeff, que deu a ideia do nome.

O Felipe Cassiano foi o primeiro contribuidor do projeto em si, forkou, desenvolveu e mandou alguns pull requests. As mudanças mais significativas que ele fez foram:

  • Implementar o comando list que serve para listar as tarefas existentes.
  • Desenvolver os comandos add e remove que serviam para adicionar e remove tarefas do arquivo Ruke.toml (ainda existem mas foram modificados).
  • Adicionar um modo interativo para os comandos add e remove.
  • Implementar a troca da estrutura de dados principal de vetor para hash map.

E por último mas não menos importante, o Shwuy, que implementou uma busca pelo arquivo Ruke.toml usando o iterador Ancestors.

Essas contribuições agregaram na performance e, principalmente, na usabilidade da ferramenta.

Agradeço muito a eles por terem me ajudado a construir esse projeto (e não só), têm um espaço no meu coração. Foram os primeiros contribuidores de um projeto meu.

Atualização mais recente

A última atualização do Ruke (0.1.6) incrementou ainda mais a usabilidade. Inspirado no Bun, modifiquei as saídas do executor de tarefa e do comando list para que apareçam mais informações úteis.

Dá uma olhada em como ficou.

Demonstração das alterações mais recentes do Ruke, baseadas nas saídas do Bun.

Tenho gostado bastante do projeto pois adoro criar ferramentas para desenvolvedores e também porque está sendo útil para mim, tanto no âmbito do aprendizado quanto da utilização. Inclusive, estou usando o Ruke em um projeto full stack que comecei recentemente chamado Inu (aquele ali em cima no gif, é o back end).

Caso tenha ficado interessado em testar o Ruke, recomendo que instale pelo Cargo usando o comando abaixo:

cargo install ruke

Para iniciar um arquivo de configuração, basta executar:

ruke init

Pra executar a tarefa "main", execute:

ruke # ou ruke main

Com o comando ruke --help você pode ver um menu de ajuda com os comandos que existem e o que eles fazem. O comando ruke {comando} --help irá mostrar mais detalhes de um comando específico.

Você pode aprender como adicionar tarefas e especificar comandos na documentação, nas seções "Mastering the CLI" e "Mastering the Rukefile" no repositório do projeto.

Estarei aberto para dúvidas ou sugestões por aqui ou pelo Twitter/X se preferir.

Muito obrigado por ter lido até aqui ❤🦀.

2

Muito massa o ruke, curti! Curiosamente estava buscando algo desse tipo esses dias (ia acabar implementando). Mas se eu pudesse dar um "pitaco", seria uma boa ter um opção para rodar as tarefas de tempos em tempos (schedule) e deixar isso também configurável no TOML. Show demais pela ferramenta, parabéns!

1