70 lines
1.9 KiB
Ruby
70 lines
1.9 KiB
Ruby
|
module Ci
|
||
|
module API
|
||
|
# Runners API
|
||
|
class Runners < Grape::API
|
||
|
resource :runners do
|
||
|
# Get list of all available runners
|
||
|
#
|
||
|
# Example Request:
|
||
|
# GET /runners
|
||
|
get do
|
||
|
authenticate!
|
||
|
runners = Ci::Runner.all
|
||
|
|
||
|
present runners, with: Entities::Runner
|
||
|
end
|
||
|
|
||
|
# Delete runner
|
||
|
# Parameters:
|
||
|
# token (required) - The unique token of runner
|
||
|
#
|
||
|
# Example Request:
|
||
|
# GET /runners/delete
|
||
|
delete "delete" do
|
||
|
required_attributes! [:token]
|
||
|
authenticate_runner!
|
||
|
Ci::Runner.find_by_token(params[:token]).destroy
|
||
|
end
|
||
|
|
||
|
# Register a new runner
|
||
|
#
|
||
|
# Note: This is an "internal" API called when setting up
|
||
|
# runners, so it is authenticated differently.
|
||
|
#
|
||
|
# Parameters:
|
||
|
# token (required) - The unique token of runner
|
||
|
#
|
||
|
# Example Request:
|
||
|
# POST /runners/register
|
||
|
post "register" do
|
||
|
required_attributes! [:token]
|
||
|
|
||
|
runner =
|
||
|
if params[:token] == GitlabCi::REGISTRATION_TOKEN
|
||
|
# Create shared runner. Requires admin access
|
||
|
Ci::Runner.create(
|
||
|
description: params[:description],
|
||
|
tag_list: params[:tag_list],
|
||
|
is_shared: true
|
||
|
)
|
||
|
elsif project = Ci::Project.find_by(token: params[:token])
|
||
|
# Create a specific runner for project.
|
||
|
project.runners.create(
|
||
|
description: params[:description],
|
||
|
tag_list: params[:tag_list]
|
||
|
)
|
||
|
end
|
||
|
|
||
|
return forbidden! unless runner
|
||
|
|
||
|
if runner.id
|
||
|
present runner, with: Entities::Runner
|
||
|
else
|
||
|
not_found!
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|