From 585259f86bf0a38e55519bbcce4692c279e8a88e Mon Sep 17 00:00:00 2001 From: Valery Sizov Date: Mon, 22 Jun 2015 17:42:05 +0300 Subject: [PATCH] Build registering fix --- CHANGELOG | 3 ++ app/services/register_build_service.rb | 12 +++----- spec/requests/api/builds_spec.rb | 2 +- spec/services/register_build_service_spec.rb | 31 ++++++++++++++++++++ 4 files changed, 39 insertions(+), 9 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 8d417cb83..9d1378cde 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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 e0f1659cf..b15e76278 100644 --- a/app/services/register_build_service.rb +++ b/app/services/register_build_service.rb @@ -15,14 +15,10 @@ def execute(current_runner) 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 1fece31dc..64d00bfa8 100644 --- a/spec/requests/api/builds_spec.rb +++ b/spec/requests/api/builds_spec.rb @@ -3,7 +3,7 @@ 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 1407346b4..b5af777dd 100644 --- a/spec/services/register_build_service_spec.rb +++ b/spec/services/register_build_service_spec.rb @@ -13,6 +13,37 @@ 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