Commit 1ae65b22 authored by Robert Speicher's avatar Robert Speicher

Merge branch 'fix-specific-runner-visibility' into 'master'

Fix visibility of specific runners

See merge request !1688
parents bf30332e 6db01498
...@@ -27,6 +27,7 @@ v 8.1.0 ...@@ -27,6 +27,7 @@ v 8.1.0
- Speed up load times of issue detail pages by roughly 1.5x - Speed up load times of issue detail pages by roughly 1.5x
- Require CI jobs to be named - Require CI jobs to be named
- Fix CI rendering regressions - Fix CI rendering regressions
- Fix specific runners visibility
- Allow developer to manage builds - Allow developer to manage builds
- If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg) - If a merge request is to close an issue, show this on the issue page (Zeger-Jan van de Weg)
- Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu) - Add a system note and update relevant merge requests when a branch is deleted or re-added (Stan Hu)
......
...@@ -6,11 +6,10 @@ class Projects::RunnersController < Projects::ApplicationController ...@@ -6,11 +6,10 @@ class Projects::RunnersController < Projects::ApplicationController
layout 'project_settings' layout 'project_settings'
def index def index
@runners = @ci_project.runners.order('id DESC') @runners = @ci_project.runners.ordered
@specific_runners = @specific_runners = current_user.ci_authorized_runners.
Ci::Runner.specific.includes(:runner_projects). where.not(id: @ci_project.runners).
where(Ci::RunnerProject.table_name => { project_id: current_user.authorized_projects } ). ordered.page(params[:page]).per(20)
where.not(id: @runners).order("#{Ci::Runner.table_name}.id DESC").page(params[:page]).per(20)
@shared_runners = Ci::Runner.shared.active @shared_runners = Ci::Runner.shared.active
@shared_runners_count = @shared_runners.count(:all) @shared_runners_count = @shared_runners.count(:all)
end end
......
...@@ -36,6 +36,7 @@ module Ci ...@@ -36,6 +36,7 @@ module Ci
scope :active, ->() { where(active: true) } scope :active, ->() { where(active: true) }
scope :paused, ->() { where(active: false) } scope :paused, ->() { where(active: false) }
scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) } scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) }
scope :ordered, ->() { order(id: :desc) }
acts_as_taggable acts_as_taggable
......
...@@ -401,15 +401,17 @@ class User < ActiveRecord::Base ...@@ -401,15 +401,17 @@ class User < ActiveRecord::Base
end end
end end
def authorized_projects_id
@authorized_projects_id ||= begin
project_ids = personal_projects.pluck(:id)
project_ids.push(*groups_projects.pluck(:id))
project_ids.push(*projects.pluck(:id).uniq)
end
end
# Projects user has access to # Projects user has access to
def authorized_projects def authorized_projects
@authorized_projects ||= begin @authorized_projects ||= Project.where(id: authorized_projects_id)
project_ids = personal_projects.pluck(:id)
project_ids.push(*groups_projects.pluck(:id))
project_ids.push(*projects.pluck(:id).uniq)
Project.where(id: project_ids)
end
end end
def owned_projects def owned_projects
...@@ -768,11 +770,14 @@ class User < ActiveRecord::Base ...@@ -768,11 +770,14 @@ class User < ActiveRecord::Base
end end
def ci_authorized_projects def ci_authorized_projects
@ci_authorized_projects ||= Ci::Project.where(gitlab_id: authorized_projects) @ci_authorized_projects ||= Ci::Project.where(gitlab_id: authorized_projects_id)
end end
def ci_authorized_runners def ci_authorized_runners
Ci::Runner.specific.includes(:runner_projects). @ci_authorized_runners ||= begin
where(ci_runner_projects: { project_id: ci_authorized_projects } ) runner_ids = Ci::RunnerProject.joins(:project).
where(ci_projects: { gitlab_id: authorized_projects_id }).select(:runner_id)
Ci::Runner.specific.where(id: runner_ids)
end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment