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