2018-12-05 23:21:45 +05:30
|
|
|
- breadcrumb_title _('Runners')
|
2016-06-22 15:30:34 +05:30
|
|
|
- @no_container = true
|
2015-12-23 02:04:40 +05:30
|
|
|
|
2016-08-24 12:49:21 +05:30
|
|
|
%div{ class: container_class }
|
2018-12-05 23:21:45 +05:30
|
|
|
.row
|
|
|
|
.col-sm-6
|
|
|
|
.bs-callout
|
|
|
|
%p
|
|
|
|
= (_"A 'Runner' is a process which runs a job. You can set up as many Runners as you need.")
|
|
|
|
%br
|
|
|
|
= _('Runners can be placed on separate users, servers, even on your local machine.')
|
|
|
|
%br
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
%div
|
|
|
|
%span= _('Each Runner can be in one of the following states:')
|
|
|
|
%ul
|
|
|
|
%li
|
|
|
|
%span.badge.badge-success shared
|
|
|
|
\-
|
|
|
|
= _('Runner runs jobs from all unassigned projects')
|
|
|
|
%li
|
|
|
|
%span.badge.badge-success group
|
|
|
|
\-
|
|
|
|
= _('Runner runs jobs from all unassigned projects in its group')
|
|
|
|
%li
|
|
|
|
%span.badge.badge-info specific
|
|
|
|
\-
|
|
|
|
= _('Runner runs jobs from assigned projects')
|
|
|
|
%li
|
|
|
|
%span.badge.badge-warning locked
|
|
|
|
\-
|
|
|
|
= _('Runner cannot be assigned to other projects')
|
|
|
|
%li
|
|
|
|
%span.badge.badge-danger paused
|
|
|
|
\-
|
|
|
|
= _('Runner will not receive any new jobs')
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
.col-sm-6
|
|
|
|
.bs-callout
|
|
|
|
= render partial: 'ci/runner/how_to_setup_runner',
|
|
|
|
locals: { registration_token: Gitlab::CurrentSettings.runners_registration_token,
|
|
|
|
type: 'shared',
|
|
|
|
reset_token_url: reset_registration_token_admin_application_settings_path }
|
2017-09-10 17:25:29 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
.row
|
|
|
|
.col-sm-9
|
|
|
|
= form_tag admin_runners_path, id: 'runners-search', method: :get, class: 'filter-form js-filter-form' do
|
|
|
|
.filtered-search-wrapper
|
|
|
|
.filtered-search-box
|
|
|
|
= dropdown_tag(custom_icon('icon_history'),
|
|
|
|
options: { wrapper_class: 'filtered-search-history-dropdown-wrapper',
|
|
|
|
toggle_class: 'filtered-search-history-dropdown-toggle-button',
|
|
|
|
dropdown_class: 'filtered-search-history-dropdown',
|
|
|
|
content_class: 'filtered-search-history-dropdown-content',
|
|
|
|
title: _('Recent searches') }) do
|
|
|
|
.js-filtered-search-history-dropdown{ data: { full_path: admin_runners_path } }
|
|
|
|
.filtered-search-box-input-container.droplab-dropdown
|
|
|
|
.scroll-container
|
|
|
|
%ul.tokens-container.list-unstyled
|
|
|
|
%li.input-token
|
|
|
|
%input.form-control.filtered-search{ { id: 'filtered-search-runners', placeholder: _('Search or filter results...') } }
|
|
|
|
#js-dropdown-hint.filtered-search-input-dropdown-menu.dropdown-menu.hint-dropdown
|
|
|
|
%ul{ data: { dropdown: true } }
|
|
|
|
%li.filter-dropdown-item{ data: { action: 'submit' } }
|
|
|
|
= button_tag class: %w[btn btn-link] do
|
|
|
|
= sprite_icon('search')
|
|
|
|
%span
|
|
|
|
= _('Press Enter or click to search')
|
|
|
|
%ul.filter-dropdown{ data: { dynamic: true, dropdown: true } }
|
|
|
|
%li.filter-dropdown-item
|
|
|
|
= button_tag class: %w[btn btn-link] do
|
|
|
|
-# Encapsulate static class name `{{icon}}` inside #{} to bypass
|
|
|
|
-# haml lint's ClassAttributeWithStaticValue
|
|
|
|
%svg
|
|
|
|
%use{ 'xlink:href': "#{'{{icon}}'}" }
|
|
|
|
%span.js-filter-hint
|
|
|
|
{{hint}}
|
|
|
|
%span.js-filter-tag.dropdown-light-content
|
|
|
|
{{tag}}
|
2017-09-10 17:25:29 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
#js-dropdown-admin-runner-status.filtered-search-input-dropdown-menu.dropdown-menu
|
|
|
|
%ul{ data: { dropdown: true } }
|
|
|
|
- Ci::Runner::AVAILABLE_STATUSES.each do |status|
|
|
|
|
%li.filter-dropdown-item{ data: { value: status } }
|
|
|
|
= button_tag class: %w[btn btn-link] do
|
|
|
|
= status.titleize
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
#js-dropdown-admin-runner-type.filtered-search-input-dropdown-menu.dropdown-menu
|
|
|
|
%ul{ data: { dropdown: true } }
|
|
|
|
- Ci::Runner::AVAILABLE_TYPES.each do |runner_type|
|
|
|
|
%li.filter-dropdown-item{ data: { value: runner_type } }
|
|
|
|
= button_tag class: %w[btn btn-link] do
|
|
|
|
= runner_type.titleize
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
= button_tag class: %w[clear-search hidden] do
|
|
|
|
= icon('times')
|
|
|
|
.filter-dropdown-container
|
|
|
|
= render 'sort_dropdown'
|
|
|
|
|
|
|
|
.col-sm-3.text-right-lg
|
|
|
|
= _('Runners currently online: %{active_runners_count}') % { active_runners_count: @active_runners_count }
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2017-09-10 17:25:29 +05:30
|
|
|
- if @runners.any?
|
2018-12-05 23:21:45 +05:30
|
|
|
.runners-content.content-list
|
2018-03-17 18:26:18 +05:30
|
|
|
.table-holder
|
2018-12-05 23:21:45 +05:30
|
|
|
.gl-responsive-table-row.table-row-header{ role: 'row' }
|
|
|
|
.table-section.section-10{ role: 'rowheader' }= _('Type')
|
|
|
|
.table-section.section-10{ role: 'rowheader' }= _('Runner token')
|
|
|
|
.table-section.section-15{ role: 'rowheader' }= _('Description')
|
|
|
|
.table-section.section-15{ role: 'rowheader' }= _('Version')
|
|
|
|
.table-section.section-10{ role: 'rowheader' }= _('IP Address')
|
|
|
|
.table-section.section-5{ role: 'rowheader' }= _('Projects')
|
|
|
|
.table-section.section-5{ role: 'rowheader' }= _('Jobs')
|
|
|
|
.table-section.section-10{ role: 'rowheader' }= _('Tags')
|
|
|
|
.table-section.section-10{ role: 'rowheader' }= _('Last contact')
|
|
|
|
.table-section.section-10{ role: 'rowheader' }
|
2015-09-25 12:07:36 +05:30
|
|
|
|
2018-12-05 23:21:45 +05:30
|
|
|
- @runners.each do |runner|
|
|
|
|
= render 'admin/runners/runner', runner: runner
|
|
|
|
= paginate @runners, theme: 'gitlab'
|
2017-09-10 17:25:29 +05:30
|
|
|
- else
|
2018-12-05 23:21:45 +05:30
|
|
|
.nothing-here-block= _('No runners found')
|