# frozen_string_literal: true
namespace :foreman_ovirt do
namespace :db do desc 'Prevents destructive core oVirt data migration by marking it as complete' task prevent_core_migration: :environment do # The version of the Foreman core migration to skip. version_to_skip = 20250414121956 # rubocop:disable Style/NumericLiterals migration_context = ActiveRecord::Base.connection.migration_context all_migrations = migration_context.migrations.map(&:version) run_migrations = migration_context.get_all_versions # A migration needs to be run if: # - it's not a fresh (empty) database # - the migration exists on disk but is not yet marked as run in the database if migration_context.current_version != 0 && all_migrations.include?(version_to_skip) && !run_migrations.include?(version_to_skip) Rails.logger.info "[foreman_ovirt] Marking core migration #{version_to_skip} as complete to prevent data loss." ActiveRecord::SchemaMigration.create!(version: version_to_skip.to_s) Rails.logger.info '[foreman_ovirt] Core migration successfully skipped.' else Rails.logger.debug "[foreman_ovirt] Core migration #{version_to_skip} already migrated or not found." end end end
end
# Enhance the core db:migrate task to run our prevention task first. Rake::Task.enhance() if Rake::Task.task_defined?('db:migrate')
# Tests namespace :test do
desc 'Test Foreman Ovirt' Rake::TestTask.new(:foreman_ovirt) do |t| test_dir = File.expand_path('../../test', __dir__) t.libs << 'test' t.libs << test_dir t.pattern = "#{test_dir}/**/*_test.rb" t.verbose = true t.warning = false end
end
Rake::Task.enhance ['test:foreman_ovirt'] if Rake::Task.task_defined?(:test)