From 80f8074d01a310141984dad9dfe01a27b533e78a Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Thu, 10 Dec 2015 14:08:09 +0100 Subject: [PATCH] Migrate SlackService and HipChat service --- .../project_services/builds_email_service.rb | 2 ++ .../project_services/hipchat_service.rb | 2 ++ app/models/project_services/slack_service.rb | 2 ++ .../20151209145909_migrate_ci_emails.rb | 6 ++++ ...20151210125232_migrate_ci_slack_service.rb | 29 ++++++++++++++++++ ...51210125927_migrate_ci_hip_chat_service.rb | 30 +++++++++++++++++++ db/schema.rb | 2 +- 7 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20151210125232_migrate_ci_slack_service.rb create mode 100644 db/migrate/20151210125927_migrate_ci_hip_chat_service.rb diff --git a/app/models/project_services/builds_email_service.rb b/app/models/project_services/builds_email_service.rb index 4514f55cf56..e01648f0596 100644 --- a/app/models/project_services/builds_email_service.rb +++ b/app/models/project_services/builds_email_service.rb @@ -24,6 +24,8 @@ class BuildsEmailService < Service boolean_accessor :notify_only_broken_builds validates :recipients, presence: true, if: :activated? + default_value_for :notify_only_broken_builds, true + def title 'Builds emails' end diff --git a/app/models/project_services/hipchat_service.rb b/app/models/project_services/hipchat_service.rb index 6f96907ec18..4045d16fa22 100644 --- a/app/models/project_services/hipchat_service.rb +++ b/app/models/project_services/hipchat_service.rb @@ -25,6 +25,8 @@ class HipchatService < Service boolean_accessor :notify_only_broken_builds validates :token, presence: true, if: :activated? + default_value_for :notify_only_broken_builds, true + def title 'HipChat' end diff --git a/app/models/project_services/slack_service.rb b/app/models/project_services/slack_service.rb index 35819491575..553d4b025e1 100644 --- a/app/models/project_services/slack_service.rb +++ b/app/models/project_services/slack_service.rb @@ -23,6 +23,8 @@ class SlackService < Service boolean_accessor :notify_only_broken_builds validates :webhook, presence: true, if: :activated? + default_value_for :notify_only_broken_builds, true + def title 'Slack' end diff --git a/db/migrate/20151209145909_migrate_ci_emails.rb b/db/migrate/20151209145909_migrate_ci_emails.rb index ebf0e7d264f..964dde841ad 100644 --- a/db/migrate/20151209145909_migrate_ci_emails.rb +++ b/db/migrate/20151209145909_migrate_ci_emails.rb @@ -2,6 +2,9 @@ class MigrateCiEmails < ActiveRecord::Migration include Gitlab::Database def up + # This inserts a new service: BuildsEmailService + # It also "manually" constructs the properties (JSON-encoded) + # Migrating all ci_projects e-mail related columns execute( 'INSERT INTO services (project_id, type, created_at, updated_at, active, push_events, issues_events, merge_requests_events, tag_push_events, note_events, build_events, properties) ' \ "SELECT projects.id, 'BuildsEmailService', ci_services.created_at, ci_services.updated_at, #{true_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{false_value}, #{true_value}, " \ @@ -13,4 +16,7 @@ class MigrateCiEmails < ActiveRecord::Migration "WHERE ci_services.type = 'Ci::MailService' AND ci_services.active" ) end + + def down + end end diff --git a/db/migrate/20151210125232_migrate_ci_slack_service.rb b/db/migrate/20151210125232_migrate_ci_slack_service.rb new file mode 100644 index 00000000000..4a5dfe866a5 --- /dev/null +++ b/db/migrate/20151210125232_migrate_ci_slack_service.rb @@ -0,0 +1,29 @@ +class MigrateCiSlackService < ActiveRecord::Migration + include Gitlab::Database + + def up + properties_query = 'SELECT properties FROM ci_services ' \ + 'JOIN ci_projects ON ci_services.project_id=ci_projects.id ' \ + 'WHERE ci_projects.gitlab_id=services.project_id' + + active_query = 'SELECT 1 FROM ci_services ' \ + 'JOIN ci_projects ON ci_services.project_id=ci_projects.id ' \ + "WHERE ci_projects.gitlab_id=services.project_id AND ci_services.type='Ci::SlackService' AND ci_services.active" + + # We update the service since services are always generated for project, even if they are inactive + # Activate service and migrate properties if currently the service is not active + execute( + "UPDATE services SET properties=(#{properties_query}), build_events=#{true_value}, active=#{true_value} " \ + "WHERE NOT services.active AND services.type='SlackService' AND (#{active_query}) IS NOT NULL" + ) + + # Tick only build_events if the service is already active + execute( + "UPDATE services SET build_events=#{true_value} " \ + "WHERE services.active AND services.type='SlackService' AND (#{active_query}) IS NOT NULL" + ) + end + + def down + end +end diff --git a/db/migrate/20151210125927_migrate_ci_hip_chat_service.rb b/db/migrate/20151210125927_migrate_ci_hip_chat_service.rb new file mode 100644 index 00000000000..2fdaf5fb917 --- /dev/null +++ b/db/migrate/20151210125927_migrate_ci_hip_chat_service.rb @@ -0,0 +1,30 @@ +class MigrateCiHipChatService < ActiveRecord::Migration + include Gitlab::Database + + def up + # From properties strip `hipchat_` key + properties_query = "SELECT REPLACE(properties, '\"hipchat_', '\"') FROM ci_services " \ + 'JOIN ci_projects ON ci_services.project_id=ci_projects.id ' \ + 'WHERE ci_projects.gitlab_id=services.project_id' + + active_query = 'SELECT 1 FROM ci_services ' \ + 'JOIN ci_projects ON ci_services.project_id=ci_projects.id ' \ + "WHERE ci_projects.gitlab_id=services.project_id AND ci_services.type='Ci::HipchatService' AND ci_services.active" + + # We update the service since services are always generated for project, even if they are inactive + # Activate service and migrate properties if currently the service is not active + execute( + "UPDATE services SET properties=(#{properties_query}), build_events=#{true_value}, active=#{true_value} " \ + "WHERE NOT services.active AND services.type='HipchatService' AND (#{active_query}) IS NOT NULL" + ) + + # Tick only build_events if the service is already active + execute( + "UPDATE services SET build_events=#{true_value} " \ + "WHERE services.active AND services.type='HipchatService' AND (#{active_query}) IS NOT NULL" + ) + end + + def down + end +end diff --git a/db/schema.rb b/db/schema.rb index 50b6650ac40..6ccd4404219 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20151209145909) do +ActiveRecord::Schema.define(version: 20151210125927) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql"