lib/gdk/diagnostic/pending_migrations.rb (37 lines of code) (raw):
# frozen_string_literal: true
module GDK
module Diagnostic
class PendingMigrations < Base
TITLE = 'Database Migrations'
def success?
applied_migration_versions.all? do |versions|
(existing_migration_versions - versions).empty?
end
end
def detail
return if success?
<<~MESSAGE
There are pending database migrations. To update your database, run:
(gdk start db && cd #{config.gitlab.dir} && #{config.gdk_root}/support/bundle-exec rails db:migrate)
MESSAGE
end
private
def existing_migration_versions
@existing_migration_versions ||= Dir["#{config.gitlab.dir}/db/schema_migrations/*"].map { |path| File.basename(path) }
end
def applied_migration_versions
suffixes = config.gitlab.rails.databases.attributes.keys.filter_map do |key|
db = config.gitlab.rails.databases[key]
"_#{key}" if db.__enabled && !db[:use_main_database]
end
suffixes.push('') # main
@applied_migration_versions ||=
suffixes.map { |suffix| select_versions_for("gitlabhq_development#{suffix}") }
end
def select_versions_for(database)
args = ['--no-align', '--tuples-only', '--command', 'select version from schema_migrations']
command = *GDK::Postgresql.new.psql_cmd(args, database: database)
GDK::Shellout.new(command).execute(display_output: false).read_stdout.split("\n")
end
end
end
end