summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-03-25 21:25:06 +0000
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-03-25 21:25:06 +0000
commitaffcde15cc379350242bcc657ce19f5a75fca06b (patch)
tree0fcb5f077d74da68b0b81fe211b458e1582b6cf0
parentbdec2aae888628864f45bcc70ae7c9831bb32d22 (diff)
parent732bc1eb963cb61afea3bf75c0d1baf612a3ed71 (diff)
downloadgitlab-ci-affcde15cc379350242bcc657ce19f5a75fca06b.tar.gz
Merge branch 'respect-shared-runner-option' into 'master'
Repect project shared runners setting See merge request !47
-rw-r--r--CHANGELOG1
-rw-r--r--app/models/build.rb1
-rw-r--r--app/services/register_build_service.rb5
-rw-r--r--spec/services/register_build_service_spec.rb35
4 files changed, 39 insertions, 3 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 859d271..0a1996b 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,7 @@ v7.10.0
v7.9.1
- [Security] Adding explicit is_shared parameter to runner
+ - [Security] By default new projects are not served by shared runners
v7.9.0
- Reset user session if token is invalid
diff --git a/app/models/build.rb b/app/models/build.rb
index 2cdee83..0cecc19 100644
--- a/app/models/build.rb
+++ b/app/models/build.rb
@@ -26,6 +26,7 @@ class Build < ActiveRecord::Base
LAZY_ATTRIBUTES = ['trace']
belongs_to :commit
+ belongs_to :project
belongs_to :runner
belongs_to :job
diff --git a/app/services/register_build_service.rb b/app/services/register_build_service.rb
index 3170fc1..cbb9b5f 100644
--- a/app/services/register_build_service.rb
+++ b/app/services/register_build_service.rb
@@ -6,9 +6,8 @@ class RegisterBuildService
builds =
if current_runner.shared?
- # don't run projects which are assigned to specific runners
- projects = RunnerProject.pluck(:project_id)
- builds.where.not(project_id: projects)
+ # don't run projects which have not enables shared runners
+ builds.includes(:project).where(projects: { shared_runners_enabled: true })
else
# do run projects which are only assigned to this runner
builds.where(project_id: current_runner.projects)
diff --git a/spec/services/register_build_service_spec.rb b/spec/services/register_build_service_spec.rb
new file mode 100644
index 0000000..7ac9542
--- /dev/null
+++ b/spec/services/register_build_service_spec.rb
@@ -0,0 +1,35 @@
+require 'spec_helper'
+
+describe RegisterBuildService do
+ let!(:service) { RegisterBuildService.new }
+ let!(:project) { FactoryGirl.create :project }
+ let!(:job) { FactoryGirl.create :job, project: project }
+ let!(:commit) { FactoryGirl.create :commit, project: project }
+ let!(:pending_build) { commit.create_build_from_job(job) }
+
+ describe :execute do
+ describe 'shared runner' do
+ let(:runner) { FactoryGirl.create(:runner, is_shared: true) }
+
+ context 'allow shared runners' do
+ before do
+ project.shared_runners_enabled = true
+ project.save
+ end
+
+ let(:build) { service.execute(runner) }
+
+ it { build.should be_kind_of(Build) }
+ it { build.should be_valid }
+ it { build.should be_running }
+ it { build.runner.should == runner }
+ end
+
+ context 'disallow shared runners' do
+ let(:build) { service.execute(runner) }
+
+ it { build.should be_nil }
+ end
+ end
+ end
+end