chore(deps)!: Node 24 actions, Ubuntu 26.04, Ruby 3.4.11, drop Ruby 3.2, bump gems + bun

Merged
MH
1mo ago
+201-171

Summary

This clears the CI annotation Node.js 20 is deprecated … actions/checkout@v4 and brings every dependency up to date, so the release can go ahead.

AreaChange
GitHub Actionscheckout v4→v7, cache v4→v6, upload-artifact v4→v7, download-artifact v4→v8, docker setup-buildx v3→v4, login v3→v4, build-push v6→v7, ssh-agent v0.9.1→v0.10.0, configure-rubygems-credentials v1.0.0→v2.1.0 (still SHA-pinned)
release.ymldropped the FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 env workaround
docs/ bundlerails 8.1.4, mcp 1.6.1, playwright-ruby-client 1.63, capybara-playwright-driver 0.5.12, rubocop 1.91, plus transitive updates
docs/ bundaisyui 5.7.47, playwright 1.63.0 (kept in step with the Ruby client)
DockerfilesBun 1.3.2→1.4.2 in docs/Dockerfile and the generator's Dockerfile.tt
Ruby 3.2 droppedrequired_ruby_version >= 3.3, RuboCop TargetRubyVersion 3.3, CI + release matrices 3.3/3.4, AGENTS.md + installation page. Breaking for consumers on 3.2, so the release should be a minor bump at least.
Runnersevery job ubuntu-latest → ubuntu-26.04 (incl. the reusable deploy.yml)
Rubydocs site 3.4.2 → 3.4.11 (.ruby-version, Dockerfile, generator fallback)
Docs lintdocs/.rubocop → --ignore-parent-exclusion; CI's docs-site job now runs bundle exec rubocop
rake releasealso commits the refreshed docs/Gemfile.lock (it lagged a release behind every time)
Install generatorpackage.json stub floors raised to tailwindcss/@tailwindcss/cli ^4.3.3, daisyui ^5.7.47

The reusable deploy.yml is called at @main by every docs site. Once this merges, they all get the Node 24 actions with no change on their side.

Test plan

  • New generator spec: the stub's devDependencies must equal docs/package.json's for the same keys. It failed on the old floors and passes now.
  • bundle exec rake at root: 954 examples, 0 failures, 94.71% line coverage, rubocop clean. mcp 1.6.1 and simplecov 1.3.1 were bumped locally (root lock is gitignored).
  • docs/: bun run build:css (daisyUI 5.7.47), bundle exec rspec: 15 examples including the Playwright system specs, 0 failures
  • docs/ under Ruby 3.4.11: rspec 15/15, rubocop 34 files clean, CSS builds
  • CI green on ubuntu-26.04, with no Node 20 / ubuntu-latest annotations left
  • The next release run exercises upload-artifact v7 / download-artifact v8 and configure-rubygems-credentials v2.1.0. Its inputs are unchanged, all optional, and we pass none.

Deviations & judgment calls

  • Why docs rubocop crashed: RuboCop takes the outermost Gemfile's directory as the project root. From docs/ it therefore merged ../.rubocop.yml excludes, which loads plugins the docs bundle doesn't have. With those plugins added it inspected 0 files, because the root excludes docs/**/*. --ignore-parent-exclusion in a docs/.rubocop args file fixes the cause. Adding the plugin gems to the docs bundle would only have hidden it.
  • Root Gemfile.lock stays gitignored. This was decided in review. The gemspec's file whitelist keeps it out of the package either way.
  • Trusted publishing is already in place. release.yml uses OIDC (id-token: write) + configure-rubygems-credentials with no API token.
  • Held back by upstream constraints: diff-lcs 2.0 (rspec) and marcel 2.x (activestorage).
  • Bun 1.4.2 in the Dockerfiles so the image's Bun matches the one that writes bun.lock.
  • The rake release change has no spec; the release task has no test harness.

https://claude.ai/code/session_0198Mg9hhdrd7MAUa5DkMddi