diff options
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | app/services/register_build_service.rb | 12 | ||||
-rw-r--r-- | spec/requests/api/builds_spec.rb | 2 | ||||
-rw-r--r-- | spec/services/register_build_service_spec.rb | 31 |
4 files changed, 39 insertions, 9 deletions
@@ -1,3 +1,6 @@ +v7.12.1 + - Runner without tag should pick builds without tag only + v7.12.0 - Endless scroll on the dashboard - Add notification if there are no runners diff --git a/app/services/register_build_service.rb b/app/services/register_build_service.rb index e0f1659..b15e762 100644 --- a/app/services/register_build_service.rb +++ b/app/services/register_build_service.rb @@ -15,14 +15,10 @@ class RegisterBuildService builds = builds.order('created_at ASC') - build = - if current_runner.tag_list.present? - builds.find do |build| - (build.tag_list - current_runner.tag_list).empty? - end - else - builds.first - end + build = builds.find do |build| + (build.tag_list - current_runner.tag_list).empty? + end + if build # In case when 2 runners try to assign the same build, second runner will be declined diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb index 1fece31..64d00bf 100644 --- a/spec/requests/api/builds_spec.rb +++ b/spec/requests/api/builds_spec.rb @@ -3,7 +3,7 @@ require 'spec_helper' describe API::API do include ApiHelpers - let(:runner) { FactoryGirl.create(:runner) } + let(:runner) { FactoryGirl.create(:runner, tag_list: ["mysql", "ruby"]) } let(:project) { FactoryGirl.create(:project) } describe "Builds API for runners" do diff --git a/spec/services/register_build_service_spec.rb b/spec/services/register_build_service_spec.rb index 1407346..b5af777 100644 --- a/spec/services/register_build_service_spec.rb +++ b/spec/services/register_build_service_spec.rb @@ -13,6 +13,37 @@ describe RegisterBuildService do end describe :execute do + context 'runner follow tag list' do + it "picks build with the same tag" do + pending_build.tag_list = ["linux"] + pending_build.save + specific_runner.tag_list = ["linux"] + service.execute(specific_runner).should == pending_build + end + + it "does not pick build with different tag" do + pending_build.tag_list = ["linux"] + pending_build.save + specific_runner.tag_list = ["win32"] + service.execute(specific_runner).should be_false + end + + it "picks build without tag" do + service.execute(specific_runner).should == pending_build + end + + it "does not pick build with tag" do + pending_build.tag_list = ["linux"] + pending_build.save + service.execute(specific_runner).should be_false + end + + it "pick build without tag" do + specific_runner.tag_list = ["win32"] + service.execute(specific_runner).should == pending_build + end + end + context 'allow shared runners' do before do project.shared_runners_enabled = true |