Skip to content
代码片段 群组 项目
未验证 提交 1dac3878 编辑于 作者: Javiera Tapia's avatar Javiera Tapia 提交者: GitLab
浏览文件

Merge branch '504615-create-projects-branchrules-mergerequestapprovalsetting-model' into 'master'

Create Projects::BranchRules::MergeRequestApprovalSetting model

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183679



Merged-by: default avatarJaviera Tapia <jtapia@gitlab.com>
Approved-by: default avatarFabien Catteau <fcatteau@gitlab.com>
Reviewed-by: default avatarFabien Catteau <fcatteau@gitlab.com>
Reviewed-by: default avatarJerry Seto <jseto@gitlab.com>
No related branches found
No related tags found
无相关合并请求
显示
178 个添加0 个删除
---
table_name: projects_branch_rules_merge_request_approval_settings
classes:
- Projects::BranchRules::MergeRequestApprovalSetting
feature_categories:
- source_code_management
description: Contains merge request approval settings for a protected branch
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/183679
milestone: '17.10'
gitlab_schema: gitlab_main_cell
sharding_key:
project_id: projects
table_size: small
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class CreateProjectsBranchRulesMergeRequestApprovalSettings < Gitlab::Database::Migration[2.2]
milestone '17.10'
PROTECTED_BRANCH_INDEX = 'idx_branch_rules_mr_approval_settings_on_protected_branch_id'
PROJECT_INDEX = 'idx_branch_rules_mr_approval_settings_on_project_id'
def change
create_table :projects_branch_rules_merge_request_approval_settings do |t| # rubocop:disable Migration/EnsureFactoryForTable -- See https://gitlab.com/gitlab-org/gitlab/-/issues/504620
t.timestamps_with_timezone null: false
t.belongs_to :protected_branch, foreign_key: false, null: false, index: {
unique: true, name: PROTECTED_BRANCH_INDEX
}
t.belongs_to :project, foreign_key: false, null: false, index: { name: PROJECT_INDEX }
t.boolean :prevent_author_approval, default: false, null: false
t.boolean :prevent_committer_approval, default: false, null: false
t.boolean :prevent_editing_approval_rules, default: false, null: false
t.boolean :require_reauthentication_to_approve, default: false, null: false
t.integer :approval_removals, default: 1, null: false, limit: 2
end
end
end
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class AddFkToProjectsBranchRulesMergeRequestApprovalSettingsProtectedBranch < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.10'
def up
add_concurrent_foreign_key(
:projects_branch_rules_merge_request_approval_settings,
:protected_branches, column: :protected_branch_id,
on_delete: :cascade,
reverse_lock_order: true
)
end
def down
with_lock_retries do
remove_foreign_key_if_exists(
:projects_branch_rules_merge_request_approval_settings,
column: :protected_branch_id,
reverse_lock_order: true
)
end
end
end
# frozen_string_literal: true
# See https://docs.gitlab.com/ee/development/migration_style_guide.html
# for more information on how to write migrations for GitLab.
class AddFkToProjectsBranchRulesMergeRequestApprovalSettingsProject < Gitlab::Database::Migration[2.2]
disable_ddl_transaction!
milestone '17.10'
def up
add_concurrent_foreign_key(
:projects_branch_rules_merge_request_approval_settings,
:projects, column: :project_id,
on_delete: :cascade,
reverse_lock_order: true
)
end
def down
with_lock_retries do
remove_foreign_key_if_exists(
:projects_branch_rules_merge_request_approval_settings,
column: :project_id,
reverse_lock_order: true
)
end
end
end
14cea79c56bcb50b665936feecc18a8e45154ef969c75be8a1fb107aea60a6be
\ No newline at end of file
8c66743c43a7f6afafc73c723a6baf2a53597c1a49c50ceff45b10d7f88460de
\ No newline at end of file
3ad5713d70070b1cf6c85132bd1e132c3a7f5f9112a11dc7014920cb2cbfaa9d
\ No newline at end of file
......@@ -20534,6 +20534,28 @@ CREATE SEQUENCE project_wiki_repositories_id_seq
 
ALTER SEQUENCE project_wiki_repositories_id_seq OWNED BY project_wiki_repositories.id;
 
