Skip to content

Update Hugo to 0.169.0 and Bulma to 1.0.4; Fix emoji tag pages - #1158

Open
CGBassPlayer wants to merge 18 commits into
JupiterBroadcasting:developfrom
CGBassPlayer:update-hugo-version
Open

CGBassPlayer wants to merge 18 commits into
JupiterBroadcasting:developfrom
CGBassPlayer:update-hugo-version

Conversation

@CGBassPlayer

@CGBassPlayer CGBassPlayer commented Nov 8, 2026 •

Copy link
Copy Markdown
Collaborator

Note

#576 (Pagefind search) depends on this PR. Merge this first.
#475 and #1155 should also be merged before this to ensure the site continues to operate as expected with these updates.

Closes #510
Fixes #516

Summary of the Fixes

  • Update Hugo from 0.105 to 0.169.0 and pin container image versions (Dockerfile, Dockerfile.dev, render.yaml)
  • Fix Hugo 0.169 template deprecations and pagination
  • Upgrade the vendored Bulma from 0.9 to 1.0.4 and compile Sass with Dart Sass
  • Restore theme styling for Bulma 1.0: font weights, pagination, navbar arrow/burger, title/footer details, people taxonomy pages
  • Centralize theme colours in _variables.sass
  • Install Dart Sass and Hugo in Render builds (build.sh)
  • Fix the episode page sidebar (Sponsors/Tags) stacking below the content between 769px and ~810px: Bulma 1.0's has-12-cols-tablet is a container query on the grid's own width, so the 12-column count is now keyed to the viewport in layout/episode.sass
  • Restore 0.9 tag spacing (zero the new flex gap on .tags), breadcrumb separator colour, and episode page bottom/mobile spacing
  • Fix 🦒 giraffe emoji tags page silently failing to build #516: emoji-only tags have an empty URL slug, so Hugo 0.169 wrote one of their term pages to /tags/ and replaced the tag index. A content adapter (content/tags/_content.gotmpl) adds a term page per emoji tag from data/emoji_slugs.toml, each with a <shortcode>-emoji slug (e.g. /tags/giraffe-emoji/); the suffix avoids clashing with text tags such as apple, zap, frog and ghost. The episode tag partial links emoji tags through their term page, which was previously a nonexistent /tags/%F0%9F%A6%92/

Python/pytest dependency updates are deliberately left out and will come in a separate PR.

Why update Bulma

  • Hugo's LibSass transpiler is deprecated in favour of Dart Sass. Bulma 0.9.2 only builds with the old @import style, so moving to Dart Sass meant moving to Bulma 1.0's @use structure.
  • Doing it in the same PR as the Hugo bump means one round of visual regression testing instead of two.
  • Bulma 1.x ships CSS variables and a native dark theme (data-theme=dark), which suits a dark-only site and replaces some of the old Sass overrides.
  • Cost: Bulma 1.0 removed tiles, so the episode page layout moved to fixed-grid/grid/cell, and some custom navbar, card, tag, and pagination styles were adapted.
  • 1.0.4 is the latest release, so nothing is pending. Going forward, only update Bulma when the toolchain or a needed feature requires it.

Testing

  • Production Dockerfile build succeeds
  • e2e suite run locally against hugo serve (Chromium only): 890 passed, 0 failed; Firefox and WebKit not run locally
  • Re-enabled the /tags/ index and emoji tag tests, and added test_tags_without_text_have_a_slug, which fails when an emoji tag has no line in data/emoji_slugs.toml (a new emoji tag without one brings the /tags/ overwrite back)
  • Compared episode, show, people, and other pages against a Render deploy at 1440/1100/800/390px; episode page heights now match
  • Render deploy of this branch not yet tested

