Commit 34480bb8 authored by Nick Thomas's avatar Nick Thomas

Backport CE to changes to support group-level file templates

When the feature is available, this setting allows admins to choose a
project as a source of custom file templates. This is in addition to
any instance-wide templates, whether custom or vendored into the GitLab
codebase.
parent 57b4884e
...@@ -5,6 +5,7 @@ import initSettingsPanels from '~/settings_panels'; ...@@ -5,6 +5,7 @@ import initSettingsPanels from '~/settings_panels';
import dirtySubmitFactory from '~/dirty_submit/dirty_submit_factory'; import dirtySubmitFactory from '~/dirty_submit/dirty_submit_factory';
import mountBadgeSettings from '~/pages/shared/mount_badge_settings'; import mountBadgeSettings from '~/pages/shared/mount_badge_settings';
import { GROUP_BADGE } from '~/badges/constants'; import { GROUP_BADGE } from '~/badges/constants';
import projectSelect from '~/project_select';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
groupAvatar(); groupAvatar();
...@@ -15,4 +16,6 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -15,4 +16,6 @@ document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('.js-general-settings-form, .js-general-permissions-form'), document.querySelectorAll('.js-general-settings-form, .js-general-permissions-form'),
); );
mountBadgeSettings(GROUP_BADGE); mountBadgeSettings(GROUP_BADGE);
projectSelect();
}); });
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
.settings-content .settings-content
= render 'shared/badges/badge_settings' = render 'shared/badges/badge_settings'
= render_if_exists 'groups/templates_setting', expanded: expanded
%section.settings.gs-advanced.no-animate#js-advanced-settings{ class: ('expanded' if expanded) } %section.settings.gs-advanced.no-animate#js-advanced-settings{ class: ('expanded' if expanded) }
.settings-header .settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' } %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only{ role: 'button' }
......
...@@ -37,6 +37,7 @@ GET /groups ...@@ -37,6 +37,7 @@ GET /groups
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Foobar Group", "full_name": "Foobar Group",
"full_path": "foo-bar", "full_path": "foo-bar",
"file_template_project_id": 1,
"parent_id": null "parent_id": null
} }
] ]
...@@ -62,6 +63,7 @@ GET /groups?statistics=true ...@@ -62,6 +63,7 @@ GET /groups?statistics=true
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Foobar Group", "full_name": "Foobar Group",
"full_path": "foo-bar", "full_path": "foo-bar",
"file_template_project_id": 1,
"parent_id": null, "parent_id": null,
"statistics": { "statistics": {
"storage_size" : 212, "storage_size" : 212,
...@@ -122,6 +124,7 @@ GET /groups/:id/subgroups ...@@ -122,6 +124,7 @@ GET /groups/:id/subgroups
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Foobar Group", "full_name": "Foobar Group",
"full_path": "foo-bar", "full_path": "foo-bar",
"file_template_project_id": 1,
"parent_id": 123 "parent_id": 123
} }
] ]
...@@ -232,6 +235,7 @@ Example response: ...@@ -232,6 +235,7 @@ Example response:
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Twitter", "full_name": "Twitter",
"full_path": "twitter", "full_path": "twitter",
"file_template_project_id": 1,
"parent_id": null, "parent_id": null,
"projects": [ "projects": [
{ {
...@@ -386,6 +390,7 @@ Example response: ...@@ -386,6 +390,7 @@ Example response:
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Twitter", "full_name": "Twitter",
"full_path": "twitter", "full_path": "twitter",
"file_template_project_id": 1,
"parent_id": null "parent_id": null
} }
``` ```
...@@ -442,6 +447,7 @@ PUT /groups/:id ...@@ -442,6 +447,7 @@ PUT /groups/:id
| `visibility` | string | no | The visibility level of the group. Can be `private`, `internal`, or `public`. | | `visibility` | string | no | The visibility level of the group. Can be `private`, `internal`, or `public`. |
| `lfs_enabled` (optional) | boolean | no | Enable/disable Large File Storage (LFS) for the projects in this group | | `lfs_enabled` (optional) | boolean | no | Enable/disable Large File Storage (LFS) for the projects in this group |
| `request_access_enabled` | boolean | no | Allow users to request member access. | | `request_access_enabled` | boolean | no | Allow users to request member access. |
| `file_template_project_id` | integer | no | **(Premium)** The ID of a project to load custom file templates from |
```bash ```bash
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/groups/5?name=Experimental" curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v4/groups/5?name=Experimental"
...@@ -462,6 +468,7 @@ Example response: ...@@ -462,6 +468,7 @@ Example response:
"request_access_enabled": false, "request_access_enabled": false,
"full_name": "Foobar Group", "full_name": "Foobar Group",
"full_path": "foo-bar", "full_path": "foo-bar",
"file_template_project_id": 1,
"parent_id": null, "parent_id": null,
"projects": [ "projects": [
{ {
......
# Project templates API # Project templates API
This API is a project-specific implementation of these endpoints: This API is a project-specific version of these endpoints:
- [Dockerfile templates](templates/dockerfiles.md) - [Dockerfile templates](templates/dockerfiles.md)
- [Gitignore templates](templates/gitignores.md) - [Gitignore templates](templates/gitignores.md)
- [GitLab CI Config templates](templates/gitlab_ci_ymls.md) - [GitLab CI Config templates](templates/gitlab_ci_ymls.md)
- [Open source license templates](templates/licenses.md) - [Open source license templates](templates/licenses.md)
It deprecates those endpoints, which will be removed for API version 5. It deprecates these endpoints, which will be removed for API version 5.
Project-specific templates will be added to this API in time. This includes, but In addition to templates common to the entire instance, project-specific
is not limited to: templates are also available from this API endpoint.
- [Issue and Merge Request templates](../user/project/description_templates.html) Support will be added for [Issue and Merge Request templates](../user/project/description_templates.md)
- [Group level file templates](https://gitlab.com/gitlab-org/gitlab-ee/issues/5987) **(Premium)** in a future release.
Support for [Group-level file templates](../user/group/index.md#group-level-file-templates-premium)
**[PREMIUM]** was [added](https://gitlab.com/gitlab-org/gitlab-ee/issues/5987)
in GitLab 11.5
## Get all templates of a particular type ## Get all templates of a particular type
......
...@@ -252,6 +252,13 @@ level of members in group. ...@@ -252,6 +252,13 @@ level of members in group.
Learn more about [Member Lock](https://docs.gitlab.com/ee/user/group/index.html#member-lock). Learn more about [Member Lock](https://docs.gitlab.com/ee/user/group/index.html#member-lock).
#### Group-level file templates **[PREMIUM]**
Group-level file templates allow you to share a set of templates for common file
types with every project in a group.
Learn more about [Group-level file templates](https://docs.gitlab.com/ee/user/group/index.html#group-level-file-templates-premium).
### Advanced settings ### Advanced settings
- **Projects**: view all projects within that group, add members to each project, - **Projects**: view all projects within that group, add members to each project,
......
module Gitlab module Gitlab
module Template module Template
class BaseTemplate class BaseTemplate
attr_reader :category attr_accessor :category
def initialize(path, project = nil, category: nil) def initialize(path, project = nil, category: nil)
@path = path @path = path
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment