summaryrefslogtreecommitdiff
path: root/app/services/ci/create_project_service.rb
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-08-25 18:42:46 -0700
committerDouwe Maan <douwe@gitlab.com>2015-08-25 18:42:46 -0700
commit046b28312704f3131e72dcd2dbdacc5264d4aa62 (patch)
treea8c2b14a6e1db3b662fee2c79af70d9fcb643c2e /app/services/ci/create_project_service.rb
parente449426a4e7d15cdd582d4f136add52cbfb5e04e (diff)
downloadgitlab-ce-046b28312704f3131e72dcd2dbdacc5264d4aa62.tar.gz
Groundwork for merging CI into CE
Diffstat (limited to 'app/services/ci/create_project_service.rb')
-rw-r--r--app/services/ci/create_project_service.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/services/ci/create_project_service.rb b/app/services/ci/create_project_service.rb
new file mode 100644
index 00000000000..049ac2e9181
--- /dev/null
+++ b/app/services/ci/create_project_service.rb
@@ -0,0 +1,35 @@
+module Ci
+ class CreateProjectService
+ include Gitlab::Application.routes.url_helpers
+
+ def execute(current_user, params, project_route, forked_project = nil)
+ @project = Ci::Project.parse(params)
+
+ Ci::Project.transaction do
+ @project.save!
+
+ data = {
+ token: @project.token,
+ project_url: project_route.gsub(":project_id", @project.id.to_s),
+ }
+
+ unless Ci::Network.new.enable_ci(@project.gitlab_id, data, current_user.authenticate_options)
+ raise ActiveRecord::Rollback
+ end
+ end
+
+ if forked_project
+ # Copy settings
+ settings = forked_project.attributes.select do |attr_name, value|
+ ["public", "shared_runners_enabled", "allow_git_fetch"].include? attr_name
+ end
+
+ @project.update(settings)
+ end
+
+ Ci::EventService.new.create_project(current_user, @project)
+
+ @project
+ end
+ end
+end