52 lines
1.8 KiB
Ruby
52 lines
1.8 KiB
Ruby
module API
|
|
class Runner < Grape::API
|
|
helpers ::API::Helpers::Runner
|
|
|
|
resource :runners do
|
|
desc 'Registers a new Runner' do
|
|
success Entities::RunnerRegistrationDetails
|
|
http_codes [[201, 'Runner was created'], [403, 'Forbidden']]
|
|
end
|
|
params do
|
|
requires :token, type: String, desc: 'Registration token'
|
|
optional :description, type: String, desc: %q(Runner's description)
|
|
optional :info, type: Hash, desc: %q(Runner's metadata)
|
|
optional :locked, type: Boolean, desc: 'Should Runner be locked for current project'
|
|
optional :run_untagged, type: Boolean, desc: 'Should Runner handle untagged jobs'
|
|
optional :tag_list, type: Array[String], desc: %q(List of Runner's tags)
|
|
end
|
|
post '/' do
|
|
attributes = attributes_for_keys [:description, :locked, :run_untagged, :tag_list]
|
|
|
|
runner =
|
|
if runner_registration_token_valid?
|
|
# Create shared runner. Requires admin access
|
|
Ci::Runner.create(attributes.merge(is_shared: true))
|
|
elsif project = Project.find_by(runners_token: params[:token])
|
|
# Create a specific runner for project.
|
|
project.runners.create(attributes)
|
|
end
|
|
|
|
return forbidden! unless runner
|
|
|
|
if runner.id
|
|
runner.update(get_runner_version_from_params)
|
|
present runner, with: Entities::RunnerRegistrationDetails
|
|
else
|
|
not_found!
|
|
end
|
|
end
|
|
|
|
desc 'Deletes a registered Runner' do
|
|
http_codes [[204, 'Runner was deleted'], [403, 'Forbidden']]
|
|
end
|
|
params do
|
|
requires :token, type: String, desc: %q(Runner's authentication token)
|
|
end
|
|
delete '/' do
|
|
authenticate_runner!
|
|
Ci::Runner.find_by_token(params[:token]).destroy
|
|
end
|
|
end
|
|
end
|
|
end
|