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:
commit
d73b6d0f45
|
@ -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)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
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
|
||||||
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue