summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-23 16:36:49 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-09-23 16:36:49 +0000
commitb859506b031ac352d950de9b9fbdd84d70dd7544 (patch)
tree59a01c8b48d6d38551c687ef47e2e865f480e045
parent32cb9d215da731d4cbf481d2915c3b16989a076a (diff)
parent0a57c3f610433d0093ecc1f638fce339c4128abc (diff)
downloadgitlab-ce-b859506b031ac352d950de9b9fbdd84d70dd7544.tar.gz
Merge branch 'enable-ci-on-push' into 'master'
Enable CI for gitlab when .gitlab-ci.yml is pushed Make enabling CI as easy as pushing file. Should be merged after !1402. Fixes #2650. Part of #2594 and internal issue https://dev.gitlab.org/gitlab/gitlabhq/issues/2528 See merge request !1403
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/project.rb10
-rw-r--r--app/models/project_services/gitlab_ci_service.rb2
-rw-r--r--app/services/git_push_service.rb12
-rw-r--r--spec/models/project_spec.rb10
5 files changed, 34 insertions, 1 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 5fcb354ca81..db5ef402ad5 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date.
v 8.1.0 (unreleased)
- Show CI status on all pages where commits list is rendered
+ - Automatically enable CI when push .gitlab-ci.yml file to repository
v 8.0.1
- Improve CI migration procedure and documentation
diff --git a/app/models/project.rb b/app/models/project.rb
index 72120885105..a7ea1236b86 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -739,4 +739,14 @@ class Project < ActiveRecord::Base
def ci_commit(sha)
gitlab_ci_project.commits.find_by(sha: sha) if gitlab_ci?
end
+
+ def enable_ci(user)
+ # Enable service
+ service = gitlab_ci_service || create_gitlab_ci_service
+ service.active = true
+ service.save
+
+ # Create Ci::Project
+ Ci::CreateProjectService.new.execute(user, self)
+ end
end
diff --git a/app/models/project_services/gitlab_ci_service.rb b/app/models/project_services/gitlab_ci_service.rb
index 9e2b3bcd873..ec3bd44024f 100644
--- a/app/models/project_services/gitlab_ci_service.rb
+++ b/app/models/project_services/gitlab_ci_service.rb
@@ -72,7 +72,7 @@ class GitlabCiService < CiService
})
ci_project = Ci::Project.find_by!(gitlab_id: project.id)
-
+
Ci::CreateProjectService.new.execute(
current_user,
params,
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index 0a73244774a..8193b6e192d 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -55,6 +55,12 @@ class GitPushService
@push_data = build_push_data(oldrev, newrev, ref)
+ # If CI was disabled but .gitlab-ci.yml file was pushed
+ # we enable CI automatically
+ if !project.gitlab_ci? && gitlab_ci_yaml?(newrev)
+ project.enable_ci(user)
+ end
+
EventCreateService.new.push(project, user, @push_data)
project.execute_hooks(@push_data.dup, :push_hooks)
project.execute_services(@push_data.dup, :push_hooks)
@@ -143,4 +149,10 @@ class GitPushService
def commit_user(commit)
commit.author || user
end
+
+ def gitlab_ci_yaml?(sha)
+ @project.repository.blob_at(sha, '.gitlab-ci.yml')
+ rescue Rugged::ReferenceError
+ nil
+ end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index ba57e31f7fe..9e7b6f5cb30 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -411,4 +411,14 @@ describe Project do
it { expect(project.ci_commit(commit.sha)).to eq(commit) }
end
+
+ describe :enable_ci do
+ let(:project) { create :project }
+ let(:user) { create :user }
+
+ before { project.enable_ci(user) }
+
+ it { expect(project.gitlab_ci?).to be_truthy }
+ it { expect(project.gitlab_ci_project).to be_a(Ci::Project) }
+ end
end