Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/api/admin/migrations.rb')
-rw-r--r--lib/api/admin/migrations.rb62
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/api/admin/migrations.rb b/lib/api/admin/migrations.rb
new file mode 100644
index 00000000000..d4dbdbbb021
--- /dev/null
+++ b/lib/api/admin/migrations.rb
@@ -0,0 +1,62 @@
+# frozen_string_literal: true
+
+module API
+ module Admin
+ class Migrations < ::API::Base
+ feature_category :database
+ urgency :low
+
+ before do
+ authenticated_as_admin!
+ end
+
+ namespace 'admin' do
+ resources 'migrations/:timestamp/mark' do
+ desc 'Mark the migration as successfully executed' do
+ success [
+ { code: 201, message: '201 Created' }
+ ]
+ failure [
+ { code: 401, message: '401 Unauthorized' },
+ { code: 403, message: '403 Forbidden' },
+ { code: 404, message: '404 Not found' },
+ { code: 422, message: 'You can mark only pending migrations' }
+ ]
+ tags %w[migrations]
+ end
+ params do
+ optional :database,
+ type: String,
+ values: Gitlab::Database.all_database_names,
+ desc: 'The name of the database',
+ default: 'main'
+ requires :timestamp,
+ type: Integer,
+ desc: 'The migration version timestamp'
+ end
+ post do
+ response = Database::MarkMigrationService.new(
+ connection: base_model.connection,
+ version: params[:timestamp]
+ ).execute
+
+ if response.success?
+ created!
+ elsif response.reason == :not_found
+ not_found!
+ else
+ render_api_error!('You can mark only pending migrations', 422)
+ end
+ end
+ end
+ end
+
+ helpers do
+ def base_model
+ database = params[:database] || Gitlab::Database::MAIN_DATABASE_NAME
+ @base_model ||= Gitlab::Database.database_base_models[database]
+ end
+ end
+ end
+ end
+end