From 29ebbbead907ab56ef8cf21890db40fae0f02d47 Mon Sep 17 00:00:00 2001 From: Dean Welch Date: Mon, 13 Apr 2026 17:29:25 +0100 Subject: [PATCH 1/5] Upgrade gem to be rails 8.0 compatible --- .github/workflows/verify.yml | 9 ++++----- metasploit-erd.gemspec | 6 +++--- .../contexts/active_record_base_descendants_cleaner.rb | 4 ++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 2343444..1c9c077 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -17,10 +17,9 @@ jobs: fail-fast: true matrix: ruby: - - '2.7' - - '3.0' - - '3.1' - '3.2' + - '3.3' + - '3.4' os: - ubuntu-20.04 - ubuntu-latest @@ -37,7 +36,7 @@ jobs: run: sudo apt-get install graphviz - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Setup Ruby uses: ruby/setup-ruby@v1 @@ -51,7 +50,7 @@ jobs: bundle exec rake yard - name: Upload coverage report - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: coverage-${{ matrix.ruby }} path: | diff --git a/metasploit-erd.gemspec b/metasploit-erd.gemspec index 3a219df..038ec57 100644 --- a/metasploit-erd.gemspec +++ b/metasploit-erd.gemspec @@ -19,13 +19,13 @@ Gem::Specification.new do |spec| spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) spec.require_paths = ['lib'] - spec.required_ruby_version = '>= 2.7.0' + spec.required_ruby_version = '>= 3.2.0' spec.add_development_dependency 'metasploit-yard' spec.add_development_dependency 'rake' spec.add_development_dependency 'rspec' - spec.add_runtime_dependency 'activerecord', '~> 7.0' - spec.add_runtime_dependency 'activesupport', '~> 7.0' + spec.add_runtime_dependency 'activerecord', '>= 7.0', '< 8.1' + spec.add_runtime_dependency 'activesupport', '>= 7.0', '< 8.1' spec.add_runtime_dependency 'rails-erd' end diff --git a/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb b/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb index 2a8ac0f..3847b37 100644 --- a/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb +++ b/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb @@ -5,8 +5,8 @@ after(:example) do if ActiveRecord.version >= Gem::Version.new("7.0.0") - subclasses = ActiveSupport::DescendantsTracker.subclasses(ActiveRecord::Base) - ActiveSupport::DescendantsTracker.clear(subclasses) + excluded = ActiveSupport::DescendantsTracker.instance_variable_get(:@excluded_descendants) + ActiveRecord::Base.descendants.each { |klass| excluded << klass } else cv = ActiveSupport::DescendantsTracker.class_variable_get(:@@direct_descendants) cv.delete(ActiveRecord::Base) From 91ca412fcb1ae33d54902124a4a3c58c3b0ccdbb Mon Sep 17 00:00:00 2001 From: Dean Welch Date: Tue, 14 Apr 2026 10:45:25 +0100 Subject: [PATCH 2/5] Update CI to use shared config --- .github/workflows/verify.yml | 71 ++++++++++++------------------------ 1 file changed, 24 insertions(+), 47 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 1c9c077..68d1b45 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -1,5 +1,21 @@ name: Verify +# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions +permissions: + actions: none + checks: none + contents: none + deployments: none + id-token: none + issues: none + discussions: none + packages: none + pages: none + pull-requests: none + repository-projects: none + security-events: none + statuses: none + on: push: branches: @@ -9,50 +25,11 @@ on: - '*' jobs: - test: - runs-on: ${{ matrix.os }} - timeout-minutes: 40 - - strategy: - fail-fast: true - matrix: - ruby: - - '3.2' - - '3.3' - - '3.4' - os: - - ubuntu-20.04 - - ubuntu-latest - exclude: - - { os: ubuntu-latest, ruby: '2.7' } - - { os: ubuntu-latest, ruby: '3.0' } - - env: - RAILS_ENV: test - - name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }} - steps: - - name: Install system dependencies - run: sudo apt-get install graphviz - - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - bundler-cache: true - - - name: Test - run: | - bundle exec rake spec - bundle exec rake yard - - - name: Upload coverage report - uses: actions/upload-artifact@v4 - with: - name: coverage-${{ matrix.ruby }} - path: | - coverage/ - retention-days: 1 + build: + uses: dwelch-r7/metasploit-framework/.github/workflows/shared_gem_verify_rails.yml@rails-8-gem-ci-test + with: + additional_rails_versions: '["~> 8.0.0"]' + dependencies: '["libpcap-dev", "graphviz"]' + test_commands: | + bundle exec rake spec + bundle exec rake yard From 8e05a0bc207ffb99ca2325e59675bfbfcf6c53bc Mon Sep 17 00:00:00 2001 From: Dean Welch Date: Tue, 14 Apr 2026 10:51:34 +0100 Subject: [PATCH 3/5] Fix test cleanup for different rails versions --- Gemfile | 2 +- .../contexts/active_record_base_descendants_cleaner.rb | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Gemfile b/Gemfile index 1136bb2..50128a5 100644 --- a/Gemfile +++ b/Gemfile @@ -15,5 +15,5 @@ group :test do # code coverage of tests gem 'simplecov', :require => false # in-memory database for ActiveRecord association traversal - gem 'sqlite3' + gem 'sqlite3', '~> 1.4' end diff --git a/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb b/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb index 3847b37..c73f362 100644 --- a/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb +++ b/spec/support/shared/contexts/active_record_base_descendants_cleaner.rb @@ -4,9 +4,12 @@ end after(:example) do - if ActiveRecord.version >= Gem::Version.new("7.0.0") + if ActiveRecord.version >= Gem::Version.new("8.0.0") excluded = ActiveSupport::DescendantsTracker.instance_variable_get(:@excluded_descendants) ActiveRecord::Base.descendants.each { |klass| excluded << klass } + elsif ActiveRecord.version >= Gem::Version.new("7.0.0") + subclasses = ActiveSupport::DescendantsTracker.subclasses(ActiveRecord::Base) + ActiveSupport::DescendantsTracker.clear(subclasses) else cv = ActiveSupport::DescendantsTracker.class_variable_get(:@@direct_descendants) cv.delete(ActiveRecord::Base) From 68cd1436394a56ff4d9f684dcb4f155600ca0cb3 Mon Sep 17 00:00:00 2001 From: Dean Welch Date: Tue, 14 Apr 2026 11:13:01 +0100 Subject: [PATCH 4/5] conditionally use different sqlite versions depending on rails version --- Gemfile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Gemfile b/Gemfile index 50128a5..e158969 100644 --- a/Gemfile +++ b/Gemfile @@ -15,5 +15,11 @@ group :test do # code coverage of tests gem 'simplecov', :require => false # in-memory database for ActiveRecord association traversal - gem 'sqlite3', '~> 1.4' + rails_version = ENV['RAILS_VERSION'].to_s[/\d+(?:\.\d+){0,2}/] + sqlite3_requirements = if rails_version && rails_version.split('.').first.to_i < 8 + ['~> 1.4'] + else + ['>= 2.1', '< 3.0'] + end + gem 'sqlite3', *sqlite3_requirements end From b28a78be3b6c0956c857e0827a0e47d21336fb94 Mon Sep 17 00:00:00 2001 From: Dean Welch Date: Tue, 14 Apr 2026 11:20:34 +0100 Subject: [PATCH 5/5] use the framework shared verify workflow --- .github/workflows/verify.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 68d1b45..27f0e77 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -26,9 +26,8 @@ on: jobs: build: - uses: dwelch-r7/metasploit-framework/.github/workflows/shared_gem_verify_rails.yml@rails-8-gem-ci-test + uses: rapid7/metasploit-framework/.github/workflows/shared_gem_verify_rails.yml@master with: - additional_rails_versions: '["~> 8.0.0"]' dependencies: '["libpcap-dev", "graphviz"]' test_commands: | bundle exec rake spec