Commit d73b6d0f authored by Grzegorz Bizon's avatar Grzegorz Bizon

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
parents c499c08e e236fbdb
...@@ -1030,9 +1030,9 @@ class MergeRequest < ApplicationRecord ...@@ -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)
......
---
title: Enforce presence of pipeline when "Pipeline must succeed" project setting is enabled
merge_request: 29926
author:
type: fixed
...@@ -42,6 +42,8 @@ Navigate to your project's settings page and expand the **Merge requests** secti ...@@ -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. ...@@ -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
......
...@@ -2124,7 +2124,7 @@ describe MergeRequest do ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment