summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexis Reigel <alexis.reigel.ext@siemens.com>2017-10-04 13:59:51 +0200
committerAlexis Reigel <alexis.reigel.ext@siemens.com>2018-04-23 09:21:47 +0200
commit4ccf734e380d498a2322153c9a4fa09a38447094 (patch)
tree8f88ec36cd788160f79f0ec6b830ee4165ced5ba
parenteba1a05f153335cb41bbf9396c7e88336a6b6be5 (diff)
downloadgitlab-ce-4ccf734e380d498a2322153c9a4fa09a38447094.tar.gz
show group runners on runners page
-rw-r--r--app/controllers/projects/settings/ci_cd_controller.rb4
-rw-r--r--app/views/projects/runners/_group_runners.html.haml19
-rw-r--r--app/views/projects/runners/_index.html.haml4
-rw-r--r--app/views/projects/runners/_runner.html.haml2
-rw-r--r--spec/features/runners_spec.rb40
5 files changed, 68 insertions, 1 deletions
diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb
index d80ef8113aa..05d545e97a7 100644
--- a/app/controllers/projects/settings/ci_cd_controller.rb
+++ b/app/controllers/projects/settings/ci_cd_controller.rb
@@ -67,10 +67,14 @@ module Projects
def define_runners_variables
@project_runners = @project.runners.ordered
+
@assignable_runners = current_user.ci_authorized_runners
.assignable_for(project).ordered.page(params[:page]).per(20)
@shared_runners = ::Ci::Runner.shared.active
+
@shared_runners_count = @shared_runners.count(:all)
+
+ @group_runners = ::Ci::Runner.belonging_to_group(@project.id)
end
def define_secret_variables
diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml
new file mode 100644
index 00000000000..dbdfda740e3
--- /dev/null
+++ b/app/views/projects/runners/_group_runners.html.haml
@@ -0,0 +1,19 @@
+%h3 Group Runners
+
+.bs-callout.bs-callout-warning
+ GitLab Group Runners can execute code for all the projects in this group.
+ They can be managed using the #{link_to 'Runners API', help_page_path('api/runners.md')}.
+
+- if !@project.group
+ This project does not belong to a group and can therefore not make use of group Runners.
+
+- elsif @group_runners.empty?
+ This group does not provide any group Runners yet.
+
+ = render partial: 'ci/runner/how_to_setup_runner',
+ locals: { registration_token: @project.group.runners_token, type: 'group' }
+
+- else
+ %h4.underlined-title Available group Runners : #{@group_runners.count}
+ %ul.bordered-list
+ = render partial: 'projects/runners/runner', collection: @group_runners, as: :runner
diff --git a/app/views/projects/runners/_index.html.haml b/app/views/projects/runners/_index.html.haml
index f9808f7c990..3f5119d408b 100644
--- a/app/views/projects/runners/_index.html.haml
+++ b/app/views/projects/runners/_index.html.haml
@@ -23,3 +23,7 @@
= render 'projects/runners/specific_runners'
.col-sm-6
= render 'projects/runners/shared_runners'
+.row
+ .col-sm-6
+ .col-sm-6
+ = render 'projects/runners/group_runners'
diff --git a/app/views/projects/runners/_runner.html.haml b/app/views/projects/runners/_runner.html.haml
index 6376496ee1a..6d61da40f5b 100644
--- a/app/views/projects/runners/_runner.html.haml
+++ b/app/views/projects/runners/_runner.html.haml
@@ -26,7 +26,7 @@
- else
- runner_project = @project.runner_projects.find_by(runner_id: runner)
= link_to 'Disable for this project', project_runner_project_path(@project, runner_project), data: { confirm: "Are you sure?" }, method: :delete, class: 'btn btn-danger btn-sm'
- - elsif runner.specific?
+ - elsif runner.project?
= form_for [@project.namespace.becomes(Namespace), @project, @project.runner_projects.new] do |f|
= f.hidden_field :runner_id, value: runner.id
= f.submit 'Enable for this project', class: 'btn btn-sm'
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index df65c2d2f83..f34aeb5bd5e 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -181,4 +181,44 @@ feature 'Runners' do
expect(page.find('.shared-runners-description')).to have_content('Disable shared Runners')
end
end
+
+ context 'group runners' do
+ background do
+ project.add_master(user)
+ end
+
+ context 'project without a group' do
+ given(:project) { create :project }
+
+ scenario 'group runners are not available' do
+ visit runners_path(project)
+
+ expect(page).to have_content 'This project does not belong to a group and can therefore not make use of group Runners.'
+ end
+ end
+
+ context 'project with a group but no group runner' do
+ given(:group) { create :group }
+ given(:project) { create :project, group: group }
+
+ scenario 'group runners are not available' do
+ visit runners_path(project)
+
+ expect(page).to have_content 'This group does not provide any group Runners yet.'
+ end
+ end
+
+ context 'project with a group and a group runner' do
+ given(:group) { create :group }
+ given(:project) { create :project, group: group }
+ given!(:ci_runner) { create :ci_runner, groups: [group], description: 'group-runner' }
+
+ scenario 'group runners are available' do
+ visit runners_path(project)
+
+ expect(page).to have_content 'Available group Runners : 1'
+ expect(page).to have_content 'group-runner'
+ end
+ end
+ end
end