Commit 49ac9081 authored by Robert Speicher's avatar Robert Speicher Committed by Robert Speicher

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

Fix visibility of specific runners

See merge request !1688
parent 4b40dae3
Please view this file on the master branch, on stable branches it's out of date. Please view this file on the master branch, on stable branches it's out of date.
v 8.2.0 (unreleased)
- Improved performance of replacing references in comments
- Show last project commit to default branch on project home page
- Highlight comment based on anchor in URL
- Adds ability to remove the forked relationship from project settings screen. (Han Loong Liauw)
- Improved performance of sorting milestone issues
- Allow users to select the Files view as default project view (Cristian Bica)
- Show "Empty Repository Page" for repository without branches (Artem V. Navrotskiy)
- Fix: Inability to reply to code comments in the MR view, if the MR comes from a fork
v 8.1.1 v 8.1.1
- Fix cloning Wiki repositories via HTTP (Stan Hu) - Fix cloning Wiki repositories via HTTP (Stan Hu)
- Add migration to remove satellites directory - Add migration to remove satellites directory
- Fix specific runners visibility
v 8.1.0 v 8.1.0
- Ensure MySQL CI limits DB migrations occur after the fields have been created (Stan Hu) - Ensure MySQL CI limits DB migrations occur after the fields have been created (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
...@@ -765,11 +767,14 @@ class User < ActiveRecord::Base ...@@ -765,11 +767,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