CREATE TABLE projects_branch_rules_merge_request_approval_settings (
id bigint NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
protected_branch_id bigint NOT NULL,
project_id bigint NOT NULL,
prevent_author_approval boolean DEFAULT false NOT NULL,
prevent_committer_approval boolean DEFAULT false NOT NULL,
prevent_editing_approval_rules boolean DEFAULT false NOT NULL,
require_reauthentication_to_approve boolean DEFAULT false NOT NULL,
approval_removals smallint DEFAULT 1 NOT NULL
);
CREATE SEQUENCE projects_branch_rules_merge_request_approval_settings_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
ALTER SEQUENCE projects_branch_rules_merge_request_approval_settings_id_seq OWNED BY projects_branch_rules_merge_request_approval_settings.id;
CREATE TABLE projects_branch_rules_squash_options (
id bigint NOT NULL,
protected_branch_id bigint NOT NULL,
......@@ -26394,6 +26416,8 @@ ALTER TABLE ONLY project_wiki_repositories ALTER COLUMN id SET DEFAULT nextval('
 
ALTER TABLE ONLY projects ALTER COLUMN id SET DEFAULT nextval('projects_id_seq'::regclass);
 
ALTER TABLE ONLY projects_branch_rules_merge_request_approval_settings ALTER COLUMN id SET DEFAULT nextval('projects_branch_rules_merge_request_approval_settings_id_seq'::regclass);
ALTER TABLE ONLY projects_branch_rules_squash_options ALTER COLUMN id SET DEFAULT nextval('projects_branch_rules_squash_options_id_seq'::regclass);
 
ALTER TABLE ONLY projects_sync_events ALTER COLUMN id SET DEFAULT nextval('projects_sync_events_id_seq'::regclass);
......@@ -29231,6 +29255,9 @@ ALTER TABLE ONLY project_type_ci_runners
ALTER TABLE ONLY project_wiki_repositories
ADD CONSTRAINT project_wiki_repositories_pkey PRIMARY KEY (id);
 
ALTER TABLE ONLY projects_branch_rules_merge_request_approval_settings
ADD CONSTRAINT projects_branch_rules_merge_request_approval_settings_pkey PRIMARY KEY (id);
ALTER TABLE ONLY projects_branch_rules_squash_options
ADD CONSTRAINT projects_branch_rules_squash_options_pkey PRIMARY KEY (id);
 
......@@ -31449,6 +31476,10 @@ CREATE INDEX idx_audit_events_part_on_entity_id_desc_author_id_created_at ON ONL
 
CREATE INDEX idx_award_emoji_on_user_emoji_name_awardable_type_awardable_id ON award_emoji USING btree (user_id, name, awardable_type, awardable_id);
 
CREATE INDEX idx_branch_rules_mr_approval_settings_on_project_id ON projects_branch_rules_merge_request_approval_settings USING btree (project_id);
CREATE UNIQUE INDEX idx_branch_rules_mr_approval_settings_on_protected_branch_id ON projects_branch_rules_merge_request_approval_settings USING btree (protected_branch_id);
CREATE INDEX idx_build_artifacts_size_refreshes_state_updated_at ON project_build_artifacts_size_refreshes USING btree (state, updated_at);
 
CREATE INDEX idx_catalog_resource_cpmt_last_usages_on_cpmt_project_id ON catalog_resource_component_last_usages USING btree (component_project_id);
......@@ -39276,6 +39307,9 @@ ALTER TABLE ONLY ai_active_context_collections
ALTER TABLE ONLY deployments
ADD CONSTRAINT fk_009fd21147 FOREIGN KEY (environment_id) REFERENCES environments(id) ON DELETE CASCADE;
 
ALTER TABLE ONLY projects_branch_rules_merge_request_approval_settings
ADD CONSTRAINT fk_00acf20382 FOREIGN KEY (protected_branch_id) REFERENCES protected_branches(id) ON DELETE CASCADE;
ALTER TABLE ONLY epics
ADD CONSTRAINT fk_013c9f36ca FOREIGN KEY (due_date_sourcing_epic_id) REFERENCES epics(id) ON DELETE SET NULL;
 
......@@ -40710,6 +40744,9 @@ ALTER TABLE ONLY member_approvals
ALTER TABLE ONLY related_epic_links
ADD CONSTRAINT fk_b30520b698 FOREIGN KEY (issue_link_id) REFERENCES issue_links(id) ON DELETE CASCADE;
 
ALTER TABLE ONLY projects_branch_rules_merge_request_approval_settings
ADD CONSTRAINT fk_b322a941f9 FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE;
ALTER TABLE ONLY issues
ADD CONSTRAINT fk_b37be69be6 FOREIGN KEY (work_item_type_id) REFERENCES work_item_types(id);
 
......@@ -21,6 +21,8 @@ module ProtectedBranch
attr_accessor :protected_from_deletion
has_one :squash_option, class_name: 'Projects::BranchRules::SquashOption'
has_one :merge_request_approval_setting, class_name: 'Projects::BranchRules::MergeRequestApprovalSetting'
accepts_nested_attributes_for :squash_option, allow_destroy: true, update_only: true
validate :exact_match_for_squash_option, if: :name_changed?
......
# frozen_string_literal: true
module Projects
module BranchRules
class MergeRequestApprovalSetting < ApplicationRecord
belongs_to :protected_branch, optional: false
belongs_to :project, optional: false
enum :approval_removals, { none: 0, all: 1, code_owners: 2 }, prefix: true
end
end
end
......@@ -25,6 +25,7 @@
end
it { is_expected.to have_one(:squash_option) }
it { is_expected.to have_one(:merge_request_approval_setting) }
it { is_expected.to accept_nested_attributes_for(:squash_option) }
end
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Projects::BranchRules::MergeRequestApprovalSetting, feature_category: :source_code_management do
describe 'associations' do
it { is_expected.to belong_to(:protected_branch).required }
it { is_expected.to belong_to(:project).required }
end
describe 'enums' do
let(:approval_removals) { { none: 0, all: 1, code_owners: 2 } }
it 'defines an enum for approval_removals' do
is_expected.to define_enum_for(:approval_removals)
.with_values(**approval_removals).with_prefix
end
end
describe 'default values' do
subject(:merge_request_approval_setting) { described_class.new }
it 'defaults to :all for approval_removals' do
expect(merge_request_approval_setting.approval_removals).to eq('all')
end
end
end
......@@ -551,6 +551,7 @@ protected_branches:
- external_status_checks
- required_code_owners_sections
- squash_option
- merge_request_approval_setting
protected_tags:
- project
- create_access_levels
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册