parent
4b7e8f2570
commit
7a109402a8
|
|
@ -13,7 +13,7 @@ class Admin::RunnersController < Admin::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @runner.update_attributes(runner_params)
|
if Ci::UpdateRunnerService.new(@runner).update(runner_params)
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.js
|
format.js
|
||||||
format.html { redirect_to admin_runner_path(@runner) }
|
format.html { redirect_to admin_runner_path(@runner) }
|
||||||
|
|
@ -31,7 +31,7 @@ class Admin::RunnersController < Admin::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def resume
|
def resume
|
||||||
if @runner.update_attributes(active: true)
|
if Ci::UpdateRunnerService.new(@runner).update(active: true)
|
||||||
redirect_to admin_runners_path, notice: 'Runner was successfully updated.'
|
redirect_to admin_runners_path, notice: 'Runner was successfully updated.'
|
||||||
else
|
else
|
||||||
redirect_to admin_runners_path, alert: 'Runner was not updated.'
|
redirect_to admin_runners_path, alert: 'Runner was not updated.'
|
||||||
|
|
@ -39,7 +39,7 @@ class Admin::RunnersController < Admin::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def pause
|
def pause
|
||||||
if @runner.update_attributes(active: false)
|
if Ci::UpdateRunnerService.new(@runner).update(active: false)
|
||||||
redirect_to admin_runners_path, notice: 'Runner was successfully updated.'
|
redirect_to admin_runners_path, notice: 'Runner was successfully updated.'
|
||||||
else
|
else
|
||||||
redirect_to admin_runners_path, alert: 'Runner was not updated.'
|
redirect_to admin_runners_path, alert: 'Runner was not updated.'
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ class Projects::RunnersController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
if @runner.update_attributes(runner_params)
|
if Ci::UpdateRunnerService.new(@runner).update(runner_params)
|
||||||
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
||||||
else
|
else
|
||||||
render 'edit'
|
render 'edit'
|
||||||
|
|
@ -32,7 +32,7 @@ class Projects::RunnersController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def resume
|
def resume
|
||||||
if @runner.update_attributes(active: true)
|
if Ci::UpdateRunnerService.new(@runner).update(active: true)
|
||||||
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
||||||
else
|
else
|
||||||
redirect_to runner_path(@runner), alert: 'Runner was not updated.'
|
redirect_to runner_path(@runner), alert: 'Runner was not updated.'
|
||||||
|
|
@ -40,7 +40,7 @@ class Projects::RunnersController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def pause
|
def pause
|
||||||
if @runner.update_attributes(active: false)
|
if Ci::UpdateRunnerService.new(@runner).update(active: false)
|
||||||
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
redirect_to runner_path(@runner), notice: 'Runner was successfully updated.'
|
||||||
else
|
else
|
||||||
redirect_to runner_path(@runner), alert: 'Runner was not updated.'
|
redirect_to runner_path(@runner), alert: 'Runner was not updated.'
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ module Ci
|
||||||
scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) }
|
scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) }
|
||||||
scope :ordered, ->() { order(id: :desc) }
|
scope :ordered, ->() { order(id: :desc) }
|
||||||
|
|
||||||
after_save :tick_runner_queue, if: :form_editable_changed?
|
|
||||||
|
|
||||||
scope :owned_or_shared, ->(project_id) do
|
scope :owned_or_shared, ->(project_id) do
|
||||||
joins('LEFT JOIN ci_runner_projects ON ci_runner_projects.runner_id = ci_runners.id')
|
joins('LEFT JOIN ci_runner_projects ON ci_runner_projects.runner_id = ci_runners.id')
|
||||||
.where("ci_runner_projects.gl_project_id = :project_id OR ci_runners.is_shared = true", project_id: project_id)
|
.where("ci_runner_projects.gl_project_id = :project_id OR ci_runners.is_shared = true", project_id: project_id)
|
||||||
|
|
@ -149,12 +147,6 @@ module Ci
|
||||||
"runner:build_queue:#{self.token}"
|
"runner:build_queue:#{self.token}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def form_editable_changed?
|
|
||||||
FORM_EDITABLE.any? do |editable|
|
|
||||||
public_send("#{editable}_changed?")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def tag_constraints
|
def tag_constraints
|
||||||
unless has_tags? || run_untagged?
|
unless has_tags? || run_untagged?
|
||||||
errors.add(:tags_list,
|
errors.add(:tags_list,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
module Ci
|
||||||
|
class UpdateRunnerService
|
||||||
|
attr_reader :runner
|
||||||
|
|
||||||
|
def initialize(runner)
|
||||||
|
@runner = runner
|
||||||
|
end
|
||||||
|
|
||||||
|
def update(params)
|
||||||
|
runner.update(params).tap do
|
||||||
|
runner.tick_runner_queue
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -28,23 +28,27 @@ module Ci
|
||||||
post "register" do
|
post "register" do
|
||||||
required_attributes! [:token]
|
required_attributes! [:token]
|
||||||
|
|
||||||
attributes = attributes_for_keys(
|
project = nil
|
||||||
[:description, :tag_list, :run_untagged, :locked]
|
|
||||||
)
|
|
||||||
|
|
||||||
runner =
|
runner =
|
||||||
if runner_registration_token_valid?
|
if runner_registration_token_valid?
|
||||||
# Create shared runner. Requires admin access
|
# Create shared runner. Requires admin access
|
||||||
Ci::Runner.create(attributes.merge(is_shared: true))
|
Ci::Runner.new(is_shared: true)
|
||||||
elsif project = Project.find_by(runners_token: params[:token])
|
elsif project = Project.find_by(runners_token: params[:token])
|
||||||
# Create a specific runner for project.
|
Ci::Runner.new
|
||||||
project.runners.create(attributes)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
return forbidden! unless runner
|
return forbidden! unless runner
|
||||||
|
|
||||||
|
attributes = attributes_for_keys(
|
||||||
|
[:description, :tag_list, :run_untagged, :locked]
|
||||||
|
).merge(get_runner_version_from_params || {})
|
||||||
|
|
||||||
|
Ci::UpdateRunnerService.new(runner).update(attributes)
|
||||||
|
|
||||||
|
# Assign the specific runner for the project
|
||||||
|
project.runners << runner if project
|
||||||
|
|
||||||
if runner.id
|
if runner.id
|
||||||
runner.update(get_runner_version_from_params)
|
|
||||||
present runner, with: Entities::Runner
|
present runner, with: Entities::Runner
|
||||||
else
|
else
|
||||||
not_found!
|
not_found!
|
||||||
|
|
|
||||||
|
|
@ -291,7 +291,7 @@ describe Ci::Runner, models: true do
|
||||||
let!(:last_update) { runner.ensure_runner_queue_value }
|
let!(:last_update) { runner.ensure_runner_queue_value }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
runner.update(description: 'new runner')
|
Ci::UpdateRunnerService.new(runner).update(description: 'new runner')
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets a new last_update value' do
|
it 'sets a new last_update value' do
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Ci::UpdateRunnerService, services: true do
|
||||||
|
let(:runner) { create(:ci_runner) }
|
||||||
|
|
||||||
|
describe '#update' do
|
||||||
|
before do
|
||||||
|
allow(runner).to receive(:tick_runner_queue)
|
||||||
|
|
||||||
|
described_class.new(runner).update(description: 'new runner')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the runner and ticking the queue' do
|
||||||
|
expect(runner.description).to eq('new runner')
|
||||||
|
expect(runner).to have_received(:tick_runner_queue)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
Loading…
Reference in New Issue