summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/pages/settings.scss16
-rw-r--r--app/controllers/projects_controller.rb1
-rw-r--r--app/services/projects/create_service.rb16
-rw-r--r--app/views/projects/_new_project_fields.html.haml10
-rw-r--r--changelogs/unreleased/19468-add_readme_when_creating_project.yml5
-rw-r--r--spec/features/projects/new_project_spec.rb9
-rw-r--r--spec/services/projects/create_service_spec.rb12
7 files changed, 68 insertions, 1 deletions
diff --git a/app/assets/stylesheets/pages/settings.scss b/app/assets/stylesheets/pages/settings.scss
index e264b06c4b2..839ac5ba59b 100644
--- a/app/assets/stylesheets/pages/settings.scss
+++ b/app/assets/stylesheets/pages/settings.scss
@@ -191,6 +191,22 @@
}
}
+.initialize-with-readme-setting {
+ .form-check {
+ margin-bottom: 10px;
+
+ .option-title {
+ font-weight: $gl-font-weight-normal;
+ display: inline-block;
+ color: $gl-text-color;
+ }
+
+ .option-description {
+ color: $project-option-descr-color;
+ }
+ }
+}
+
.prometheus-metrics-monitoring {
.card {
.card-toggle {
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index c2492a137fb..ec3a5788ba1 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -347,6 +347,7 @@ class ProjectsController < Projects::ApplicationController
:visibility_level,
:template_name,
:merge_method,
+ :initialize_with_readme,
project_feature_attributes: %i[
builds_access_level
diff --git a/app/services/projects/create_service.rb b/app/services/projects/create_service.rb
index a02a9052fb2..172497b8e67 100644
--- a/app/services/projects/create_service.rb
+++ b/app/services/projects/create_service.rb
@@ -2,6 +2,8 @@ module Projects
class CreateService < BaseService
def initialize(user, params)
@current_user, @params = user, params.dup
+ @skip_wiki = @params.delete(:skip_wiki)
+ @initialize_with_readme = Gitlab::Utils.to_boolean(@params.delete(:initialize_with_readme))
end
def execute
@@ -11,7 +13,6 @@ module Projects
forked_from_project_id = params.delete(:forked_from_project_id)
import_data = params.delete(:import_data)
- @skip_wiki = params.delete(:skip_wiki)
@project = Project.new(params)
@@ -102,6 +103,8 @@ module Projects
setup_authorizations
current_user.invalidate_personal_projects_count
+
+ create_readme if @initialize_with_readme
end
# Refresh the current user's authorizations inline (so they can access the
@@ -116,6 +119,17 @@ module Projects
end
end
+ def create_readme
+ commit_attrs = {
+ branch_name: 'master',
+ commit_message: 'Initial commit',
+ file_path: 'README.md',
+ file_content: "# #{@project.name}\n\n#{@project.description}"
+ }
+
+ Files::CreateService.new(@project, current_user, commit_attrs).execute
+ end
+
def skip_wiki?
!@project.feature_available?(:wiki, current_user) || @skip_wiki
end
diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml
index 6f957533287..f4994f5459b 100644
--- a/app/views/projects/_new_project_fields.html.haml
+++ b/app/views/projects/_new_project_fields.html.haml
@@ -40,5 +40,15 @@
= link_to icon('question-circle'), help_page_path("public_access/public_access"), aria: { label: 'Documentation for Visibility Level' }, target: '_blank', rel: 'noopener noreferrer'
= render 'shared/visibility_level', f: f, visibility_level: visibility_level.to_i, can_change_visibility_level: true, form_model: @project, with_label: false
+.form-group.row.initialize-with-readme-setting
+ %div{ :class => "col-sm-12" }
+ .form-check
+ = check_box_tag 'project[initialize_with_readme]', '1', false, class: 'form-check-input'
+ = label_tag 'project[initialize_with_readme]', class: 'form-check-label' do
+ .option-title
+ %strong Initialize repository with a README
+ .option-description
+ Allows you to immediately clone this project’s repository. Skip this if you plan to push up an existing repository.
+
= f.submit 'Create project', class: "btn btn-create project-submit", tabindex: 4
= link_to 'Cancel', dashboard_projects_path, class: 'btn btn-cancel'
diff --git a/changelogs/unreleased/19468-add_readme_when_creating_project.yml b/changelogs/unreleased/19468-add_readme_when_creating_project.yml
new file mode 100644
index 00000000000..f85fc773ef0
--- /dev/null
+++ b/changelogs/unreleased/19468-add_readme_when_creating_project.yml
@@ -0,0 +1,5 @@
+---
+title: Add option to add README when creating a project
+merge_request: 20335
+author:
+type: added
diff --git a/spec/features/projects/new_project_spec.rb b/spec/features/projects/new_project_spec.rb
index fee6287558e..3876e0cc3b1 100644
--- a/spec/features/projects/new_project_spec.rb
+++ b/spec/features/projects/new_project_spec.rb
@@ -48,6 +48,15 @@ feature 'New project' do
end
end
+ context 'Readme selector' do
+ it 'shows the initialize with Readme checkbox' do
+ visit new_project_path
+
+ expect(page).to have_css('input#project_initialize_with_readme')
+ expect(page).to have_content('Initialize repository with a README')
+ end
+ end
+
context 'Namespace selector' do
context 'with user namespace' do
before do
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index e8cbf84e3be..4e4329e898e 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -236,6 +236,18 @@ describe Projects::CreateService, '#execute' do
end
end
+ context 'when readme initialization is requested' do
+ it 'creates README.md' do
+ opts[:initialize_with_readme] = '1'
+
+ project = create_project(user, opts)
+
+ expect(project.repository.commit_count).to be(1)
+ expect(project.repository.readme.name).to eql('README.md')
+ expect(project.repository.readme.data).to include('# GitLab')
+ end
+ end
+
context 'when there is an active service template' do
before do
create(:service, project: nil, template: true, active: true)