Allow creating protected branches that can't be pushed to
What does this MR do?
- Add "No one can push" as a setting to protected branches.
- This applies to Masters (as well as all other users)
What are the relevant issue numbers?
Closes #18193 (closed)
Does this need an EE merge request?
Yes. gitlab-org/gitlab-ee!569
Screenshots
TODO
-
#18193 (closed) !5081 (merged) No one can push to protected branches -
Implementation -
Model changes -
Remove "developers_can_merge" and "developers_can_push" -
Replace with ProtectedBranchPushAccessandProtectedBranchMergeAccess-
Reversible migration -
Raise error on failure -
MySQL
-
-
-
Backend changes -
Creating a protected branch creates access rows -
Add no_oneas an access level -
Enforce "no one can push" -
Allow setting levels while creating protected branches?
-
-
Frontend -
Replace checkboxes with selects
-
-
-
Add tests -
GitPushService-> new projects' default branch protection -
Fix existing tests -
Refactor -
Test workflows by hand -
from the Web UI -
When "Allowed to Push" is "No one" -
Developers can't push -
Masters can't push
-
-
When "Allowed to Push" is "Developers + Masters" -
Developers can push -
Masters can push
-
-
When "Allowed to Push" is "Masters" -
Developers can't push -
Masters can push
-
-
When "Allowed to Merge" is "Masters" and "Allowed to Push" is "Masters" -
Developers can't push -
Developers can't merge -
Masters can merge -
Masters can push
-
-
When "Allowed to Merge" is "Developers + Masters" and "Allowed to Push" is "Masters" -
Developers can't push -
Developers can merge -
Masters can merge -
Masters can push
-
-
When "Allowed to Merge" is "Developers + Masters" and "Allowed to Push" is "No one" -
Developers can't push -
Developers can merge -
Masters can merge -
Masters can't push
-
-
When "Allowed to Merge" is "Masters" and "Allowed to Push" is "No one" -
Developers can't push -
Developers can't merge -
Masters can merge -
Masters can't push
-
-
-
from CLI -
When "Allowed to Push" is "No one" -
Developers can't push -
Masters can't push
-
-
When "Allowed to Push" is "Developers + Masters" -
Developers can push -
Masters can push
-
-
When "Allowed to Push" is "Masters" -
Developers can't push -
Masters can push
-
-
When "Allowed to Merge" is "Masters" and "Allowed to Push" is "Masters" -
Developers can't push -
Developers can't merge -
Masters can merge -
Masters can push
-
-
When "Allowed to Merge" is "Developers + Masters" and "Allowed to Push" is "Masters" -
Developers can't push -
Developers can't merge -
Masters can merge -
Masters can push
-
-
When "Allowed to Merge" is "Developers + Masters" and "Allowed to Push" is "No one" -
Developers can't push -
Developers can't merge -
Masters can't merge -
Masters can't push
-
-
When "Allowed to Merge" is "Masters" and "Allowed to Push" is "No one" -
Developers can't push -
Developers can't merge -
Masters can't merge -
Masters can't push
-
-
-
-
Add tests for owners and admins -
CHANGELOG -
Screenshots -
Documentation -
Wait for !4665 (merged)to be merged in -
Wait for gitlab-org/gitlab-ce#19872andgitlab-org/gitlab-ee!564to be closed -
Rebase against master instead of !4892 (merged) -
Make sure build is green -
Create EE MR -
Cherry pick commits -
Make sure build is green
-
-
Address @axil's comments -
Assign to endboss -
Wait for @dbalexandre's review -
Address @dbalexandre's comments -
Address @axil's comments -
Align dropdowns -
No flash when protected branch is updated
-
-
Resolve conflicts -
Implement protect/unprotect API -
Address @dbalexandre's comments -
Update EE MR -
Address @rymai's comments -
Create/Update service should return a ProtectedBranch -
Successfuly protected branch creation shouldn't load_protected_branches -
Rename allowed_to_mergeas #minimum_access_level_for_merge -
Rename allowed_to_pushas #minimum_access_level_for_push -
Use inclusionandGitlab::Accessinstead of anenum -
Modify check_accessto work withGitlab::Access -
Pass @protected_branchto#executeinUpdateService -
simplify with a nested field protected_branch[push_access_level][access_level] -
developers_can_{merge,push}should be handled in the API -
Use can?(current_user, ...)instead ofcurrent_user.can?(...) -
Instantiate ProtectedBranchesAccessSelectindispatcher.js -
constants regarding downtime migrations -
Explicit #downfor columns with default
-
-
Update EE MR -
Wait for CE merge -
Wait for EE merge -
Create issue for UI changes proposed by @zyv
-
