diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-03-25 21:25:06 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-03-25 21:25:06 +0000 |
commit | affcde15cc379350242bcc657ce19f5a75fca06b (patch) | |
tree | 0fcb5f077d74da68b0b81fe211b458e1582b6cf0 | |
parent | bdec2aae888628864f45bcc70ae7c9831bb32d22 (diff) | |
parent | 732bc1eb963cb61afea3bf75c0d1baf612a3ed71 (diff) | |
download | gitlab-ci-affcde15cc379350242bcc657ce19f5a75fca06b.tar.gz |
Merge branch 'respect-shared-runner-option' into 'master'
Repect project shared runners setting
See merge request !47
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/models/build.rb | 1 | ||||
-rw-r--r-- | app/services/register_build_service.rb | 5 | ||||
-rw-r--r-- | spec/services/register_build_service_spec.rb | 35 |
4 files changed, 39 insertions, 3 deletions
@@ -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 |