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

migrate_pages_metadata.rb « background_migration « gitlab « lib - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 68fd0c17d294b1ed0b770675f5c7b0d54f5897ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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