Just, Automatizando tus tareas habituales

5 min(s) Fecha: 2021-11-10

馃 automatizar!...

En alg煤n punto de nuestros proyectos generamos scripts, para automatizar algunos procesos, o simplemente tenemos a la mano decenas de comandos (贸 alias para ellos) que hacen despliegues, construyen sitios, generan claves aleatorias, consultan el estado del clima, la IP etc...

Y al final del d铆a, tenemos que recordar mil comandos para tareas repetitivas, y es ah铆 donde brilla Just un programa para ejecutar tareas, otros programas, un automatizador para dominarlos a todos...

Just provee una sintaxis inspirada en make, para crear las recetas, adem谩s de:

y un largo etc茅tera de funcionalidades increibles, para la creaci贸n de recetas a tu gusto.

Ejemplo:

nombre-de-tu-receta:
  echo 'Esto es una receta usando Just!'

# esto es un comentario
otra-receta:
  @echo 'Esto es otra receta.'
En Just, los comandos, llamados recetas, se almacenan en un archivo llamado .justfile, con una sintaxis inspirada en make
-- un visitante del blog

Just se puede utilizar de varias maneras dependendiendo tus necesidades, sin embargo las maneras habituales son:


Just de forma local

El archivo .justfile se almacena en la raiz de tu projecto.

Veamos un ejemplo:

Creamos una receta llamada hello que acepta un par谩metro llamado guy. Esta receta, invoca a echo y le env铆a el par谩metro establecido.

# .justfile
hello guy:
    @echo "Hello {{ guy }}!"

y al lanzar nuestra receta, tendremos:

$ just hello Tux
Hello Tux!

Un archivo .justfile con recetas en una carpeta de un proyecto de software, puede entre otras cosas, construir el proyecto, lanzar pruebas unitarias, construir la documentaci贸n, hacer deploy a un servidor web, etc. Las posibilidades son infinitas.


Just de forma global

para usar Just de forma global es necesario organizar un archivo, usualmente llamado .user.justfile, con nuestras recetas y alojarlo en la carpeta $HOME de nuestro Sistema Operativo.

Luego, crear un alias (recomendado) para que Just, al ser lanzado cargue ese archivo de recetas.

Ejemplo, en nuestro archivo .bashrc.zshrc agregar un nuevo alias:

alias .j='just -f ~/.tu_nombre_de_usuario.justfile --working-directory .'

Nuestro alias sera ".j" y podemos utilizarlo como:

$ .j nombre-receta

Esto aplica para cualquier receta ubicada en ~/.user.justfile.

Ejemplo:

Crearemos una receta llamada repo que acepta un par谩metro llamado folder. Esta receta, crea una carpeta e inicializa git flow.

# .your_user.justfile
current_path := invocation_directory()

# configurar un nuevo repo usando git flow
repo folder:
    @echo "creando repo en {{ current_path }}/{{ folder }}"
    @echo "directorio de trabajo: {{ folder }}"
    @mkdir -pv {{ folder }}
    @echo
    @echo "iniciando git flow..."
    @cd {{ folder }} && git flow init -fd
    @echo
    @echo "proceso completado en: {{ current_path }}/{{ folder }}"

y al lanzar nuestra receta, tendremos:

$ .j repo awesome-frontend
creando repo en /home/diniremix/dev/awesome-frontend
directorio de trabajo: awesome-frontend
mkdir: se ha creado el directorio 'awesome-frontend'

iniciando git flow...
Inicializado repositorio Git vac铆o en /home/diniremix/dev/awesome-frontend/.git/
Using default branch names.
No branches exist yet. Base branches must be created now.
Branch name for production releases: [master] 
Branch name for "next release" development: [develop] 

How to name your supporting branch prefixes?
Feature branches? [feature/] 
Bugfix branches? [bugfix/] 
Release branches? [release/] 
Hotfix branches? [hotfix/] 
Support branches? [support/] 
Version tag prefix? [] 
Hooks and filters directory? [/home/diniremix/dev/awesome-frontend/.git/hooks] 

proceso completado en: /home/diniremix/dev/awesome-frontend

Extendiendo Just con Scripts

En algunas ocasiones queremos ir un poco m谩s all谩 con nuestras recetas, Just provee un mecanismo sencillo para extenderlas, usando Bash, Python, y otros lenguajes de script.

Lo 煤nico que tienes que hacer, es iniciar la receta con "#!"

Ejemplo:

# .justfile

receta-python:
  #!/usr/bin/env python3
  print('Hola desde python!')

receta-js:
  #!/usr/bin/env node
  console.log('Saludos desde JavaScript!')

receta-perl:
  #!/usr/bin/env perl
  print "Larry Wall dice Hola!\n";

receta-sh:
  #!/usr/bin/env sh
  set -euxo pipefail
  hello='Yo'
  echo "$hello desde un shell script!"

receta-ruby:
  #!/usr/bin/env ruby
  puts "Hola desde ruby!"

Algunas de las recetas habituales son:


Referencias