Skip to content
Snippets Groups Projects
Commit 2189faaf authored by Shinya Maeda's avatar Shinya Maeda
Browse files

Explicitly target merge request pipelines on environment stop

This commit is a follow-up of fixing related environments
for merge requests. It effectively narrows down the scope of
stopping environments to be in MR pipelines.
parent 6a0c8ca0
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -18,7 +18,12 @@ def execute_for_branch(branch_name)
environments.each { |environment| execute(environment) }
end
 
def execute_for_merge_request(merge_request)
def execute_for_merge_request_pipeline(merge_request)
if ::Feature.enabled?(:fix_related_environments_for_merge_requests, merge_request.target_project,
default_enabled: :yaml)
return unless merge_request.actual_head_pipeline&.merge_request?
end
merge_request.environments_in_head_pipeline(deployment_status: :success).each do |environment|
execute(environment)
end
Loading
Loading
Loading
Loading
@@ -68,7 +68,7 @@ def handle_reviewers_change(merge_request, old_reviewers)
 
def cleanup_environments(merge_request)
Environments::StopService.new(merge_request.source_project, current_user)
.execute_for_merge_request(merge_request)
.execute_for_merge_request_pipeline(merge_request)
end
 
def cancel_review_app_jobs!(merge_request)
Loading
Loading
Loading
Loading
@@ -161,8 +161,8 @@
end
end
 
describe '#execute_for_merge_request' do
subject { service.execute_for_merge_request(merge_request) }
describe '#execute_for_merge_request_pipeline' do
subject { service.execute_for_merge_request_pipeline(merge_request) }
 
let(:merge_request) { create(:merge_request, source_branch: 'feature', target_branch: 'master') }
let(:project) { merge_request.project }
Loading
Loading
@@ -199,6 +199,19 @@
expect(pipeline.environments_in_self_and_descendants.first).to be_stopped
end
 
context 'when pipeline is a branch pipeline for merge request' do
let(:pipeline) do
create(:ci_pipeline, source: :push, project: project, sha: merge_request.diff_head_sha,
merge_requests_as_head_pipeline: [merge_request])
end
it 'does not stop the active environment' do
subject
expect(pipeline.environments_in_self_and_descendants.first).to be_available
end
end
context 'with environment related jobs ' do
let!(:environment) { create(:environment, :available, name: 'staging', project: project) }
let!(:prepare_staging_job) { create(:ci_build, :prepare_staging, pipeline: pipeline, project: project) }
Loading
Loading
Loading
Loading
@@ -97,7 +97,7 @@
 
it 'clean up environments for the merge request' do
expect_next_instance_of(::Environments::StopService) do |service|
expect(service).to receive(:execute_for_merge_request).with(merge_request)
expect(service).to receive(:execute_for_merge_request_pipeline).with(merge_request)
end
 
described_class.new(project: project, current_user: user).execute(merge_request)
Loading
Loading
Loading
Loading
@@ -76,7 +76,7 @@
 
it 'clean up environments for the merge request' do
expect_next_instance_of(::Environments::StopService) do |stop_environment_service|
expect(stop_environment_service).to receive(:execute_for_merge_request).with(merge_request)
expect(stop_environment_service).to receive(:execute_for_merge_request_pipeline).with(merge_request)
end
 
subject
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment