diff options
author | Valery Sizov <valery@gitlab.com> | 2015-06-22 15:19:26 +0000 |
---|---|---|
committer | Valery Sizov <valery@gitlab.com> | 2015-06-22 15:19:26 +0000 |
commit | b46a15267cb3f6ca15a8bbfe040727638c18d7b1 (patch) | |
tree | bd727ae745b459be72d153819784ad549804e45e | |
parent | fe7fea3bc8356c06730cab0fe4ce32bb96c3e33a (diff) | |
parent | 585259f86bf0a38e55519bbcce4692c279e8a88e (diff) | |
download | gitlab-ci-b46a15267cb3f6ca15a8bbfe040727638c18d7b1.tar.gz |
Merge branch 'runner_tags_fix' into 'master'
Runner without tag should pick builds without tag only
https://dev.gitlab.org/gitlab/gitlab-ci/issues/278
https://gitlab.com/gitlab-org/gitlab-ci/issues/148
https://gitlab.com/gitlab-org/gitlab-ci/issues/172
See merge request !155
-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 |