DEV Community

Jorge Brunal Pérez
Jorge Brunal Pérez

Posted on

1

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

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

👥 Ideal for solo developers, teams, and cross-company projects

Learn more