40 lines
1.5 KiB
Ruby
40 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AddIncidentSettingsToAllExistingProjects < ActiveRecord::Migration[6.0]
|
|
DOWNTIME = false
|
|
|
|
def up
|
|
# Add records to projects project_incident_management_settings
|
|
# to preserve behavior for existing projects that
|
|
# are using the create issue functionality with the default setting of true
|
|
query = <<-SQL
|
|
WITH project_ids AS (
|
|
SELECT DISTINCT issues.project_id AS id
|
|
FROM issues
|
|
LEFT OUTER JOIN project_incident_management_settings
|
|
ON project_incident_management_settings.project_id = issues.project_id
|
|
INNER JOIN label_links
|
|
ON label_links.target_type = 'Issue'
|
|
AND label_links.target_id = issues.id
|
|
INNER JOIN labels
|
|
ON labels.id = label_links.label_id
|
|
WHERE ( project_incident_management_settings.project_id IS NULL )
|
|
-- Use incident labels even though they could be manually added by users who
|
|
-- are not using alert funtionality.
|
|
AND labels.title = 'incident'
|
|
AND labels.color = '#CC0033'
|
|
AND labels.description = 'Denotes a disruption to IT services and the associated issues require immediate attention'
|
|
)
|
|
INSERT INTO project_incident_management_settings (project_id, create_issue, send_email, issue_template_key)
|
|
SELECT project_ids.id, TRUE, FALSE, NULL
|
|
FROM project_ids
|
|
ON CONFLICT (project_id) DO NOTHING;
|
|
SQL
|
|
|
|
execute(query)
|
|
end
|
|
|
|
def down
|
|
# no-op
|
|
end
|
|
end
|