Merge branch 'require-pipeline-when-enabling-only-allow-merge-if-pipeline-succeeds' into 'master'

Pipeline must be present if "Pipeline must succeed" is set

See merge request gitlab-org/gitlab-ce!29926
This commit is contained in:
Grzegorz Bizon 2019-06-25 15:48:39 +00:00
commit d73b6d0f45
4 changed files with 25 additions and 3 deletions

View File

@ -1030,9 +1030,9 @@ class MergeRequest < ApplicationRecord
def mergeable_ci_state? def mergeable_ci_state?
return true unless project.only_allow_merge_if_pipeline_succeeds? return true unless project.only_allow_merge_if_pipeline_succeeds?
return true unless head_pipeline return false unless actual_head_pipeline
actual_head_pipeline&.success? || actual_head_pipeline&.skipped? actual_head_pipeline.success? || actual_head_pipeline.skipped?
end end
def environments_for(current_user) def environments_for(current_user)

View File

@ -0,0 +1,5 @@
---
title: Enforce presence of pipeline when "Pipeline must succeed" project setting is enabled
merge_request: 29926
author:
type: fixed

View File

@ -42,6 +42,8 @@ Navigate to your project's settings page and expand the **Merge requests** secti
In the **Merge checks** subsection, select the **Pipelines must succeed** check In the **Merge checks** subsection, select the **Pipelines must succeed** check
box and hit **Save** for the changes to take effect. box and hit **Save** for the changes to take effect.
NOTE: **Note:** This setting also prevents merge requests from being merged if there is no pipeline.
![Pipelines must succeed settings](img/merge_when_pipeline_succeeds_only_if_succeeds_settings.png) ![Pipelines must succeed settings](img/merge_when_pipeline_succeeds_only_if_succeeds_settings.png)
From now on, every time the pipeline fails you will not be able to merge the From now on, every time the pipeline fails you will not be able to merge the
@ -49,6 +51,21 @@ merge request from the UI, until you make all relevant jobs pass.
![Only allow merge if pipeline succeeds message](img/merge_when_pipeline_succeeds_only_if_succeeds_msg.png) ![Only allow merge if pipeline succeeds message](img/merge_when_pipeline_succeeds_only_if_succeeds_msg.png)
### Limitations
When this setting is enabled, a merge request is prevented from being merged if there is no pipeline. This may conflict with some use cases where [`only/except`](../../../ci/yaml/README.md#onlyexcept-advanced) rules are used and they don't generate any pipelines.
Users that expect to be able to merge a merge request in this scenario should ensure that [there is always a pipeline](https://gitlab.com/gitlab-org/gitlab-ce/issues/54226) and that it's succesful.
For example, to that on merge requests there is always a passing job even though `only/except` rules may not generate any other jobs:
```yaml
enable_merge:
only: merge_requests
script:
- echo true
```
<!-- ## Troubleshooting <!-- ## Troubleshooting
Include any troubleshooting steps that you can foresee. If you know beforehand what issues Include any troubleshooting steps that you can foresee. If you know beforehand what issues

View File

@ -2124,7 +2124,7 @@ describe MergeRequest do
allow(subject).to receive(:head_pipeline) { nil } allow(subject).to receive(:head_pipeline) { nil }
end end
it { expect(subject.mergeable_ci_state?).to be_truthy } it { expect(subject.mergeable_ci_state?).to be_falsey }
end end
end end