diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb index c950d0f7001..87c19eeed3e 100644 --- a/app/controllers/projects/runners_controller.rb +++ b/app/controllers/projects/runners_controller.rb @@ -52,6 +52,12 @@ class Projects::RunnersController < Projects::ApplicationController redirect_to project_settings_ci_cd_path(@project) end + def toggle_group_runners + project.toggle!(:group_runners_enabled) + + redirect_to project_settings_ci_cd_path(@project) + end + protected def set_runner diff --git a/app/views/projects/runners/_group_runners.html.haml b/app/views/projects/runners/_group_runners.html.haml index dbdfda740e3..785abba945b 100644 --- a/app/views/projects/runners/_group_runners.html.haml +++ b/app/views/projects/runners/_group_runners.html.haml @@ -4,6 +4,16 @@ 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 + %hr + - if @project.group_runners_enabled? + = link_to toggle_group_runners_project_runners_path(@project), class: 'btn btn-warning', method: :post do + Disable group Runners + - else + = link_to toggle_group_runners_project_runners_path(@project), class: 'btn btn-success', method: :post do + Enable group Runners +   for this project + - if !@project.group This project does not belong to a group and can therefore not make use of group Runners. diff --git a/config/routes/project.rb b/config/routes/project.rb index 2a1bcb8cde2..382d5b1e3c7 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -410,6 +410,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do collection do post :toggle_shared_runners + post :toggle_group_runners end end diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index f34aeb5bd5e..dcd06a4015d 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -219,6 +219,20 @@ feature 'Runners' do expect(page).to have_content 'Available group Runners : 1' expect(page).to have_content 'group-runner' end + + scenario 'group runners may be disabled for a project' do + visit runners_path(project) + + click_on 'Disable group Runners' + + expect(page).to have_content 'Enable group Runners' + expect(project.reload.group_runners_enabled).to be false + + click_on 'Enable group Runners' + + expect(page).to have_content 'Disable group Runners' + expect(project.reload.group_runners_enabled).to be true + end end end end