Commit 9c230180 authored by Valery Sizov's avatar Valery Sizov

CI project forking

parent 0d0042d2
...@@ -59,6 +59,26 @@ class GitlabCiService < CiService ...@@ -59,6 +59,26 @@ class GitlabCiService < CiService
end end
end end
def register_fork(new_project, user_token)
params = {
id: new_project.id,
name_with_namespace: new_project.name_with_namespace,
web_url: new_project.web_url,
default_branch: new_project.default_branch,
ssh_url_to_repo: new_project.ssh_url_to_repo
}
HTTParty.post(
register_fork_path,
body: {
project_id: project.id,
project_token: token,
user_token: user_token,
data: params.to_yaml},
verify: false
)
end
def commit_coverage(sha, ref) def commit_coverage(sha, ref)
response = get_ci_build(sha, ref) response = get_ci_build(sha, ref)
...@@ -75,6 +95,10 @@ class GitlabCiService < CiService ...@@ -75,6 +95,10 @@ class GitlabCiService < CiService
project_url + "?ref=" + project.default_branch project_url + "?ref=" + project.default_branch
end end
def register_fork_path
project_url.sub(/projects\/\d*/, 'api/v1/forks')
end
def status_img_path def status_img_path
project_url + "/status.png?ref=" + project.default_branch project_url + "/status.png?ref=" + project.default_branch
end end
......
...@@ -40,12 +40,18 @@ module Projects ...@@ -40,12 +40,18 @@ module Projects
if project.save if project.save
project.team << [@current_user, :master] project.team << [@current_user, :master]
end end
#Now fork the repo #Now fork the repo
unless gitlab_shell.fork_repository(@from_project.path_with_namespace, project.namespace.path) unless gitlab_shell.fork_repository(@from_project.path_with_namespace, project.namespace.path)
raise 'forking failed in gitlab-shell' raise 'forking failed in gitlab-shell'
end end
project.ensure_satellite_exists project.ensure_satellite_exists
end end
if @from_project.gitlab_ci?
ForkRegistratorWorker.perform_async(@from_project.id, project.id, @current_user.private_token)
end
rescue => ex rescue => ex
project.errors.add(:base, 'Fork transaction failed.') project.errors.add(:base, 'Fork transaction failed.')
project.destroy project.destroy
......
class ForkRegistratorWorker
include Sidekiq::Worker
sidekiq_options queue: :default
def perform(from_project_id, to_project_id, private_token)
from_project = Project.find(from_project_id)
to_project = Project.find(to_project_id)
from_project.gitlab_ci_service.register_fork(to_project, private_token)
end
end
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