diff --git a/.rubocop.yml b/.rubocop.yml index 2a2f6102dfefe125352b048027ca2fcad45fe339..8219ce78f03e3ad27676e2be8560627645237547 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -935,6 +935,10 @@ Migration/BackgroundMigrationBaseClass: BackgroundMigration/AvoidSilentRescueExceptions: Enabled: false +Migration/AvoidFinalizeBackgroundMigration: + Include: + - 'db/post_migrate/*.rb' + Style/ClassAndModuleChildren: Enabled: true diff --git a/.rubocop_todo/migration/avoid_finalize_background_migration.yml b/.rubocop_todo/migration/avoid_finalize_background_migration.yml new file mode 100644 index 0000000000000000000000000000000000000000..bde85ce3e488b5986eff8f0c2b14e123e2dbd7c6 --- /dev/null +++ b/.rubocop_todo/migration/avoid_finalize_background_migration.yml @@ -0,0 +1,7 @@ +--- +Migration/AvoidFinalizeBackgroundMigration: + Details: grace period + Exclude: + - 'db/post_migrate/20220502015011_clean_up_fix_merge_request_diff_commit_users.rb' + - 'db/post_migrate/20220525131557_cleanup_backfill_integrations_enable_ssl_verification.rb' + - 'db/post_migrate/20220713133515_cleanup_backfill_draft_statuses_on_merge_requests.rb' diff --git a/rubocop/cop/migration/avoid_finalize_background_migration.rb b/rubocop/cop/migration/avoid_finalize_background_migration.rb new file mode 100644 index 0000000000000000000000000000000000000000..42e6e72a3303ff89959256912c5a9a51a2532762 --- /dev/null +++ b/rubocop/cop/migration/avoid_finalize_background_migration.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require_relative '../../migration_helpers' + +module RuboCop + module Cop + module Migration + class AvoidFinalizeBackgroundMigration < RuboCop::Cop::Base + include MigrationHelpers + + RESTRICT_ON_SEND = [:finalize_background_migration].freeze + + MSG = 'Prefer `ensure_batched_background_migration_is_finished` over ' \ + '`finalize_background_migration` in Batched Background Migrations. ' \ + 'See https://docs.gitlab.com/ee/development/database/batched_background_migrations.html' + + def on_send(node) + add_offense(node) + end + end + end + end +end diff --git a/spec/rubocop/cop/migration/avoid_finalize_background_migration_spec.rb b/spec/rubocop/cop/migration/avoid_finalize_background_migration_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..e4eec39e3ff50c70fb605ce4ae73e73e2941805c --- /dev/null +++ b/spec/rubocop/cop/migration/avoid_finalize_background_migration_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rubocop_spec_helper' +require_relative '../../../../rubocop/cop/migration/avoid_finalize_background_migration' + +RSpec.describe RuboCop::Cop::Migration::AvoidFinalizeBackgroundMigration, feature_category: :database do + context 'when file is under db/post_migration' do + it "flags the use of 'finalize_background_migration' method" do + expect_offense(<<~RUBY) + class FinalizeMyMigration < Gitlab::Database::Migration[2.1] + MIGRATION = 'MyMigration' + + def up + finalize_background_migration(MIGRATION) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #{described_class::MSG} + end + end + RUBY + end + end +end