Jekyll builds: de GitHub Pages a GitHub Actions
Últimamente he estado trabajando en algunas actualizaciones y correcciones para mi sitio web personal, que funciona gracias a GitHub Pages y Jekyll 3, desde 2015. Una de estas correcciones y mejoras fue implementar la posibilidad de tener imágenes de OpenGraph para que fuera más llamativo al publicar en redes sociales, usando el plugin igor-alexandrov/jekyll-og-image.
Este plugin requiere un flujo diferente al que ofrece GitHub Pages, debido a las dependencias que utiliza, por lo que es necesario cambiar el sistema de builds a GH Actions y un workflow personalizado en su lugar. Esto me hizo pensar en qué nos estamos perdiendo al seguir usando gh-pages, como por ejemplo, seguir atados a los plugins oficiales y validados por GitHub, que aunque ofrece una buena selección, sigue siendo algo limitado. Por ejemplo, no soporta versiones superiores a la 3.10 de Jekyll, algo que me mosquea porque existe un bug conocido y resuelto en la versión 4.4.0 que obliga a añadir módulos adicionales… solo para poder construir el sitio.
Para dejar de utilizar GH Pages, lo primero que tuve que hacer es eliminar las referencias de mi Gemfile. Quedando algo así.
source "https://rubygems.org/"
gem "jekyll", "~> 4.4.1"
gem "jekyll-feed", "~> 0.12"
gem "jekyll-paginate"
gem "jekyll-seo-tag"
gem 'jekyll-og-image'
platforms :mingw, :x64_mingw, :mswin, :jruby do
gem "tzinfo", "~> 1.2"
gem "tzinfo-data"
end
gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
gem "webrick", "~> 1.8"
A continuación, regeneramos el Gemfile.lock y de paso, actualizamos las dependencias, utilizando bundle.
bundle update
bundle install
Y por último, creamos una Action nueva, que haga la magia. El contenido de este workflow es puramente orientativo. Sientete libre de modificarlo para que se adapte a tus necesidades.
name: Deploy Jekyll site to Pages
on:
push:
branches: ["gh-pages"]
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@4a9ddd6f338a97768b8006bf671dfbad383215f4
with:
ruby-version: '3.4'
bundler-cache: true
cache-version: 0
- name: Set Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: 20.x
- name: Run install
uses: borales/actions-yarn@v4
with:
cmd: install
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Build with Jekyll
run: bundle exec jekyll build --baseurl "$"
env:
JEKYLL_ENV: production
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
deploy:
environment:
name: github-pages
url: $
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
Una vez publicado, cada vez que hagamos un commit sobre la rama gh-pages, regenerará nuestro proyecto y reconstruirá el sitio web. Permitiéndonos extenderlo como queramos.