Merge branch 'api_only_allow_merge_if_build_succeeds' into 'master'
expose 'only_allow_merge_if_build_succeeds' project setting in the API ## What does this MR do? Adds the 'only_allow_merge_if_build_succeeds' project setting in the API. ## Are there points in the code the reviewer needs to double check? No, but maybe this code is not enough for ACLs or the like. ## Why was this MR needed? Because that's a very useful setting to change via automation (through the API) ## What are the relevant issue numbers? Closes #21085, closes https://gitlab.com/gitlab-org/gitlab-ce/issues/20088. ## Screenshots (if relevant) ## Does this MR meet the acceptance criteria? - [X] [CHANGELOG](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CHANGELOG) entry added - [X] [Documentation created/updated](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/development/doc_styleguide.md) - [X] API support added - Tests - [X] Added for this feature/bug - [X] All builds are passing - [X] Conform by the [style guides](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/CONTRIBUTING.md#style-guides) - [X] Branch has no merge conflicts with `master` (if you do - rebase it please) - [X] [Squashed related commits together](https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) See merge request !5930
This commit is contained in:
commit
952c501fdf
6 changed files with 53 additions and 12 deletions
|
@ -6,6 +6,7 @@ v 8.12.0 (unreleased)
|
|||
- Optimistic locking for Issues and Merge Requests (title and description overriding prevention)
|
||||
- Add `wiki_page_events` to project hook APIs (Ben Boeckel)
|
||||
- Added tests for diff notes
|
||||
- Added 'only_allow_merge_if_build_succeeds' project setting in the API. !5930 (Duck)
|
||||
|
||||
v 8.11.2 (unreleased)
|
||||
- Show "Create Merge Request" widget for push events to fork projects on the source project
|
||||
|
|
|
@ -84,7 +84,8 @@ Parameters:
|
|||
"star_count": 0,
|
||||
"runners_token": "b8547b1dc37721d05889db52fa2f02",
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
|
@ -144,7 +145,8 @@ Parameters:
|
|||
"star_count": 0,
|
||||
"runners_token": "b8547b1dc37721d05889db52fa2f02",
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
]
|
||||
```
|
||||
|
@ -280,7 +282,8 @@ Parameters:
|
|||
"group_name": "Gitlab Org",
|
||||
"group_access_level": 10
|
||||
}
|
||||
]
|
||||
],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -448,6 +451,7 @@ Parameters:
|
|||
- `visibility_level` (optional)
|
||||
- `import_url` (optional)
|
||||
- `public_builds` (optional)
|
||||
- `only_allow_merge_if_build_succeeds` (optional)
|
||||
|
||||
### Create project for user
|
||||
|
||||
|
@ -473,6 +477,7 @@ Parameters:
|
|||
- `visibility_level` (optional)
|
||||
- `import_url` (optional)
|
||||
- `public_builds` (optional)
|
||||
- `only_allow_merge_if_build_succeeds` (optional)
|
||||
|
||||
### Edit project
|
||||
|
||||
|
@ -499,6 +504,7 @@ Parameters:
|
|||
- `public` (optional) - if `true` same as setting visibility_level = 20
|
||||
- `visibility_level` (optional)
|
||||
- `public_builds` (optional)
|
||||
- `only_allow_merge_if_build_succeeds` (optional)
|
||||
|
||||
On success, method returns 200 with the updated project. If parameters are
|
||||
invalid, 400 is returned.
|
||||
|
@ -577,7 +583,8 @@ Example response:
|
|||
"forks_count": 0,
|
||||
"star_count": 1,
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -643,7 +650,8 @@ Example response:
|
|||
"forks_count": 0,
|
||||
"star_count": 0,
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -729,7 +737,8 @@ Example response:
|
|||
"star_count": 0,
|
||||
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
```
|
||||
|
||||
|
@ -815,7 +824,8 @@ Example response:
|
|||
"star_count": 0,
|
||||
"runners_token": "b8bc4a7a29eb76ea83cf79e4908c2b",
|
||||
"public_builds": true,
|
||||
"shared_with_groups": []
|
||||
"shared_with_groups": [],
|
||||
"only_allow_merge_if_build_succeeds": false
|
||||
}
|
||||
```
|
||||
|
||||
|
|
|
@ -90,6 +90,7 @@ module API
|
|||
expose :shared_with_groups do |project, options|
|
||||
SharedGroup.represent(project.project_group_links.all, options)
|
||||
end
|
||||
expose :only_allow_merge_if_build_succeeds
|
||||
end
|
||||
|
||||
class Member < UserBasic
|
||||
|
|
|
@ -123,7 +123,8 @@ module API
|
|||
:public,
|
||||
:visibility_level,
|
||||
:import_url,
|
||||
:public_builds]
|
||||
:public_builds,
|
||||
:only_allow_merge_if_build_succeeds]
|
||||
attrs = map_public_to_visibility_level(attrs)
|
||||
@project = ::Projects::CreateService.new(current_user, attrs).execute
|
||||
if @project.saved?
|
||||
|
@ -172,7 +173,8 @@ module API
|
|||
:public,
|
||||
:visibility_level,
|
||||
:import_url,
|
||||
:public_builds]
|
||||
:public_builds,
|
||||
:only_allow_merge_if_build_succeeds]
|
||||
attrs = map_public_to_visibility_level(attrs)
|
||||
@project = ::Projects::CreateService.new(user, attrs).execute
|
||||
if @project.saved?
|
||||
|
@ -234,7 +236,8 @@ module API
|
|||
:shared_runners_enabled,
|
||||
:public,
|
||||
:visibility_level,
|
||||
:public_builds]
|
||||
:public_builds,
|
||||
:only_allow_merge_if_build_succeeds]
|
||||
attrs = map_public_to_visibility_level(attrs)
|
||||
authorize_admin_project
|
||||
authorize! :rename_project, user_project if attrs[:name].present?
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -224,7 +224,8 @@ describe API::API, api: true do
|
|||
description: FFaker::Lorem.sentence,
|
||||
issues_enabled: false,
|
||||
merge_requests_enabled: false,
|
||||
wiki_enabled: false
|
||||
wiki_enabled: false,
|
||||
only_allow_merge_if_build_succeeds: false
|
||||
})
|
||||
|
||||
post api('/projects', user), project
|
||||
|
@ -276,6 +277,18 @@ describe API::API, api: true do
|
|||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
||||
end
|
||||
|
||||
it 'sets a project as allowing merge even if build fails' do
|
||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
||||
post api('/projects', user), project
|
||||
expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey
|
||||
end
|
||||
|
||||
it 'sets a project as allowing merge only if build succeeds' do
|
||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true })
|
||||
post api('/projects', user), project
|
||||
expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy
|
||||
end
|
||||
|
||||
context 'when a visibility level is restricted' do
|
||||
before do
|
||||
@project = attributes_for(:project, { public: true })
|
||||
|
@ -384,6 +397,18 @@ describe API::API, api: true do
|
|||
expect(json_response['public']).to be_falsey
|
||||
expect(json_response['visibility_level']).to eq(Gitlab::VisibilityLevel::PRIVATE)
|
||||
end
|
||||
|
||||
it 'sets a project as allowing merge even if build fails' do
|
||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: false })
|
||||
post api("/projects/user/#{user.id}", admin), project
|
||||
expect(json_response['only_allow_merge_if_build_succeeds']).to be_falsey
|
||||
end
|
||||
|
||||
it 'sets a project as allowing merge only if build succeeds' do
|
||||
project = attributes_for(:project, { only_allow_merge_if_build_succeeds: true })
|
||||
post api("/projects/user/#{user.id}", admin), project
|
||||
expect(json_response['only_allow_merge_if_build_succeeds']).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe "POST /projects/:id/uploads" do
|
||||
|
@ -444,6 +469,7 @@ describe API::API, api: true do
|
|||
expect(json_response['shared_with_groups'][0]['group_id']).to eq(group.id)
|
||||
expect(json_response['shared_with_groups'][0]['group_name']).to eq(group.name)
|
||||
expect(json_response['shared_with_groups'][0]['group_access_level']).to eq(link.group_access)
|
||||
expect(json_response['only_allow_merge_if_build_succeeds']).to eq(project.only_allow_merge_if_build_succeeds)
|
||||
end
|
||||
|
||||
it 'returns a project by path name' do
|
||||
|
|
Loading…
Reference in a new issue