DEV Community

Jorge Brunal PĂ©rez
Jorge Brunal PĂ©rez

Posted on

Just, Automatizando tus tareas habituales

Publicado originalmente (2021-11-10) en mi sitio web.

đŸ€– automatizar!...

En algĂșn punto de nuestros proyectos generamos scripts, para automatizar algunos procesos, Ăł 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:

  • funciones predefinidas
  • uso de variables de entorno
  • manipulaciĂłn de strings
  • manejo de rutas
  • evaluaciĂłn de comandos
  • expresiones condicionales
  • extender las recetas con scripting en Bash, Python, Ruby, NodeJS, Perl

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.'
Enter fullscreen mode Exit fullscreen mode

En Just, los comandos, llamados "recetas", se almacenan en un archivo llamado .justfile, con una sintaxis inspirada en make.

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

  • De forma local, creando un archivo llamado .justfile en la raiz de tu projecto.
  • De forma global, creando varias tareas de proposito general.

 
 

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 }}!"
Enter fullscreen mode Exit fullscreen mode

y al lanzar nuestra receta, tendremos:

$ just hello Tux
Hello Tux!
Enter fullscreen mode Exit fullscreen mode

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.

En nuestro archivo .bashrc Ăł .zshrc agregar un nuevo alias:

alias .j='just -f ~/.tu_nombre_de_usuario.justfile --working-directory .'
Enter fullscreen mode Exit fullscreen mode

En Windows, el alias se logra con el comando doskey

doskey .j=just -f %USERPROFILE%\.tu_nombre_de_usuario.justfile --working-directory .\ $*
Enter fullscreen mode Exit fullscreen mode

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

$ .j nombre-receta
Enter fullscreen mode Exit fullscreen mode

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 }}"
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

 
 

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 "#! (el famoso shebang)

 
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!"
Enter fullscreen mode Exit fullscreen mode

 
Algunas de las recetas habituales son:

  • crear una aplicacion/libreria en Rust
  • crear un proyecto con Python, virtualenv y pip
  • generar claves de SSH
  • desplegar un backend de servicios en GAE/Fly/Heroku
  • ver el clima 😄
  • la IP actual 😉
  • mostrar estadisticas de un proyecto, y la cantidad de lineas de cĂłdigo, con tokei.

 

Referencias

Top comments (0)