manumateos.dev

Generar sitio Web con Hugo desde GitHub Actions

Ya os conté que este sitio Web está generado utilizando Hugo, un generador de sitios Web estáticos. Y es algo que me gusta, pero tal como lo configuré inicialmente tenía una cuestión que me resultaba incómoda. Básicamente me obligaba a publicar el sitio Web utilizando mi ordenador, puesto que necesitaba ejecutar hugo -D para generar los ficheros HTML, CSS, XML y tal.

Una mejora que me parece obvia en este caso es que el sitio Web se genere utilizando un sistema de integración continua. Y, estando el sitio Web alojado en GitHub Pages, la opción obvia para llevar esto a cabo es usar GitHub Actions.

No hay necesidad de reinventar la rueda. Arnab Kumar Shil tiene un tutorial en su sitio Web donde explica los pasos para configurar GitHub Actions, y proporciona el código para el fichero main.yml correspondiente al workflow.

Eso sí, en mi caso he tenido que modificar algunas cuestiones. En este momento lo he dejado así:

name: CI
on: push
jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - name: Git checkout
        uses: actions/checkout@v2

      - name: Update theme
        # (Optional)If you have the theme added as submodule, you can pull it and use the most updated version
        run: git submodule update --init --recursive

      - name: Setup hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "0.92.2"

      - name: Build
        # remove --minify tag if you do not need it
        # docs: https://gohugo.io/hugo-pipes/minification/
        run: hugo --minify

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          personal_token: ${{ secrets.TOKEN }}
          external_repository: (repo)
          publish_dir: ./public
          #   keep_files: true
          user_name: Manu Mateos
          user_email: hola@manumateos.dev
          publish_branch: main
          cname: www.manumateos.dev

Lo primero que he modificado es la versión de Hugo. En el tutorial especifica una versión demasiado antigua, y el parámetro --minify requiere una versión posterior. La que he configurado es la 0.92.2, la última en el momento de escribir este artículo.

Eso sí: esa configuración incluye que el workflow utilice un token de acceso personal de GitHub para autenticarse, y eso significa que ese workflow tiene acceso de lectura y escritura… a todos mis repositorios, públicos o privados. Y no me hace mucha gracia darle semejante acceso a un tercero que, si bien a priori no tiene por qué tener intenciones maliciosas, nada me garantiza que en un futuro no cambie de manos y decida curiosear más de la cuenta, o borrar lo que no deba.

Estaré vigilante por si acaso, porque no se me ocurre otra forma de darle un acceso más limitado a esta acción. Podría usar una clave SSH para realizar la conexión, pero en realidad estaría en las mismas. En todo caso también pueden generarse tokens temporales e irlos renovando cada mes.

En principio este artículo lo he escrito con el iPad y lo he publicado utilizando este método, así que si lo lee alguien es que se ha publicado bien y ha funcionado todo.