From 0d2fe0bf6206850de5e8de850f38afd44ab82a68 Mon Sep 17 00:00:00 2001 From: Carl Dawson Date: Sat, 18 Apr 2026 19:59:10 +0100 Subject: [PATCH 1/3] Adds matrix test workflow --- .github/workflows/test.yml | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3cfb6a3..6925c62 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,9 +10,30 @@ jobs: test: runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + rails-version: ["7.1", "7.2", "8.0", "8.1"] + ruby-version: ["4.0"] + postgres-version: ["16"] + include: + # Edge Rails + - rails-version: edge + ruby-version: "4.0" + postgres-version: "16" + allow-failure: true + # Oldest supported combo + - rails-version: "7.1" + ruby-version: "3.1" + postgres-version: "14" + # Latest everything + - rails-version: "8.1" + ruby-version: "4.0" + postgres-version: "18" + services: postgres: - image: postgres:16 + image: postgres:${{ matrix.postgres-version }} env: POSTGRES_PASSWORD: postgres ports: @@ -27,13 +48,17 @@ jobs: PGHOST: localhost PGUSER: postgres PGPASSWORD: postgres + RAILS_VERSION: ${{ matrix.rails-version }} steps: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: "3.3" - bundler-cache: true + ruby-version: ${{ matrix.ruby-version }} + + - run: rm -f Gemfile.lock && bundle install - run: bundle exec rake test + + continue-on-error: ${{ matrix.allow-failure || false }} From fadde9a9ed84ed46c28a5e544a24fdbdd7c51e9e Mon Sep 17 00:00:00 2001 From: Carl Dawson Date: Sat, 18 Apr 2026 20:25:04 +0100 Subject: [PATCH 2/3] Fixes for test matrix --- .github/workflows/test.yml | 4 ++-- Gemfile | 9 +++++++++ Gemfile.lock | 4 ++-- activerecord-postgresql-branched.gemspec | 4 ++-- .../connection_adapters/postgresql/branched/adapter.rb | 2 +- test/ddl_coverage_test.rb | 6 +++++- 6 files changed, 21 insertions(+), 8 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6925c62..6eeee8a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - rails-version: ["7.1", "7.2", "8.0", "8.1"] + rails-version: ["7.2", "8.0", "8.1"] ruby-version: ["4.0"] postgres-version: ["16"] include: @@ -23,7 +23,7 @@ jobs: postgres-version: "16" allow-failure: true # Oldest supported combo - - rails-version: "7.1" + - rails-version: "7.2" ruby-version: "3.1" postgres-version: "14" # Latest everything diff --git a/Gemfile b/Gemfile index 129db8b..891e121 100644 --- a/Gemfile +++ b/Gemfile @@ -2,5 +2,14 @@ source "https://rubygems.org" gemspec +rails_version = ENV["RAILS_VERSION"] +if rails_version == "edge" + gem "activerecord", github: "rails/rails" + gem "railties", github: "rails/rails" +elsif rails_version + gem "activerecord", "~> #{rails_version}.0" + gem "railties", "~> #{rails_version}.0" +end + gem "rake" gem "minitest" diff --git a/Gemfile.lock b/Gemfile.lock index e8c7fe2..a490f48 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,9 +2,9 @@ PATH remote: . specs: activerecord-postgresql-branched (0.4.1) - activerecord (>= 7.1) + activerecord (>= 7.2) pg - railties (>= 7.1) + railties (>= 7.2) GEM remote: https://rubygems.org/ diff --git a/activerecord-postgresql-branched.gemspec b/activerecord-postgresql-branched.gemspec index 545439c..c3f751d 100644 --- a/activerecord-postgresql-branched.gemspec +++ b/activerecord-postgresql-branched.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |spec| spec.files = Dir["lib/**/*", "LICENSE", "README.md", "CHANGELOG.md"] spec.require_paths = ["lib"] - spec.add_dependency "activerecord", ">= 7.1" - spec.add_dependency "railties", ">= 7.1" + spec.add_dependency "activerecord", ">= 7.2" + spec.add_dependency "railties", ">= 7.2" spec.add_dependency "pg" end diff --git a/lib/active_record/connection_adapters/postgresql/branched/adapter.rb b/lib/active_record/connection_adapters/postgresql/branched/adapter.rb index 40ce2b6..c135e57 100644 --- a/lib/active_record/connection_adapters/postgresql/branched/adapter.rb +++ b/lib/active_record/connection_adapters/postgresql/branched/adapter.rb @@ -26,7 +26,7 @@ class Adapter < ActiveRecord::ConnectionAdapters::PostgreSQLAdapter SHADOW_SKIP = %i[create_join_table drop_join_table].freeze # Methods with custom shadow handling outside the generic loop. - SHADOW_HANDLED = %i[rename_table].freeze + SHADOW_HANDLED = %i[rename_table drop_table create_table].freeze # Everything else with a table param gets the generic wrapper. # Shadow#call is idempotent — if the table doesn't exist in diff --git a/test/ddl_coverage_test.rb b/test/ddl_coverage_test.rb index 6c61701..f809839 100644 --- a/test/ddl_coverage_test.rb +++ b/test/ddl_coverage_test.rb @@ -302,6 +302,8 @@ def test_remove_unique_constraint # --- Generic constraint DDL --- def test_validate_constraint + skip "Added in Rails 8.1" unless ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.method_defined?(:validate_constraint) + conn = connect(branch: "main") conn.add_check_constraint :orders, "amount > 0", name: "orders_amount_positive", validate: false @@ -313,6 +315,8 @@ def test_validate_constraint end def test_remove_constraint + skip "Added in Rails 8.1" unless ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.method_defined?(:remove_constraint) + conn = connect(branch: "main") conn.add_check_constraint :orders, "amount > 0", name: "orders_amount_positive" @@ -544,7 +548,7 @@ def test_rename_enum conn.create_enum :status, %w[draft published] conn = reconnect(branch: "feature/ren-enum") - conn.rename_enum :status, :article_status + conn.rename_enum :status, to: :article_status assert enum_exists_in_schema?(conn, "branch_feature_ren_enum", "article_status") assert enum_exists_in_schema?(conn, "public", "status"), From 4c6cf852b2610442b9cf5e852b331db4660f1ae4 Mon Sep 17 00:00:00 2001 From: Carl Dawson Date: Sat, 18 Apr 2026 20:32:03 +0100 Subject: [PATCH 3/3] Adds skipped shadow for new method in Rails edge --- test/ddl_coverage_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ddl_coverage_test.rb b/test/ddl_coverage_test.rb index f809839..1224e54 100644 --- a/test/ddl_coverage_test.rb +++ b/test/ddl_coverage_test.rb @@ -604,7 +604,7 @@ def test_rename_enum_value index_exists? index_name index_name_exists? indexes inherited_table_names pk_and_sequence_for primary_key primary_keys - reset_pk_sequence! serial_sequence set_pk_sequence! + reset_column_sequences! reset_pk_sequence! serial_sequence set_pk_sequence! table_alias_for table_comment table_exists? table_options table_partition_definition unique_constraint_options unique_constraints update_table_definition