Skip to content

ci: drop EOL Rails 7.2 from the matrix - #54

Merged
Fivell merged 2 commits into
masterfrom
chore/drop-eol-rails
Oct 1, 2026
Merged

Fivell merged 2 commits into
masterfrom
chore/drop-eol-rails

Conversation

@Fivell

@Fivell Fivell commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

Why

Rails 7.2 reached end of life on 2026-08-09 (endoflife.date/rails), so a third of the CI matrix was spent proving the gem works against an unsupported Rails. This drops those legs.

Heads-up for the next pass: Rails 8.0 goes EOL on 2026-11-07, about five weeks out. It is kept here because it is still supported today, but it is the next thing to remove.

Matrix

Before — 3 ruby x 3 rails x 4 activeadmin = 36 legs:

dimension values
ruby 3.3, 3.4, 4.0
rails ~> 7.2.0, ~> 8.0.0, ~> 8.1.0
activeadmin ~> 3.2, ~> 3.3, ~> 3.4, ~> 3.5

After — 3 ruby x 2 rails x 4 activeadmin = 24 legs:

dimension values
ruby 3.3, 3.4, 4.0 (unchanged)
rails ~> 8.0.0, ~> 8.1.0
activeadmin ~> 3.2, ~> 3.3, ~> 3.4, ~> 3.5 (unchanged)

Ruby stays as it was: 3.3 is EOL 2027-03-31 (security-only) and is the floor, matching the gemspec's required_ruby_version >= 3.3.0. The three-segment Rails pins are kept deliberately — a two-segment ~> 8.0 means >= 8.0, < 9.0 and would silently resolve to 8.1, so the "Rails 8.0" leg would not be testing Rails 8.0.

No exclude: rules were added. In particular Ruby 3.3 x Rails 8.1 is a good cell and stays: the anonymous-parameter-forwarding SyntaxError that looks like a Ruby 3.3 problem exists only in 3.3.0, the first 3.3 patch, and ruby/setup-ruby with ruby-version: '3.3' installs the newest patch. Verified below on 3.3.12.

No ActiveAdmin version was dropped

Every ActiveAdmin minor still in the matrix resolves against both remaining Rails versions. bundle install on Ruby 3.4.10, with the AA requirement pinned three-segment so the resolver cannot skip forward to 3.5:

Rails ~> 8.0.0 Rails ~> 8.1.0
activeadmin ~> 3.2.0 3.2.5 + rails 8.0.5.1 3.2.5 + rails 8.1.4
activeadmin ~> 3.3.0 3.3.0 + rails 8.0.5.1 3.3.0 + rails 8.1.4
activeadmin ~> 3.4.0 3.4.0 + rails 8.0.5.1 3.4.0 + rails 8.1.4
activeadmin ~> 3.5.0 3.5.2 + rails 8.0.5.1 3.5.2 + rails 8.1.4

Eight for eight, no resolver error to quote. The gemspec's activeadmin '>= 3.0', '< 4.0' runtime constraint is untouched — narrowing a tested range is not evidence a consumer broke.

Worth knowing, and left alone here: the matrix's own AA pins are two-segment, so ~> 3.2, ~> 3.3 and ~> 3.4 all resolve to activeadmin 3.5.2 today. All four AA legs are therefore testing the same ActiveAdmin. That is pre-existing and orthogonal to dropping Rails 7.2, so it is not changed in this PR, but tightening those to ~> 3.2.0 / ~> 3.3.0 / ~> 3.4.0 would make the dimension mean what it says. The table above is the evidence that doing so would be green.

Coverage badge gating

The badge steps are gated on matrix.ruby == '4.0' && matrix.rails == '~> 8.1.0' && matrix.activeadmin == '~> 3.5'. All three values survive the change, so the conjunction still selects exactly one of the 24 legs — one coverage-badge artifact, which is what deploy-coverage downloads by name.

Local verification

Run with CI=true (the harness needs it) via rbenv. Every run is the full suite against a real headless Chrome.

CI=true RBENV_VERSION=3.4.10 RAILS_VERSION='~> 8.1.0' ACTIVE_ADMIN_VERSION='~> 3.5' rbenv exec bundle install
Bundle complete! 11 Gemfile dependencies, 106 gems now installed.
  * activeadmin (3.5.2)   * rails (8.1.4)   * simplecov (1.3.2)

CI=true RBENV_VERSION=3.4.10 RAILS_VERSION='~> 8.1.0' ACTIVE_ADMIN_VERSION='~> 3.5' rbenv exec bundle exec rspec spec
Finished in 14.27 seconds (files took 1.1 seconds to load)
21 examples, 0 failures
Line coverage: 318 / 430 (73.95%)
ruby rails activeadmin resolved result
3.4.10 ~> 8.1.0 ~> 3.5 aa 3.5.2 / rails 8.1.4 21 examples, 0 failures
3.3.12 ~> 8.1.0 ~> 3.5 aa 3.5.2 / rails 8.1.4 21 examples, 0 failures
4.0.6 ~> 8.1.0 ~> 3.5 aa 3.5.2 / rails 8.1.4 21 examples, 0 failures
3.4.10 ~> 8.1.0 ~> 3.2.0 aa 3.2.5 / rails 8.1.4 21 examples, 0 failures
3.4.10 ~> 8.0.0 ~> 3.2.0 aa 3.2.5 / rails 8.0.5.1 21 examples, 0 failures
3.4.10 ~> 8.0.0 ~> 3.5 aa 3.5.2 / rails 8.0.5.1 21 examples, 0 failures

Seven full-suite runs, 0 failures, and no Ferrum::ProcessTimeoutError in any of them — the documented flake did not reproduce locally this time, consistent with the note in spec/rails_helper.rb.

Neither documented dummy-app trap applied: this repo hand-writes spec/dummy/test_application.rb rather than running rails new, so there is no generated ApplicationController for Rails 8.1's stale_when_importmap_changes to land in and no --skip-javascript fix was needed.

Also in here

  • Gemfile: the RAILS_VERSION fallback was '~> 7.1.0' — EOL since 2025-10-01 and not even a matrix value, so a bare local bundle install pulled an unsupported Rails. Now '~> 8.0.0', matching the matrix floor. CI always sets RAILS_VERSION, so this changes nothing in CI.
  • CHANGELOG.md: one line under ## [Unreleased].

Not touched: the gemspec (required_ruby_version is already >= 3.3.0, the activeadmin constraint stays wide), the gem version, and the README — it carries no supported-versions table to correct.

Fivell added 2 commits October 1, 2026 13:48
Rails 7.2 reached end of life on 2026-08-09 (endoflife.date/rails), so
the three Rails 7.2 legs were testing an unsupported release. The matrix
keeps Rails 8.0 (EOL 2026-11-07) and 8.1 (EOL 2027-10-10).

All four activeadmin entries are kept: 3.2.5, 3.3.0, 3.4.0 and 3.5.2 all
resolve against both Rails 8.0.5.1 and 8.1.4 and pass the suite, so
nothing had to be excluded.

The Gemfile's RAILS_VERSION fallback pointed at '~> 7.1.0', which is EOL
too and is what a plain `bundle install` picked up locally; it now
matches the matrix floor. CI always sets RAILS_VERSION, so this only
affects local runs.

The coverage-badge steps stay gated on the single
ruby 4.0 / Rails '~> 8.1.0' / AA '~> 3.5' leg, which is still present.
@Fivell
Fivell merged commit 53bd963 into master Oct 1, 2026
25 checks passed
@Fivell
Fivell deleted the chore/drop-eol-rails branch October 1, 2026 12:28
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.

1 participant