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.'
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 }}!"
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.
En nuestro archivo .bashrc Ăł .zshrc agregar un nuevo alias:
alias .j='just -f ~/.tu_nombre_de_usuario.justfile --working-directory .'
En Windows, el alias se logra con el comando doskey
doskey .j=just -f %USERPROFILE%\.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 "#! (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!"
Â
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.
Â
Top comments (0)