Cómo crear un archivo Makefile autodocumentado

¿Mi nueva forma favorita de infrautilizar completamente un Makefile? Creación de alias de comandos de flujo de trabajo de repositorio personalizados por proyecto que puede registrar.

¿Puede un Makefile mejorar sus DevOps y mantener contentos a los desarrolladores? ¿Qué tan maravilloso sería si un nuevo desarrollador que trabaja en su proyecto no comenzara copiando y pegando comandos de su README? ¿Y si en lugar de:

pip3 install pipenv pipenv shell --python 3.8 pipenv install --dev npm install pre-commit install --install-hooks # look up how to install Framework X... # copy and paste from README... npm run serve

... podría simplemente escribir:

make start

... y luego empezar a trabajar?

Hacer una diferencia

Utilizo maketodos los días para eliminar el tedio de las actividades de desarrollo comunes, como actualizar programas, instalar dependencias y probar.

Para hacer todo esto con un Makefile (marca GNU), usamos reglas y recetas de Makefile. Existen paralelismos similares para la marca de sabor POSIX, como las reglas de destino. Aquí hay un gran artículo sobre Makefiles compatibles con POSIX.

Aquí hay algunos ejemplos de cosas que podemos hacer makemás fácilmente (lo siento):

update: ## Do apt upgrade and autoremove sudo apt update && sudo apt upgrade -y sudo apt autoremove -y env: pip3 install pipenv pipenv shell --python 3.8 install: ## Install or update dependencies pipenv install --dev npm install pre-commit install --install-hooks serve: ## Run the local development server hugo serve --enableGitInfo --disableFastRender --environment development initial: update env install serve ## Install tools and start development server 

Ahora tenemos algunos alias de línea de comandos que puede registrar. ¡Gran idea! Si se pregunta qué pasa con esa extraña ##sintaxis de comentarios, se pone mejor.

Un Makefile autodocumentado

Los alias son geniales, si recuerda qué son y qué hacen sin tener que escribir constantemente cat Makefile. Naturalmente, necesitas un helpcomando:

.PHONY: help help: ## Show this help @egrep -h '\s##\s' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' 

Con un poco de magia en la línea de comandos, este egrepcomando toma la salida de MAKEFILE_LIST, la ordena y la usa awkpara encontrar cadenas que siguen el ##patrón. A continuación, imprime una útil versión formateada de los comentarios.

Lo pondremos en la parte superior del archivo para que sea el destino predeterminado. Ahora, para ver todos nuestros prácticos atajos y lo que hacen, simplemente ejecutamos make, o make help:

help Show this help initial Install tools and start development server install Install or update dependencies serve Run the local development server update Do apt upgrade and autoremove 

¡Ahora tenemos nuestra propia herramienta CLI personalizada y específica para cada proyecto!

Las posibilidades de mejorar su flujo de DevOps con un Makefile autodocumentado son casi infinitas. Puede usar uno para simplificar cualquier flujo de trabajo y producir algunos desarrolladores muy felices.