diff options
author | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2017-10-05 20:53:24 +0200 |
---|---|---|
committer | Alexis Reigel <alexis.reigel.ext@siemens.com> | 2018-02-28 09:50:51 +0100 |
commit | 66353d22385115753aa16c30a5bcd0942fbaca52 (patch) | |
tree | 74be947736d32ebeb3332a7b2088b2ae0b013c06 | |
parent | 5f59ff0aff75ebe9586a91e921fc5e4f09ae4b34 (diff) | |
download | gitlab-ce-66353d22385115753aa16c30a5bcd0942fbaca52.tar.gz |
support group hierarchies for group runners
-rw-r--r-- | app/models/ci/runner.rb | 11 | ||||
-rw-r--r-- | spec/models/ci/runner_spec.rb | 9 |
2 files changed, 13 insertions, 7 deletions
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index dde0602dfbc..1b9c2f70a84 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -30,13 +30,10 @@ module Ci joins(:runner_projects).where(ci_runner_projects: { project_id: project_id }) } scope :belonging_to_group, -> (project_id) { - joins( - %{ - INNER JOIN ci_runner_groups ON ci_runner_groups.runner_id = ci_runners.id - INNER JOIN namespaces ON namespaces.id = ci_runner_groups.group_id - INNER JOIN projects ON projects.namespace_id = namespaces.id - } - ).where('projects.id = :project_id', project_id: project_id) + project_groups = Group.joins(:projects).where(projects: { id: project_id }) + hierarchy_groups = Gitlab::GroupHierarchy.new(project_groups).base_and_ancestors + + joins(:groups).where(namespaces: { id: hierarchy_groups }) } scope :owned_or_shared, -> (project_id) do diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index 1456c44dbf6..ba0db43a1e7 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -93,6 +93,15 @@ describe Ci::Runner do expect(described_class.belonging_to_group(specific_project.id)).to eq [specific_runner] end + + it 'returns the group runner from a parent group' do + parent_group = create :group + group = create :group, parent: parent_group + project = create :project, group: group + runner = create :ci_runner, :specific, groups: [parent_group] + + expect(described_class.belonging_to_group(project.id)).to eq [runner] + end end describe '.owned_or_shared' do |