Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,29 @@ on:
jobs:
build:
runs-on: ubuntu-latest
name: Ruby ${{ matrix.ruby }}
name: Ruby ${{ matrix.ruby }} / Rails ${{ matrix.rails }}
strategy:
fail-fast: false
matrix:
ruby:
- '3.2.2'
- '3.3.6'
- '3.4.7'
rails:
- '~> 8.0.0'
- '~> 8.1.0'

env:
RAILS_VERSION: ${{ matrix.rails }}

steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
bundler-cache: false
- name: Install gems
run: bundle install
- name: Run the default task
run: bin/rake
2 changes: 1 addition & 1 deletion code0-zero_track.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
Dir['{app,config,db,lib,rubocop}/**/*', 'LICENSE', 'Rakefile', 'README.md']
end

spec.add_dependency 'rails', '>= 8.0.1'
spec.add_dependency 'rails', ENV.fetch('RAILS_VERSION', '>= 8.0.1')
spec.add_dependency 'zeitwerk', '~> 2.7'

spec.add_development_dependency 'rake', '~> 13.0'
Expand Down
1 change: 1 addition & 0 deletions lib/code0/zero_track.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# frozen_string_literal: true

require 'active_support/core_ext/module/delegation'
require 'rails/railtie'

require 'zeitwerk'
Expand Down
22 changes: 22 additions & 0 deletions lib/code0/zero_track/database/schema_migrations/formatter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

module Code0
module ZeroTrack
module Database
module SchemaMigrations
class Formatter
def initialize(connection)
@connection = connection
end

def format(_)
# rubocop:disable Rails/SkipsModelValidations -- not an active record object
Database::SchemaMigrations.touch_all(@connection) unless Rails.env.production?
# rubocop:enable Rails/SkipsModelValidations
nil
end
end
end
end
end
end
15 changes: 10 additions & 5 deletions lib/code0/zero_track/injectors/active_record_schema_migrations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,17 @@ module Code0
module ZeroTrack
module Injectors
class ActiveRecordSchemaMigrations
def self.inject!
# Patch to write version information as empty files under the db/schema_migrations directory
# This is intended to reduce potential for merge conflicts in db/structure.sql
ActiveSupport.on_load(:active_record_postgresqladapter) do
prepend Database::PostgresqlAdapter::DumpSchemaVersionsMixin
def self.inject!(config)
if Rails.gem_version >= Gem::Version.create('8.1')
config.active_record.schema_versions_formatter = Database::SchemaMigrations::Formatter
else
# Patch to write version information as empty files under the db/schema_migrations directory
# This is intended to reduce potential for merge conflicts in db/structure.sql
ActiveSupport.on_load(:active_record_postgresqladapter) do
prepend Database::PostgresqlAdapter::DumpSchemaVersionsMixin
end
end

# Patch to load version information from empty files under the db/schema_migrations directory
ActiveRecord::Tasks::PostgreSQLDatabaseTasks
.prepend Database::PostgresqlDatabaseTasks::LoadSchemaVersionsMixin
Expand Down
2 changes: 1 addition & 1 deletion lib/code0/zero_track/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Railtie < ::Rails::Railtie

config.after_initialize do
Injectors::ActiveRecordTimestamps.inject! if config.zero_track.active_record.timestamps
Injectors::ActiveRecordSchemaMigrations.inject! if config.zero_track.active_record.schema_migrations
Injectors::ActiveRecordSchemaMigrations.inject!(config) if config.zero_track.active_record.schema_migrations
end
end
end
Expand Down