50 lines
1.7 KiB
Ruby
50 lines
1.7 KiB
Ruby
module Ci
|
|
module API
|
|
class Runners < Grape::API
|
|
resource :runners do
|
|
desc 'Delete a runner'
|
|
params do
|
|
requires :token, type: String, desc: 'The unique token of the runner'
|
|
end
|
|
delete "delete" do
|
|
authenticate_runner!
|
|
|
|
status(200)
|
|
Ci::Runner.find_by_token(params[:token]).destroy
|
|
end
|
|
|
|
desc 'Register a new runner' do
|
|
success Entities::Runner
|
|
end
|
|
params do
|
|
requires :token, type: String, desc: 'The unique token of the runner'
|
|
optional :description, type: String, desc: 'The description of the runner'
|
|
optional :tag_list, type: Array[String], desc: 'A list of tags the runner should run for'
|
|
optional :run_untagged, type: Boolean, desc: 'Flag if the runner should execute untagged jobs'
|
|
optional :locked, type: Boolean, desc: 'Lock this runner for this specific project'
|
|
end
|
|
post "register" do
|
|
runner_params = declared(params, include_missing: false).except(:token)
|
|
|
|
runner =
|
|
if runner_registration_token_valid?
|
|
# Create shared runner. Requires admin access
|
|
Ci::Runner.create(runner_params.merge(is_shared: true))
|
|
elsif project = Project.find_by(runners_token: params[:token])
|
|
# Create a specific runner for project.
|
|
project.runners.create(runner_params)
|
|
end
|
|
|
|
return forbidden! unless runner
|
|
|
|
if runner.id
|
|
runner.update(get_runner_version_from_params)
|
|
present runner, with: Entities::Runner
|
|
else
|
|
not_found!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|