Switch from the GitLab hugo_extended image (stops at 0.140.2) to the official
ghcr.io/gohugoio/hugo image, run as the non-root hugo user, pin nginx, and pin
HUGO_VERSION for Render.
languageCode -> locale, LanguageName -> Label, .Site.Data -> hugo.Data.
paginate is ignored by newer Hugo, so move it to [pagination] pagerSize to keep
12 items per page.
Replace the vendored Bulma 0.9.2 with 1.0.4 (@use based), switch css.Sass to the
dartsass transpiler, and clear all Sass deprecation warnings. The site stays dark
via data-theme=dark and _theme.sass. Custom navbar, card, tag, picks and level
styles are adapted to Bulma 1.0, and the episode page moves from tiles (removed
in Bulma 1.0) to fixed-grid/grid/cell.
Bulma 1.0 made titles/headings 800, strong 600 and buttons 500. Set
title/content-heading to 600, strong to 700 and buttons to 400 to match the
previous look.
Pagination links lose their control sizing under Bulma 1.0 (undefined control
vars), so set size, border, radius and colour explicitly. Restore the 3px navbar
dropdown arrows, and add the fourth burger span Bulma 1.0 expects so the icon
shows three bars again.
The host and guest taxonomy templates matched the person by the page .Title,
which newer Hugo no longer sets to the raw term, so pages rendered empty. Use
.Data.Term. Also restore Bulma 0.9 title/subtitle spacing and card footer border
colour.
Replace the hard-coded colours added during the Bulma 1.0 migration with named
variables from _variables.sass, which each partial pulls in with @use. Compiled
CSS is unchanged. Revert the nginx pin to nginx:alpine as before.
The theme compiles with Dart Sass, so Render now builds through build.sh,
following Hugo's Render hosting guide. Pin DART_SASS_VERSION to the Sass
bundled in the Hugo image and add it to the upgrade checklist.
- Let Bulma derive custom colour inverts; jb-gold text returns to dark
- Scope the .level override to the show links row
- Share card radius and breakpoints through _variables.sass
- Move episode grid styles from the template to layout/episode.sass
Hugo 0.146's template lookup no longer uses taxonomy/list.md for term pages,
so /hosts/<name>/index.md fell back to _default/list.md and lost the person
details and episode list. Look the person up by .Data.Term, matching the
HTML taxonomy templates.
# Conflicts:
#	themes/jb/assets/css/main.sass
… separators under Bulma 1.0

has-12-cols-tablet is a container query on the grid's own width, so the sidebar
stayed stacked below the content until ~810px. Key the 12-column count to the
viewport instead. Also zero the new flex gap on .tags (the tag margins already
space them), restore the 0.9 negative bottom margin, drop the grid row gap on
mobile, and pin the breadcrumb separator colour.
…piterBroadcasting#516)

The emoji-only tags have an empty slug, so Hugo 0.169 writes one of their term
pages to /tags/ and the index can't be tested. Skip instead of xfail, and
correct the skip reasons.
…ags/ (JupiterBroadcasting#516)

An emoji-only tag has an empty URL slug, so Hugo 0.169 wrote one of their term
pages to /tags/ and replaced the tag index. content/tags/<emoji>/_index.md now
gives each one a <shortcode>-emoji slug (e.g. /tags/giraffe-emoji/). The suffix
avoids clashing with text tags like apple, zap, frog and ghost.

The episode tag partial links emoji tags through their term page, the /tags/
index and emoji tag tests are re-enabled, and a test fails when an emoji tag
has no term file.
@CGBassPlayer CGBassPlayer changed the title Update Hugo to 0.169.0 and Bulma to 1.0.4 Update Hugo to 0.169.0 and Bulma to 1.0.4; Fix emoji tag pages Nov 11, 2026
…-named folders (JupiterBroadcasting#516)

A content adapter in content/tags reads data/emoji_slugs.toml and adds a
term page per emoji-only tag, so no file or directory is named after an emoji.
The guard test now checks the data file.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@CGBassPlayer
CGBassPlayer marked this pull request as ready for review November 11, 2026 18:16

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🦒 giraffe emoji tags page silently failing to build Upgrade to Hugo version 0.110.0

1 participant