diff --git a/app/workers/ci/destroy_old_pipelines_worker.rb b/app/workers/ci/destroy_old_pipelines_worker.rb index 8023fe462b1759d041e86c81bf284c9ef4806b32..5aaa25903a99a86acddae09dfe31ed7450034a2a 100644 --- a/app/workers/ci/destroy_old_pipelines_worker.rb +++ b/app/workers/ci/destroy_old_pipelines_worker.rb @@ -55,7 +55,8 @@ def queue_key end def skip_protected_pipelines?(project) - Feature.enabled?(:ci_skip_old_protected_pipelines, project.root_namespace, type: :wip) + Feature.enabled?(:ci_skip_old_protected_pipelines, project.root_namespace, type: :wip) && + Feature.disabled?(:ci_skip_old_protected_pipelines_override, project, type: :wip) end def skip_locked_pipelines?(project) diff --git a/config/feature_flags/wip/ci_skip_old_protected_pipelines_override.yml b/config/feature_flags/wip/ci_skip_old_protected_pipelines_override.yml new file mode 100644 index 0000000000000000000000000000000000000000..f07bbb30a9aa1db77da3a720c4a1f1cb204c260f --- /dev/null +++ b/config/feature_flags/wip/ci_skip_old_protected_pipelines_override.yml @@ -0,0 +1,10 @@ +--- +name: ci_skip_old_protected_pipelines_override +description: +feature_issue_url: +introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/204657 +rollout_issue_url: +milestone: '18.4' +group: group::ci platform +type: wip +default_enabled: false diff --git a/spec/workers/ci/destroy_old_pipelines_worker_spec.rb b/spec/workers/ci/destroy_old_pipelines_worker_spec.rb index c2ff0e8b47646f35f2b15d0272b0f9148ae8a71d..cb1c1858d5d633b846521ffcf9e3169632718691 100644 --- a/spec/workers/ci/destroy_old_pipelines_worker_spec.rb +++ b/spec/workers/ci/destroy_old_pipelines_worker_spec.rb @@ -46,12 +46,29 @@ context 'when protected pipelines are configured' do let_it_be(:old_protected_pipeline) do - create(:ci_pipeline, project: project, created_at: 1.month.ago, protected: true) + create(:ci_pipeline, project: project, created_at: 1.month.ago, protected: true, locked: :unlocked) end - it 'keeps protected pipelines' do - expect { perform }.to change { project.all_pipelines.count }.by(-2) - expect(old_protected_pipeline.reload).to be_present + context 'when the override FF is disabled' do + before do + stub_feature_flags(ci_skip_old_protected_pipelines_override: false) + end + + it 'keeps protected pipelines' do + expect { perform }.to change { project.all_pipelines.count }.by(-2) + expect(old_protected_pipeline.reload).to be_present + end + end + + context 'when overriding the protected pipelines FF' do + before do + stub_feature_flags(ci_skip_old_protected_pipelines_override: true) + end + + it 'deletes protected pipelines' do + expect { perform }.to change { project.all_pipelines.count }.by(-3) + expect { old_protected_pipeline.reload }.to raise_error ActiveRecord::RecordNotFound + end end end