From 326d0ca85b4ccc7c92d430ab8f7679102eac0264 Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Thu, 1 Oct 2026 13:30:18 +0200 Subject: [PATCH 1/2] ci: drop EOL Ruby and Rails from the matrix Ruby 3.2 reached EOL 2026-03-31; Rails 7.1 on 2025-10-01 and Rails 7.2 on 2026-08-09 (endoflife.date). The matrix is now a plain product of Ruby 3.3/3.4/4.0 against Rails 8.0.0/8.1.0, with no version excludes. All four ActiveAdmin entries are kept, and the stale `rails: 8.0.0 / activeadmin: 3.2.0` exclude is deleted. Its premise no longer holds: the Gemfile pins `~> #{ENV['AA']}`, so the '3.2.0' leg resolves to activeadmin 3.2.5, which does support Rails 8. Every AA x Rails 8.x pair was checked with a real bundle install plus the full suite and all eight are green, so the rule was only hiding a working cell. The dummy-app generator needed --skip-javascript. rails_template.rb discards the generated app's Gemfile and boots the app under this gem's sprockets bundle, so importmap-rails is never present, while Rails 8.1's `rails new` emits `stale_when_importmap_changes` in ApplicationController. Without the flag every Rails 8.1 leg fails to boot with: app/controllers/application_controller.rb:6:in '': undefined local variable or method 'stale_when_importmap_changes' (NameError) The coverage badge and Pages deploy now gate on the newest cell in the new matrix, Ruby 4.0 / Rails 8.1.0 / AA 3.5.0, which matches exactly one of the 24 legs. --- .github/workflows/ci.yml | 11 ++++------- tasks/test.rake | 6 ++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95633f4..302e582 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,12 +16,9 @@ jobs: strategy: fail-fast: false matrix: - ruby: ['3.2', '3.3', '3.4'] - rails: ['7.1.0', '7.2.0', '8.0.0'] + ruby: ['3.3', '3.4', '4.0'] + rails: ['8.0.0', '8.1.0'] activeadmin: ['3.2.0', '3.3.0', '3.4.0', '3.5.0'] - exclude: - - rails: '8.0.0' - activeadmin: '3.2.0' env: RAILS: ${{ matrix.rails }} AA: ${{ matrix.activeadmin }} @@ -35,7 +32,7 @@ jobs: run: bundle exec rspec spec - name: Generate badge.json - if: matrix.ruby == '3.4' && matrix.rails == '8.0.0' && matrix.activeadmin == '3.5.0' + if: matrix.ruby == '4.0' && matrix.rails == '8.1.0' && matrix.activeadmin == '3.5.0' run: | LAST_RUN="coverage/.last_run.json" if [ ! -f "$LAST_RUN" ]; then @@ -53,7 +50,7 @@ jobs: echo "{\"schemaVersion\":1,\"label\":\"coverage\",\"message\":\"${PERCENT}%\",\"color\":\"${COLOR}\"}" > badge/badge.json - name: Upload badge artifact - if: matrix.ruby == '3.4' && matrix.rails == '8.0.0' && matrix.activeadmin == '3.5.0' + if: matrix.ruby == '4.0' && matrix.rails == '8.1.0' && matrix.activeadmin == '3.5.0' uses: actions/upload-artifact@v4 with: name: coverage-badge diff --git a/tasks/test.rake b/tasks/test.rake index f46bf45..e72bb7f 100644 --- a/tasks/test.rake +++ b/tasks/test.rake @@ -2,10 +2,16 @@ desc "Creates a test rails app for the specs to run against" task :setup do require 'rails/version' + # --skip-javascript: the dummy app's own Gemfile is discarded (see + # rails_template.rb) and the app boots under this gem's sprockets bundle, so + # importmap-rails is never available. Rails 8.1 otherwise generates + # `stale_when_importmap_changes` in ApplicationController and the app fails + # to boot with a NameError. rails_new_opts = %w( --skip-turbolinks --skip-spring --skip-bootsnap + --skip-javascript -m spec/support/rails_template.rb ) From 4cd6020e57bd7d756de3f669942fdc1bf195b69c Mon Sep 17 00:00:00 2001 From: Igor Fedoronchuk Date: Thu, 1 Oct 2026 13:30:18 +0200 Subject: [PATCH 2/2] chore: raise the gemspec Ruby floor to 3.3 Ruby 3.1 and 3.2 are both EOL and no longer in CI, so `>= 3.1.0` advertised support for versions nothing tests. The activeadmin dependency stays at `>= 3.0, < 4.0`: no ActiveAdmin version was dropped from the matrix, and narrowing a runtime floor would be a breaking change for consumers regardless. --- active_admin_sidebar.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/active_admin_sidebar.gemspec b/active_admin_sidebar.gemspec index 3ea52d9..0fee26b 100644 --- a/active_admin_sidebar.gemspec +++ b/active_admin_sidebar.gemspec @@ -11,7 +11,7 @@ Gem::Specification.new do |s| s.description = %q{extension for activeadmin gem to manage sidebar} s.license = "MIT" - s.required_ruby_version = '>= 3.1.0' + s.required_ruby_version = '>= 3.3' # Whitelist, not a reject list: a new directory in the repo does not # reach consumers until it is named here. The reject form needs a new