87 lines
2.5 KiB
Ruby
87 lines
2.5 KiB
Ruby
namespace :ci do
|
|
desc 'GitLab | Import and migrate CI database'
|
|
task migrate: :environment do
|
|
warn_user_is_not_gitlab
|
|
configure_cron_mode
|
|
|
|
unless ENV['force'] == 'yes'
|
|
puts 'This will remove all CI related data and restore it from the provided backup.'
|
|
ask_to_continue
|
|
puts ''
|
|
end
|
|
|
|
# disable CI for time of migration
|
|
enable_ci(false)
|
|
|
|
# unpack archives
|
|
migrate = Ci::Migrate::Manager.new
|
|
migrate.unpack
|
|
|
|
Rake::Task['ci:migrate:db'].invoke
|
|
Rake::Task['ci:migrate:builds'].invoke
|
|
Rake::Task['ci:migrate:tags'].invoke
|
|
Rake::Task['ci:migrate:services'].invoke
|
|
|
|
# enable CI for time of migration
|
|
enable_ci(true)
|
|
|
|
migrate.cleanup
|
|
end
|
|
|
|
namespace :migrate do
|
|
desc 'GitLab | Import CI database'
|
|
task db: :environment do
|
|
configure_cron_mode
|
|
$progress.puts 'Restoring database ... '.blue
|
|
Ci::Migrate::Database.new.restore
|
|
$progress.puts 'done'.green
|
|
end
|
|
|
|
desc 'GitLab | Import CI builds'
|
|
task builds: :environment do
|
|
configure_cron_mode
|
|
$progress.puts 'Restoring builds ... '.blue
|
|
Ci::Migrate::Builds.new.restore
|
|
$progress.puts 'done'.green
|
|
end
|
|
|
|
desc 'GitLab | Migrate CI tags'
|
|
task tags: :environment do
|
|
configure_cron_mode
|
|
$progress.puts 'Migrating tags ... '.blue
|
|
::Ci::Migrate::Tags.new.restore
|
|
$progress.puts 'done'.green
|
|
end
|
|
|
|
desc 'GitLab | Migrate CI auto-increments'
|
|
task autoincrements: :environment do
|
|
c = ActiveRecord::Base.connection
|
|
c.tables.select { |t| t.start_with?('ci_') }.each do |table|
|
|
result = c.select_one("SELECT id FROM #{table} ORDER BY id DESC LIMIT 1")
|
|
if result
|
|
ai_val = result['id'].to_i + 1
|
|
puts "Resetting auto increment ID for #{table} to #{ai_val}"
|
|
if c.adapter_name == 'PostgreSQL'
|
|
c.execute("ALTER SEQUENCE #{table}_id_seq RESTART WITH #{ai_val}")
|
|
else
|
|
c.execute("ALTER TABLE #{table} AUTO_INCREMENT = #{ai_val}")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
desc 'GitLab | Migrate CI services'
|
|
task services: :environment do
|
|
$progress.puts 'Migrating services ... '.blue
|
|
c = ActiveRecord::Base.connection
|
|
c.execute("UPDATE ci_services SET type=CONCAT('Ci::', type) WHERE type NOT LIKE 'Ci::%'")
|
|
$progress.puts 'done'.green
|
|
end
|
|
end
|
|
|
|
def enable_ci(enabled)
|
|
settings = ApplicationSetting.current || ApplicationSetting.create_from_defaults
|
|
settings.ci_enabled = enabled
|
|
settings.save!
|
|
end
|
|
end
|