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
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/tasks/ci/migrate.rake40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/tasks/ci/migrate.rake b/lib/tasks/ci/migrate.rake
new file mode 100644
index 00000000000..c00b17f7a2d
--- /dev/null
+++ b/lib/tasks/ci/migrate.rake
@@ -0,0 +1,40 @@
+namespace :ci do
+ namespace :migrate do
+ def list_objects(type)
+ ids = ActiveRecord::Base.connection.select_all(
+ 'select distinct taggable_id from ci_taggings where taggable_type = $1',
+ nil, [[nil, type]]
+ )
+ ids.map { |id| id['taggable_id'] }
+ end
+
+ def list_tags(type, id)
+ tags = ActiveRecord::Base.connection.select_all(
+ 'select ci_tags.name from ci_tags ' +
+ 'join ci_taggings on ci_tags.id = ci_taggings.tag_id ' +
+ 'where taggable_type = $1 and taggable_id = $2 and context = $3',
+ nil, [[nil, type], [nil, id], [nil, 'tags']]
+ )
+ tags.map { |tag| tag['name'] }
+ end
+
+ desc 'GITLAB | Migrate CI tags'
+ task tags: :environment do
+ list_objects('Runner').each do |id|
+ runner = Ci::Runner.find_by_id(id)
+ if runner
+ tags = list_tags('Runner', id)
+ runner.update_attributes(tag_list: tags)
+ end
+ end
+
+ list_objects('Build').each do |id|
+ build = Ci::Build.find_by_id(id)
+ if build
+ tags = list_tags('Build', id)
+ build.update_attributes(tag_list: tags)
+ end
+ end
+ end
+ end
+end