Hice una GitHub Action para encender una vela virtual en la Catedral de Santiago de Compostela.

Empezó como una broma sobre despliegues. Hay releases, sobre todo los que incluyen una migración de base de datos o un cambio que ha estado esperando demasiado tiempo, que parecen necesitar algo de ayuda extra, quizá divina. La catedral tiene una web donde cualquiera puede encender una vela virtual y dejar un mensaje. Miré cómo funcionaba el formulario y lo convertí en una action pequeña llamada light-a-candle.

Qué hace la action

La action acepta un mensaje, un autor y un timeout. Los envía al mismo formulario público que usa la web y expone una salida success cuando la petición recibe una respuesta correcta.

La action es deliberadamente pequeña. Usa el módulo https que trae Node y @actions/core, codifica el mensaje como un envío normal de formulario y toma una redirección u otra respuesta HTTP correcta como confirmación de que la petición llegó.

name: Light a candle

on:
  push:
    branches: [main]

jobs:
  light-candle:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Light candle
        uses: Napuh/light-a-candle@v1
        with:
          message: "Please make my deployment work"
          author: ${{ github.actor }}

También se puede colocar después de un paso de despliegue, por ejemplo como pequeña celebración cuando producción se haya actualizado correctamente.

- name: Deploy
  run: npm run deploy

- name: Celebrate with a candle
  if: success()
  uses: Napuh/light-a-candle@v1
  with:
    message: "Production deploy successful"

No es una API

La web de la Catedral está hecha para que las personas enciendan velas, no para que los sistemas de CI lo hagan continuamente. La action envía una petición de formulario normal a un endpoint público, así que puede dejar de funcionar si la web cambia el formulario o la forma de responder. Es un experimento pequeño, no infraestructura que deba decidir si un despliegue tiene éxito.

También hay que usarla con moderación. Una vela antes de un release importante tiene gracia. Cientos de ellas desde un workflow no.

Por qué me gustan estos proyectos pequeños

Me gustan estos proyectos porque, aunque se hagan en un día, te hacen mirar un poco más de cerca una tecnología que normalmente das por sentada. GitHub Actions está en todas partes, pero es fácil usarlas sin pensar demasiado en cómo funcionan.

Escribir una action de chorra me hizo entender qué contiene una action, cómo se pasan los inputs y outputs, y qué es lo que realmente se ejecuta en CI. Con eso ya tenía razón suficiente para hacerla.