summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2015-06-22 15:19:26 +0000
committerValery Sizov <valery@gitlab.com>2015-06-22 15:19:26 +0000
commitb46a15267cb3f6ca15a8bbfe040727638c18d7b1 (patch)
treebd727ae745b459be72d153819784ad549804e45e
parentfe7fea3bc8356c06730cab0fe4ce32bb96c3e33a (diff)
parent585259f86bf0a38e55519bbcce4692c279e8a88e (diff)
downloadgitlab-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--CHANGELOG3
-rw-r--r--app/services/register_build_service.rb12
-rw-r--r--spec/requests/api/builds_spec.rb2
-rw-r--r--spec/services/register_build_service_spec.rb31
4 files changed, 39 insertions, 9 deletions
diff --git a/CHANGELOG b/CHANGELOG
index 8d417cb..9d1378c 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 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