mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-09 04:36:11 +10:00
Allow specifying protected branches using wildcards Closes #18627 # Tasks - [ ] #18627 !4665 Allow specifying protected branches using wildcards - [x] Find existing usages of protected branches - Protecting branches - `ProtectedBranchesController` is used to mark a branch protected/unprotected - `API::Branches` can be used to mark a branch protected/unprotected - Enforcing branch protection - `Gitlab::GitAccess` has helpers (`can_push_to_branch?`, `check`) that are used to deny pushes if a branch is protected - Over SSH: `gitlab-shell` receives a push, and calls `/allowed` on the GitLab API, which calls `GitAccess.check` - Over HTTP: - `gitlab-workhorse` receives the request, and forwards it to rails - Rails (in the `GitHttpController#git-recieve-pack`) runs basic checks (is the user logged in, not protected branch checks) and returns ok with `GL_ID` and `RepoPath` - `gitlab-workhorse` looks at the response, and calls the relevant `gitlab-shell` action from `git-http/handlePostRPC` - Rest of this flow is the same as the SSH flow above - [x] Implementation - [x] Backend - [x] Change `project#protected_branch?` to look at wildcard protected branches - [x] Change `project#developers_can_push_to_protected_branch?` - [x] Change `project#open_branches` - [x] Better error message when creating a disallowed branch from the Web UI - [x] Frontend - [x] Protected branches page should allow typing out a wildcard pattern - [x] Add help text explaining the use of wildcards - [x] Show matching branches for each protected branch - [x] ~~On the index page~~ - [x] On a show page - [x] Index? - [x] Can't have the "last commit" column for wildcard protected branches - [x] Fix / write tests - [x] What happens if a hook is missing in dev? - [x] Refactor - [x] Test workflows - Create a branch matching a wildcard pattern - Push to a branch matching a wildcard pattern - Force push to a branch matching a wildcard pattern - Delete a branch matching a wildcard pattern - [x] Test using Web UI - [x] Test over SSH - [x] Test over HTTP - [x] Test as developer and master - [x] Investigate performance - [x] Test with a large number of protected branches / branches - [x] Paginate list of protected branches - [x] ~~Possibly rewrite `open_branches`~~ - [x] Add `iid`s to existing `ProtectedBranch`es - [x] Add documentation - [x] Add CHANGELOG entry - [x] Add screenshots - [x] Make sure [build](https://gitlab.com/gitlab-org/gitlab-ce/commit/2f753e3ed2ce681b4444944d521f4419e8ed37f7/builds) passes - [x] Assign to endboss for review - [x] Address @DouweM's comments - [x] `protected_branch_params` - [x] `exact_match` instead of `explicit_match` - [x] When would self.name be blank? - [x] Move `protected_branches.each` to a partial - [x] Move `matching_branches.each` to a partial - [x] If the branch is in @matching_branches, it's not been removed - [x] move this regex to a method and memoize it - [x] `commit_sha` directly for exact matches - [x] Number of matches for wildcard matches, with a link - [x] Wait for [build](https://gitlab.com/gitlab-org/gitlab-ce/commit/43f9ce0e88194b8f719bb1c1e656b7fc13278d56/builds) to pass - [x] Respond to @DouweM's comments - [x] Don't use iid - [x] Controller should use `@project.protected_branches.new` - [x] move the memoization to `def wildcard_regex` - [x] render with `collection: @protected_branches` - [x] Wait for [build](https://gitlab.com/gitlab-org/gitlab-ce/commit/f7beedf122fa0c7aa89e86181fe7499321fb10ca/builds) to pass - [x] Wait for @DouweM's review - [x] Wait for @jschatz1's review - [x] Respond to @jschatz1's comments - [x] Use the new dropdown style - [x] description should be moved to the description section without the styling - [x] Protect button should be disabled when no branch is selected - [x] Update screenshots - [x] Merge conflicts - [x] Make sure [build](https://gitlab.com/gitlab-org/gitlab-ce/commit/20f3cfe8d5540eab64c2ba548043d600b28c61ba/builds) passes - [ ] Revisit performance, possibly with staging/production data - [ ] Get a dump of staging / run against staging live - [ ] Get SSH access to staging - [ ] Wait for review/merge # Screenshots ## Creating wildcard protected branches     ### Using the `GLDropdown` component  ## Enforcing wildcard protected branches ### From the Web UI  ### Over SSH  ### Over HTTPS  ## Listing matching branches  See merge request !4665
Documentation
User documentation
- API Automate GitLab via a simple and powerful API.
- CI/CD GitLab Continuous Integration (CI) and Continuous Delivery (CD) getting started,
.gitlab-ci.ymloptions, and examples. - GitLab as OAuth2 authentication service provider. It allows you to login to other applications from GitLab.
- Container Registry Learn how to use GitLab Container Registry.
- GitLab Basics Find step by step how to start working on your commandline and on GitLab.
- Importing to GitLab.
- Importing and exporting projects between instances.
- Markdown GitLab's advanced formatting system.
- Migrating from SVN Convert a SVN repository to Git and GitLab.
- Permissions Learn what each role in a project (external/guest/reporter/developer/master/owner) can do.
- Profile Settings
- Project Services Integrate a project with external services, such as CI and chat.
- Public access Learn how you can allow public and internal access to projects.
- SSH Setup your ssh keys and deploy keys for secure access to your projects.
- Webhooks Let GitLab notify you when new code has been pushed to your project.
- Workflow Using GitLab functionality and importing projects from GitHub and SVN.
Administrator documentation
- Access restrictions Define which Git access protocols can be used to talk to GitLab
- Authentication/Authorization Configure external authentication with LDAP, SAML, CAS and additional Omniauth providers.
- Custom Git hooks Custom Git hooks (on the filesystem) for when webhooks aren't enough.
- Install Requirements, directory structures and installation from source.
- Restart GitLab Learn how to restart GitLab and its components.
- Integration How to integrate with systems such as JIRA, Redmine, Twitter.
- Issue closing Customize how to close an issue from commit messages.
- Libravatar Use Libravatar for user avatars.
- Log system Log system.
- Environment Variables to configure GitLab.
- Operations Keeping GitLab up and running.
- Raketasks Backups, maintenance, automatic webhook setup and the importing of projects.
- Repository checks Periodic Git repository checks.
- Repository storages Manage the paths used to store repositories.
- Security Learn what you can do to further secure your GitLab instance.
- System hooks Notifications when users, projects and keys are changed.
- Update Update guides to upgrade your installation.
- Welcome message Add a custom welcome message to the sign-in page.
- Reply by email Allow users to comment on issues and merge requests by replying to notification emails.
- Migrate GitLab CI to CE/EE Follow this guide to migrate your existing GitLab CI data to GitLab CE/EE.
- Git LFS configuration
- Housekeeping Keep your Git repository tidy and fast.
- GitLab Performance Monitoring Configure GitLab and InfluxDB for measuring performance metrics.
- Monitoring uptime Check the server status using the health check endpoint.
- Debugging Tips Tips to debug problems when things go wrong
- Sidekiq Troubleshooting Debug when Sidekiq appears hung and is not processing jobs.
- High Availability Configure multiple servers for scaling or high availability.
- Container Registry Configure Docker Registry with GitLab.
Contributor documentation
- Documentation styleguide Use this styleguide if you are contributing to documentation.
- Development Explains the architecture and the guidelines for shell commands.
- Legal Contributor license agreements.