From d918df5d720294cae28883a574545dfb0c6c2310 Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 20 Apr 2021 11:49:15 -0700 Subject: [PATCH 1/2] Set Web hook schema defaults to intended default values Somehow older GitLab database schemas may not have the right default values for the Web hook event types. We ran into this on GitLab.com years ago but thought it was localized to our instance. Some other customers have reported similar issues. We now set the default values to the schema to ensure consistency. Relates to https://gitlab.com/gitlab-org/gitlab/-/issues/30627 Changelog: fixed --- .../unreleased/sh-fix-webhook-defaults.yml | 5 +++ ...20012444_change_web_hook_events_default.rb | 15 ++++++++ db/schema_migrations/20210420012444 | 1 + .../change_web_hook_events_default_spec.rb | 36 +++++++++++++++++++ 4 files changed, 57 insertions(+) create mode 100644 changelogs/unreleased/sh-fix-webhook-defaults.yml create mode 100644 db/migrate/20210420012444_change_web_hook_events_default.rb create mode 100644 db/schema_migrations/20210420012444 create mode 100644 spec/migrations/change_web_hook_events_default_spec.rb diff --git a/changelogs/unreleased/sh-fix-webhook-defaults.yml b/changelogs/unreleased/sh-fix-webhook-defaults.yml new file mode 100644 index 00000000000000..791e77df0f049e --- /dev/null +++ b/changelogs/unreleased/sh-fix-webhook-defaults.yml @@ -0,0 +1,5 @@ +--- +title: Set Web hook defaults to intended default values +merge_request: 59814 +author: +type: fixed diff --git a/db/migrate/20210420012444_change_web_hook_events_default.rb b/db/migrate/20210420012444_change_web_hook_events_default.rb new file mode 100644 index 00000000000000..de32f1ea9c79b6 --- /dev/null +++ b/db/migrate/20210420012444_change_web_hook_events_default.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class ChangeWebHookEventsDefault < ActiveRecord::Migration[6.0] + def up + change_column_default :web_hooks, :push_events, true + change_column_default :web_hooks, :issues_events, false + change_column_default :web_hooks, :merge_requests_events, false + change_column_default :web_hooks, :tag_push_events, false + end + + # This is a NOP because this migration is supposed ot restore the + # intended schema, not revert it. + def down + end +end diff --git a/db/schema_migrations/20210420012444 b/db/schema_migrations/20210420012444 new file mode 100644 index 00000000000000..5c098f44bc888f --- /dev/null +++ b/db/schema_migrations/20210420012444 @@ -0,0 +1 @@ +f0bf8c79c1981ecd95c933f37ec5b0187ee6321792d96db26d863b192843c5ab \ No newline at end of file diff --git a/spec/migrations/change_web_hook_events_default_spec.rb b/spec/migrations/change_web_hook_events_default_spec.rb new file mode 100644 index 00000000000000..3b1a65ece175d6 --- /dev/null +++ b/spec/migrations/change_web_hook_events_default_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20210420012444_change_web_hook_events_default.rb') + +RSpec.describe ChangeWebHookEventsDefault do + let(:web_hooks) { table(:web_hooks) } + let(:projects) { table(:projects) } + let(:groups) { table(:namespaces) } + + let(:group) { groups.create!(name: 'gitlab', path: 'gitlab-org') } + let(:project) { projects.create!(name: 'gitlab', path: 'gitlab', namespace_id: group.id) } + let(:hook) { web_hooks.create!(project_id: project.id, type: 'ProjectHook') } + let(:group_hook) { web_hooks.create!(group_id: group.id, type: 'GroupHook') } + + before do + # Simulate the wrong schema + %w(push_events issues_events merge_requests_events tag_push_events).each do |column| + ActiveRecord::Base.connection.execute "ALTER TABLE web_hooks ALTER COLUMN #{column} DROP DEFAULT" + end + end + + it 'sets default values' do + migrate! + + expect(hook.push_events).to be true + expect(hook.issues_events).to be false + expect(hook.merge_requests_events).to be false + expect(hook.tag_push_events).to be false + + expect(group_hook.push_events).to be true + expect(group_hook.issues_events).to be false + expect(group_hook.merge_requests_events).to be false + expect(group_hook.tag_push_events).to be false + end +end -- GitLab From 3883845bf0a24b9d5aa864bdb03a0f4073235f0e Mon Sep 17 00:00:00 2001 From: Stan Hu Date: Tue, 20 Apr 2021 22:24:28 +0000 Subject: [PATCH 2/2] Apply 1 suggestion(s) to 1 file(s) --- db/migrate/20210420012444_change_web_hook_events_default.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/migrate/20210420012444_change_web_hook_events_default.rb b/db/migrate/20210420012444_change_web_hook_events_default.rb index de32f1ea9c79b6..b5a63a5a2a8476 100644 --- a/db/migrate/20210420012444_change_web_hook_events_default.rb +++ b/db/migrate/20210420012444_change_web_hook_events_default.rb @@ -8,7 +8,7 @@ def up change_column_default :web_hooks, :tag_push_events, false end - # This is a NOP because this migration is supposed ot restore the + # This is a NOP because this migration is supposed to restore the # intended schema, not revert it. def down end -- GitLab