Me encontraba con la necesidad de ejecutar un script en Emacs Lisp en un workflow cada vez que subiera un cambio a un repositorio de Git. Y además, debía lanzarse en un entorno Docker. Pero, ¡Emacs es un editor de texto! ¿Es posible? No hay nada imposible cuando trabajas con Emacs.
Primero debemos preparar el código que deseemos ejecutar. En mi caso construyo un sitio estático a partir de un archivo Org.
Creamos un archivo build.el
con el código. Yo utilicé el siguiente que te puede servir de ejemplo:
(require 'package)
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/") t)
(package-initialize)
(package-refresh-contents)
(package-install 'one)
(find-file "/usr/src/app/one.org")
(one-build)
- Actualiza la lista de paquetes de Melpa.
- Instala el paquete
one
. - Abre el archivo
one.org
. - Ejecuta la función
one-build
que crea el sitio estático.
Ahora debemos crear un Dockerfile que instale una versión de Emacs y ejecute el script.
Realiza un archivo llamado Dockerfile
con el siguiente contenido:
FROM debian:12-slim
# set work directory
WORKDIR /usr/src/app
# print output
RUN export TERM=xterm
# install software
RUN apt update
RUN apt install -y emacs-nox
# build
COPY . .
ENTRYPOINT emacs --batch --script build.el
emacs-nox
es una versión de Emacs sin interfaz gráfica. --batch
ejecuta Emacs en modo batch y --script
ejecuta un script.
En realidad podríamos acabar aquí, con compilar la imagen habríamos acabado. Sin embargo, para facilitarnos la ejecución crearemos un archivo docker-compose.yml
con el siguiente contenido:
services:
one-el:
build: .
restart: "no"
volumes:
- .:/usr/src/app/
Ahora, para ejecutar el script, simplemente escribe en el terminal:
docker-compose up
Ya podemos incorporar scripts escritos en Emacs Lisp en nuestros workflows.
{{ comments.length }} comentarios