diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 77a2dec4f720f75e9f6236fa81a01e9b5b56cda9..6c9ce0dc4812ff0f2e892d12ea75d971389cab88 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -290,13 +290,15 @@ module Ci end def can_be_served?(runner) - if tag_list.empty? && !runner.run_untagged? - return false - end + return false unless has_tags? || runner.run_untagged? (tag_list - runner.tag_list).empty? end + def has_tags? + tag_list.any? + end + def any_runners_online? project.any_runners? { |runner| runner.active? && runner.online? && can_be_served?(runner) } end diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb index 5da54e07de827829dbf57ed4db971277dcb566b1..abae3271a5c860d26bc597a3fb8beccba3c6977a 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -309,6 +309,18 @@ describe Ci::Build, models: true do end end + describe '#has_tags?' do + context 'when build has tags' do + subject { create(:ci_build, tag_list: ['tag']) } + it { is_expected.to have_tags } + end + + context 'when build does not have tags' do + subject { create(:ci_build, tag_list: []) } + it { is_expected.to_not have_tags } + end + end + describe '#any_runners_online?' do subject { build.any_runners_online? }