From 481e8a8055087772515c695b287702a3e3893f62 Mon Sep 17 00:00:00 2001 From: Elia Schito Date: Wed, 5 Apr 2023 13:38:19 +0200 Subject: [PATCH 1/2] Rewrite the migrations updater --- bin/update-migrations | 66 +++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/bin/update-migrations b/bin/update-migrations index adf98827..638f1bc2 100755 --- a/bin/update-migrations +++ b/bin/update-migrations @@ -1,46 +1,56 @@ #!/usr/bin/env ruby -app = ARGV.first || abort("Please provide the APP_NAME as the first argument") +app = ARGV.shift || abort("Please provide the APP_NAME as the first argument") extension_name = "solidus_stripe" -current_migrations = {} -Dir['db/migrate/*.rb'].sort.reverse_each do |path| +source_migrations = {} +Dir['db/migrate/*.rb'].sort.each do |path| basename = File.basename(path, ".rb").sub(/^\d+_/, '') - current_migrations[basename] = path + source_migrations[basename] = path end -Dir["#{app}/db/migrate/*.#{extension_name}.rb"].sort.reverse_each do |path| - timestamp, basename = File.basename(path, ".#{extension_name}.rb").split('_', 2) - contents = File.read(path) +app_migrations = {} +Dir["#{app}/db/migrate/*.#{extension_name}.rb"].sort.each do |path| + _timestamp, basename = File.basename(path, ".#{extension_name}.rb").split('_', 2) + app_migrations[basename] = path +end - if current_migrations[basename] - if contents != File.read(current_migrations[basename]) - puts "rolling back #{basename}..." - Dir.chdir(app) { system("bin/rails db:migrate:down VERSION=#{timestamp}") } - puts "updating #{basename}..." - File.write(path, File.read(current_migrations[basename])) - else - puts "ignoring #{basename}..." - end - current_migrations.delete(basename) - else - puts "rolling back #{basename}..." - Dir.chdir(app) { system("bin/rails db:migrate:down VERSION=#{timestamp}") } - puts "removing #{basename}..." - File.unlink path - end +migrate_app = -> do + puts "migrating #{app}..." + Dir.chdir(app) { system("bin/rails db:migrate RAILS_ENV=test") } end -# Install missing migrations base_time = Time.now.utc.to_i -current_migrations.reverse_each.with_index do |(basename, path), index| +install_migration = ->(basename) do + path = source_migrations[basename] + base_time += 1 puts "installing #{basename}..." - timestamp = Time.at(base_time + index).strftime("%F%T").delete('-:') # rubocop:disable Rails/TimeZone + timestamp = Time.at(base_time).strftime("%F%T").delete('-:') # rubocop:disable Rails/TimeZone contents = File.read(path) File.write("#{app}/db/migrate/#{timestamp}_#{basename}.#{extension_name}.rb", contents) end -if current_migrations.any? - Dir.chdir(app) { system("bin/rails db:migrate") } +reinstall_migrations = -> do + app_migrations.each_value { |path| File.delete(path) } + Dir["#{app}/db/*{.sqlite3,schema.rb}"].each { File.delete(_1) } + source_migrations.each_key(&install_migration) + migrate_app.call +end + +exit reinstall_migrations.call if ARGV.shift == "--force" + +app_migrations.each_key do |basename| + source_content = File.read(source_migrations[basename]) if source_migrations[basename] + app_content = File.read(app_migrations[basename]) + + next if source_content == app_content + + reinstall_migrations.call + exit +end + +if (missing_migrations = source_migrations.keys - app_migrations.keys).any? + missing_migrations.each(&install_migration) + migrate_app.call end From 7cfff91b2f451f10f1463ad8f2437eb2d115ed01 Mon Sep 17 00:00:00 2001 From: Elia Schito Date: Wed, 5 Apr 2023 13:39:14 +0200 Subject: [PATCH 2/2] Don't try to load seeds before running specs We don't even need the development db on the dummy-app. --- bin/rspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/rspec b/bin/rspec index 175c3fb7..0d1752cc 100755 --- a/bin/rspec +++ b/bin/rspec @@ -1,6 +1,6 @@ #!/usr/bin/env ruby system( - "bin/rails dummy-app generate solidus_stripe:install --force --migrate --specs=all --sync", + "bin/rails dummy-app generate solidus_stripe:install --force --migrate --specs=all --sync --no-load-seeds", out: "tmp/rspec-sync.log", err: :out, ) or abort(File.read("tmp/rspec-sync.log"))