blob: 7c0d4b40c6f5bde3cf46bbfaf44bb456a45b4c46 [file] [log] [blame] [view]
This plugin enforce a project group structure and restrict project creation
within this structure to project group owners only. Besides the rules the plugin
enforce for the project group structure, it also enforce other naming
rules like project name cannot contain spaces.
Below description of plugins functionality is not applicable if user is an
administrator. Administrators continue creating projects like this plugin does
not exist.
To start creating a project group structure, simply create a root project, i.e.
a project which inherits rights from `All-Projects`. The root project name
cannot contains slashes, e.g. `some-organization` and must be created with
option `Only serve as parent for other projects`.
Ownership of the root project is given automatically to the user who created it
by adding him to a group named `<root-project-name>-admins`, e.g.
`some-organization-admins` which is granted owner right on `refs/*` references.
From this point on, only the root project owners can create projects within that
structure. They can do it by creating projects that inherits rights from their
root project and the project names must start with root project name, e.g.
`some-organization/some-project`.
Delegating group
----------------
Project creation can also be delegated to non-owner users by configuring
`delegateProjectCreationTo` in the `project.config` of
`refs/meta/config` branch of the parent project.
The value of `delegateProjectCreationTo` must be set to a
[group reference](@URL@Documentation/dev-plugins.html#configuring-groups).
`project.config` file
```
[plugin "@PLUGIN@"]
delegateProjectCreationTo = group group_name
```
`groups` file
```
group_uuid group_name
```
The UUID of a group can be found on the "General" tab of the group's page.
If creating-project is delegated to built-in groups, e.g. "Registered Users"
group, then the value is as following:
`project.config` file
```
[plugin "@PLUGIN@"]
delegateProjectCreationTo = group Registered Users
```
`groups` file
```
global:Registered-Users Registered Users
```
A way to edit `project.config` and `groups` file is from Gerrit UI.
For example, to delegate project creation under `orgA` root project to
`orgA-project-creators` group:
- From main menu, click `People` -> `List Groups`
- Type `orgA-project-creators` as the filter then click on
`orgA-project-creators` group
- Copy the group UUID (example: 3d2bef3b667a577f2dd5232e0848c526efd11b1f)
- From main menu, click `Projects` -> `List`
- Type `orgA` as the filter then click on `orgA` project
- Click `Edit Config` button
- Add the following then click `Save` -> `Close`:
```
[plugin "@PLUGIN@"]
delegateProjectCreationTo = orgA-project-creators
```
- Click `Add...` button then type and open `groups` file
- Add the following then click `Save` -> `Close`:
```
3d2bef3b667a577f2dd5232e0848c526efd11b1f orgA-project-creators
```
- Click `Publish` button, review, vote and submit the change to apply new
configuration
Ownership of a project `<project-name>` created by delegated user is given
automatically to that user by adding him to a group named `<project-name>-admins`.
It is possible to disable granting the ownership by configuring
`disableGrantingProjectOwnership` in the `project.config` of
`refs/meta/config` branch of the parent project:
```
[plugin "@PLUGIN@"]
disableGrantingProjectOwnership = true
```