Releases: DiogoRibeiro7/analytics-blog-jekyll
Releases · DiogoRibeiro7/analytics-blog-jekyll
Release list
v0.7.0
Added
tests/test_search_pages.rbcovers the generator: both pages when search is on, neither when it is off or unconfigured, and no duplicate when the site provides its own.- The README carries a badge showing the version published on RubyGems, linking to the gem page.
scripts/verify_gem_package.rbchecks that a built gem contains every bundle its manifest references; the release workflow builds the bundles and runs it before publishing.tests/test_gem_package.rbcovers what a site using the gem needs: the bundles are packaged, the plugins' gem dependencies are declared, and requiring the theme registers its Liquid tags.- The search index test checks that tags are whole tags rather than only that the field is an array.
- The integration suite runs axe-core over six pages in both light and dark mode, so contrast, missing accessible names and misplaced ARIA cannot regress unnoticed.
- A social card image (
assets/img/social-card.png), so the Open Graph and Twitter image tags no longer point at a missing file. - The release workflow now does a release in one run plus one pull request: "Run workflow" with a version bumps
developand opens the PR intomain; merging it tagsmain, publishes the GitHub release and starts the gem publish.
Changed
- MathJax is only loaded on pages that contain math (
theme_options.math.render_on_load: auto, the new default of the demo site) and Prism only on pages with a code block (theme_options.syntax_highlighting.load: auto); pages can still opt in or out withmath:andsyntax_highlighting:front matter, and a page withmath: falseis also left alone by the math preprocessor. Pages without either skip about 400 KB of CDN scripts and stylesheets. - The IBM Plex web fonts fall back to local fonts scaled to Plex's metrics, so the swap once the web font arrives no longer moves the layout, and the Google Fonts stylesheet no longer blocks rendering.
- The home hero image is preloaded and small screens get a 640 px variant (
hero_image_smallfor pages that set their ownhero_image). - The Lighthouse workflow inlines critical CSS before building, as the deploy does, so it measures the published configuration.
- CI jobs install only what they use: the Jekyll test job no longer installs libvips (the image plugin uses MiniMagick, which the runners already provide) or keeps redundant pip and
_sitecaches, and the accessibility, Lighthouse and deploy workflows no longer set up Python, which only the Rake verification task needs. - The hero background is served as a 46 KB WebP instead of a 1.27 MB PNG.
- Footer text and links, and the skip link in dark mode, meet the 4.5:1 contrast ratio; the blog listing uses second-level headings for its cards.
- The Tests workflow runs for pull requests into
mainas well asdevelop; the duplicate theme-stability workflow is gone. - The configuration guide documents where settings actually live (
_config.ymlplus_data/config/author.yml). - The gem publish can authenticate with RubyGems trusted publishing (OpenID Connect) instead of a stored API key; the
RUBYGEMS_TRUSTED_PUBLISHINGrepository variable selects it.
Fixed
- Sites installing the gem had the search interface and its JavaScript but no search: the page that renders it and the one that builds its index are pages, which a theme gem cannot ship. Both are generated now for any site with
features.searchenabled, and a site that defines either path keeps its own. - The published gem could not be used. Jekyll reads
_plugins/for a site but not for a theme gem, andlib/datalog-theme.rbdid not load them, so the tags the layouts use were never registered and every consumer site failed to build withUnknown tag 't'. Naming the theme underplugins:now loads them. - The gem shipped
_data/js_manifest.json, which points every page at the browser bundles, without the bundles themselves:assets/js/dist/is build output that git does not track, and the gemspec selected files withgit ls-files. Sites using the theme loaded no JavaScript at all. - The gemspec did not declare
loofah, which the notebook plugin requires, so loading the theme raisedcannot load such file -- loofah. - The home layout sorted
site.portfolio, which is nil unless a site declares that collection, and sorting nil stops the build. The section is skipped when the collection is absent. - The search index shipped every tag as a list of single characters, so the tag filter on the search page offered 34 buttons reading
a,b,[,"and so on instead of the 48 real tags. Asplit: ''in the index template turned each tag array into its string form before splitting it. - A tag consisting only of whitespace produced a filter button with no accessible name at all, which fails WCAG 4.1.2.
- The fallback author avatar carried an
aria-labelon a plaindiv, where ARIA prohibits it, so screen readers announced nothing for it. It is now an image role, matching the photo it stands in for. - Text set in the teal accent failed WCAG AA everywhere it appeared, reaching only 3.0:1 to 3.5:1 on post badges, skill tags, search highlights and Prism keywords. Teal text now uses a darker tone; the original teal stays for fills and borders.
- Dark mode had several unreadable components, none of which any check covered: the citation tools kept light backgrounds under light text, leaving a heading white on white at 1.09:1, and difficulty badges kept their light-mode text colour on a near-black pill at 1.93:1.
- Buttons marked
btn--ghostwere never styled, so they fell back to the browser's own button chrome and could not follow the theme. - The Playwright and coverage reports were copied into the built site and published with it. Both are excluded now, and the Playwright report is also ignored by git.
datalog checkreported every dependency as missing on Windows, including bundler, which it treats as a critical failure. The probe calledcommand -v, a POSIX shell builtin with no executable behind it; it now searchesPATHitself, honouringPATHEXT.- The build and test scripts run on Windows.
npm run test:integrationspawned the Playwright.cmdlauncher, which Node refuses withEINVAL;npm run build:criticalspawnedbundle, which is a.batthere and failed withENOENT;bundle exec rake ci:verifyinvokedpython3, which on Windows is a Microsoft Store stub rather than the interpreter; and the CLI tests ran the binstub through its shebang. Node dependencies now run under the current Node binary instead of their launcher shims, and the remaining launchers go through the command interpreter with arguments quoted, so paths containing spaces survive. - The site navigation no longer renders expanded and then animates shut on small screens once the script runs, which moved the whole page by about 340 px and put every page's cumulative layout shift near 0.3.
Removed
- Percy and its visual suite (
tests/visual/): Percy never ran without a token and carried the last open npm advisory and about 150 packages, and the suite failed 34 of its 58 specs on CDN waits and strict locators, locally and in CI. The integration specs undertests/integration/remain the browser checks and gate every deploy.npm auditis clean. - The
jekyll-jupyter-notebookgem and the Jupyter toolchain. Notebook pages are rendered by the theme; onlynbformatremains, for the notebook validation script. _data/config/site.yml,theme.ymlandfeatures.yml, which nothing read.
v0.6.1
Fixed
- An overlay hero on the home page produced an empty id (and an "Empty
sluggenerated" warning) because/slugifies to nothing; it now usespost-hero-home.
v0.6.0
Added
tocifyLiquid filter (_plugins/toc_filter.rb): the table-of-contents includes calledcontent | tocifybut no plugin defined it, so the aside rendered the whole article. The filter builds nestedtoc-listlists from the rendered headings within the requested level range.show_author: falsein front matter hides the byline in the article meta, for pages that are site chrome rather than articles.- The footer's "Explore" column reads
footer:from_data/navigation.ymlwhen present, falling back to the demo sections.
Fixed
- Prism was blocked on every page by a stale integrity hash for
prism.min.jsin_data/cdn-integrity.yml; the hashes are regenerated. - The
<head>emitted every SEO tag twice (title, description, Open Graph, Twitter, canonical, JSON-LD) because{% seo %}duplicated the theme's own markup; the tag is gone. - The Content Security Policy blocked MathJax's accessibility data (
connect-srcnow allows jsDelivr) and logged an error for areport-uridirective that<meta>policies cannot carry. - The home-page hero set its background through a
styleattribute the policy blocks; it now uses a nonced style element. - The header's search row overflowed the viewport on phones; it wraps below the brand now.
<body data-theme>stays in sync with the effective theme when either theme control is used.- The visualizations gallery's Plotly block gained the status, meta and toolbar markup the script and the docs expect.
- The
<head>now writes the<title>itself for every page (Page | Site, or the site title on the home page); it used to rely on the removed SEO tag when noseo_titlewas set. - Google Analytics was loaded with an empty measurement id because
google_analytics: ""is truthy in Liquid; the tag is emitted only when an id is set. - Google Fonts CSS and
gtag.jsare exempt from subresource integrity (both are served per-browser); the generator also ignores scratch directories, and the validator skips the notebook iframe documents nbconvert writes. - Internal links written as root-absolute paths (the 404 page, the getting-started and tools pages, two posts, and the portfolio, post, package and project layouts) now go through
relative_url, so the site works under a base path. Abrowserconfig.xmlreference to a file that does not ship is gone. - The deploy workflow builds the published artifact with the Pages base path, and runs the integration suite without the Percy-only
@visualspecs.npm run test:integrationexcludes those specs too, and the runner can start its static server on Windows. - The archive layout grouped posts with
where_expexpressions containing filters, which Jekyll's Liquid cannot parse; posts are now grouped by year and month with plain loops. Posts without adifficultyno longer trigger "Emptysluggenerated" warnings. - The page layout printed the title and subtitle a second time above the article scaffold, which already renders them.
- The math preprocessor hooked both
documentsandposts, so every post was processed twice and display math came out nested. The inline pattern also matched the$of a$$block; it now requires single delimiters on both sides. {% t %}with a quoted key leaked the closing quote into the first option name, so{% t 'post.reading_time' minutes=... %}printed a literal{{minutes}}.- Overlay post heroes set the background through an inline
styleattribute, which the Content Security Policy blocks. The image is now applied by a nonce'd<style>element scoped to the hero's id. - Card thumbnails on card grids were stretched by the
heightattribute the image optimizer adds and by the grid stretching card bodies. Cards now keep their intrinsic thumbnail ratio and align their content to the top. - The skip link peeked into the viewport before it received focus; it is now moved fully out of view until focused.