39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Gitlab
|
||
|
module BackgroundMigration
|
||
|
# Class that will insert record into project_pages_metadata
|
||
|
# for each existing project
|
||
|
class MigratePagesMetadata
|
||
|
def perform(start_id, stop_id)
|
||
|
perform_on_relation(Project.where(id: start_id..stop_id))
|
||
|
end
|
||
|
|
||
|
def perform_on_relation(relation)
|
||
|
successful_pages_deploy = <<~SQL
|
||
|
SELECT TRUE
|
||
|
FROM ci_builds
|
||
|
WHERE ci_builds.type = 'GenericCommitStatus'
|
||
|
AND ci_builds.status = 'success'
|
||
|
AND ci_builds.stage = 'deploy'
|
||
|
AND ci_builds.name = 'pages:deploy'
|
||
|
AND ci_builds.project_id = projects.id
|
||
|
LIMIT 1
|
||
|
SQL
|
||
|
|
||
|
select_from = relation
|
||
|
.select("projects.id", "COALESCE((#{successful_pages_deploy}), FALSE)")
|
||
|
.to_sql
|
||
|
|
||
|
ActiveRecord::Base.connection_pool.with_connection do |connection|
|
||
|
connection.execute <<~SQL
|
||
|
INSERT INTO project_pages_metadata (project_id, deployed)
|
||
|
#{select_from}
|
||
|
ON CONFLICT (project_id) DO NOTHING
|
||
|
SQL
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|