Automation is supposed to make life easier — until it doesn’t. Two weeks ago, my GitHub Actions workflow for building and publishing updates to my personal blogs was working great. Today it decided to break. It wasn’t my code, my configuration, or even my hosting. The culprit? Ruby 3.4.0. My clean and simple Jekyll setup, built on the Jekyll template jekyll-theme-yat, suddenly stopped working, and I was forced to dig deeper into warnings I had been blissfully ignoring. Here’s what happened, how I fixed it, and what I learned.

The Setup: A Reliable Workflow

For my blogs, I use a straightforward GitHub Actions workflow. It’s simple, it works, and I like it that way. Here’s a stripped-down version of what the workflow looks like:

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.0 # You can specify a version compatible with your Jekyll setup

      - name: Install dependencies
        working-directory: $
        run: |
          gem install bundler
          bundle install

      - name: Build with Jekyll
        working-directory: $
        # Outputs to the './_site' directory by default
        run: bundle exec jekyll build
        env:
          JEKYLL_ENV: production

This setup has served me well for publishing content using Jekyll. The last time I successfully deployed was two weeks ago, with Ruby 3.3.6. All was well in my automated world.

The Warning Signs: Ignored at My Peril

During my last successful deployment, I noticed some warnings in the logs:

csv was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.4.0.
You can add csv to your Gemfile or gemspec to silence this warning.
/opt/hostedtoolcache/Ruby/3.3.6/x64/lib/ruby/gems/3.3.0/gems/safe_yaml-1.0.5/lib/safe_yaml/load.rb:22: warning: base64 was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.4.0.
You can add base64 to your Gemfile or gemspec to silence this warning.
/opt/hostedtoolcache/Ruby/3.3.6/x64/lib/ruby/gems/3.3.0/gems/liquid-4.0.4/lib/liquid.rb:72: warning: bigdecimal was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.4.0.
You can add bigdecimal to your Gemfile or gemspec to silence this warning.
  Jekyll Spaceship: 🚀 Jekyll-Spaceship 0.10.2
  Jekyll Spaceship: 🎉 A Jekyll plugin to provide powerful supports.
  Jekyll Spaceship: 👉 https://github.com/jeffreytse/jekyll-spaceship
Configuration file: /home/runner/work/blog/blog/sites/marktinderholt.com/_config.yml
  Jekyll Spaceship: 🗂  use table-processor
  Jekyll Spaceship: 🗂  use mathjax-processor
  Jekyll Spaceship: 🗂  use plantuml-processor
  Jekyll Spaceship: 🗂  use mermaid-processor
  Jekyll Spaceship: 🗂  use polyfill-processor
  Jekyll Spaceship: 🗂  use media-processor
  Jekyll Spaceship: 🗂  use emoji-processor
  Jekyll Spaceship: 🗂  use element-processor

Similar warnings popped up for base64 and bigdecimal, but since everything was working, I didn’t think much of it. The logs also contained cheerful output from plugins like Jekyll Spaceship, which lulled me into a false sense of security.

The Breaking Point: Ruby 3.4.0 Arrives

Today, when I attempted to publish a new update, the workflow broke. Ruby 3.4.1 had been installed by the ruby/setup-ruby action, and suddenly my once-reliable build step failed with a cascade of errors like this:

/opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/jekyll-3.9.5/lib/jekyll.rb:26: warning: logger was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.
You can add logger to your Gemfile or gemspec to silence this warning.
/opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/jekyll-3.9.5/lib/jekyll.rb:28: warning: csv was loaded from the standard library, but is not part of the default gems starting from Ruby 3.4.0.
You can add csv to your Gemfile or gemspec to silence this warning.
bundler: failed to load command: jekyll (/opt/hostedtoolcache/Ruby/3.4.1/x64/bin/jekyll)
/opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require': cannot load such file -- csv (LoadError)
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/jekyll-3.9.5/lib/jekyll.rb:28:in '<top (required)>'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/3.4.0/bundled_gems.rb:82:in 'Kernel.require'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/3.4.0/bundled_gems.rb:82:in 'block (2 levels) in Kernel#replace_require'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/jekyll-3.9.5/exe/jekyll:8:in '<top (required)>'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/bin/jekyll:25:in 'Kernel#load'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/bin/jekyll:25:in '<top (required)>'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli/exec.rb:59:in 'Kernel.load'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli/exec.rb:59:in 'Bundler::CLI::Exec#kernel_load'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli/exec.rb:23:in 'Bundler::CLI::Exec#run'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli.rb:452:in 'Bundler::CLI#exec'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/vendor/thor/lib/thor/command.rb:28:in 'Bundler::Thor::Command#run'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in 'Bundler::Thor::Invocation#invoke_command'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/vendor/thor/lib/thor.rb:538:in 'Bundler::Thor.dispatch'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli.rb:35:in 'Bundler::CLI.dispatch'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/vendor/thor/lib/thor/base.rb:584:in 'Bundler::Thor::Base::ClassMethods#start'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/cli.rb:29:in 'Bundler::CLI.start'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/exe/bundle:28:in 'block in <top (required)>'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/lib/bundler/friendly_errors.rb:117:in 'Bundler.with_friendly_errors'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/lib/ruby/gems/3.4.0/gems/bundler-2.6.2/exe/bundle:20:in '<top (required)>'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/bin/bundle:25:in 'Kernel#load'
 from /opt/hostedtoolcache/Ruby/3.4.1/x64/bin/bundle:25:in '<main>'
Error: Process completed with exit code 1.

The logs were filled with ominous messages about missing libraries. The error wasn’t subtle: the required dependencies csv, base64, and bigdecimal had been removed from Ruby’s standard library as part of a planned change. My build couldn’t proceed without them.

The Fix: Adding Dependencies Explicitly

The solution was simple but served as a reminder to heed warnings in the future. I updated my Gemfile to explicitly include the missing dependencies:

gem 'csv'
gem 'base64'
gem 'bigdecimal'

After updating the file, I ran bundle install locally to verify the changes. Pushing the updated Gemfile to my repository and triggering the GitHub Actions workflow once again restored functionality. My blogs were back online, and my workflow was running smoothly.

Lessons Learned: Pay Attention to Warnings

This experience reminded me of the importance of paying attention to warnings, especially when using tools and libraries that are actively maintained. The Ruby team had telegraphed this change well in advance, and my logs clearly flagged it during the last successful build. Ignoring these warnings left me scrambling when the breaking change finally hit.

For anyone else using Jekyll or Ruby-based tools in automated workflows, I recommend keeping an eye on your dependency logs and proactively addressing deprecations. If you’re using GitHub Actions, explicitly pin your Ruby version or ensure your Gemfile includes everything your build needs.

Conclusion

Automation can fail in unexpected ways, and staying on top of dependencies is critical for keeping your workflows running smoothly. In my case, a minor change in Ruby caused a temporary disruption that could have been avoided with a little more diligence. Now that I’ve fixed the issue, my clean and simple Jekyll setup is back in action — and I’ll be paying closer attention to warnings in the future.