Summary
This task is for figuring out a policy for who can do what with projects under /repos/mediawiki on GitLab. /repos/mediawiki is the designated namespace group for MediaWiki core, extensions, skins, services, etc. It will be laid out approximately as described at mw.org/GitLab/Policy#MediaWiki_namespace:
repos/mediawiki/ โโโ [core] โโโ extensions/ โย ย โโโ [extension] โย ย โโโ ... โโโ [extensions-all] โโโ libs โย ย โโโ [library] โย ย โโโ ... โโโ services/ โย ย โโโ [service] โย ย โโโ ... โโโ skins/ โย ย โโโ [skin] โย ย โโโ ... โโโ [skins-all] โโโ tools/ โย ย โโโ [tool] โย ย โโโ ... โโโ [vendor]
This is intended to be broadly similar to the current layout in Gerrit, although some details will have to change. For example, while groups can contain both sub-groups and projects, a project cannot act as a container for other projects. Please do not bikeshed this part too hard.
We have a proof of concept for a bot that will assign GitLab group membership based on LDAP groups, and we also have the capability to import Gerrit groups for specific projects as they are migrated.
Draft policy
We've roughed out a model under mw.org/GitLab/Policy:
For reference, this uses the GitLab roles described at: https://docs.gitlab.com/ee/user/permissions.html
For repos/mediawiki:
- It seems like people can mostly be Developers.
- A smaller group of Maintainers can create repos and sub-groups than the overall set of Developers.
- main will be a protected branch
- Developers can:
- Merge to main via Merge Request
- Create new work branches (we will establish a convention for names, e.g. review/[username]/[topic], and likely enforce restrictions on this in code)
- Maintainers can
- Create new sub-groups and projects
- Push directly to protected branches (main, release branches?)
- Contributors who are not a member of projects can fork projects and submit merge requests for consideration
Questions
- What are we missing / forgetting?
- This should probably be explicit about group membership imported from LDAP groups.
- What other existing Gerrit configuration do we need to be sure to account for?
- Does this sound like it will work?