Grapfiy the CI::Triggers API
This commit is contained in:
parent
a7a0873829
commit
b8c88a839d
2 changed files with 18 additions and 28 deletions
|
@ -1,41 +1,30 @@
|
|||
module Ci
|
||||
module API
|
||||
# Build Trigger API
|
||||
class Triggers < Grape::API
|
||||
resource :projects do
|
||||
# Trigger a GitLab CI project build
|
||||
#
|
||||
# Parameters:
|
||||
# id (required) - The ID of a CI project
|
||||
# ref (required) - The name of project's branch or tag
|
||||
# token (required) - The uniq token of trigger
|
||||
# Example Request:
|
||||
# POST /projects/:id/ref/:ref/trigger
|
||||
desc 'Trigger a GitLab CI project build' do
|
||||
success Entities::TriggerRequest
|
||||
end
|
||||
params do
|
||||
requires :id, type: Integer, desc: 'The ID of a CI project'
|
||||
requires :ref, type: String, desc: "The name of project's branch or tag"
|
||||
requires :token, type: String, desc: 'The unique token of the trigger'
|
||||
optional :variables, type: Hash, desc: 'Optional build variables'
|
||||
end
|
||||
post ":id/refs/:ref/trigger" do
|
||||
required_attributes! [:token]
|
||||
|
||||
project = Project.find_by(ci_id: params[:id].to_i)
|
||||
trigger = Ci::Trigger.find_by_token(params[:token].to_s)
|
||||
project = Project.find_by(ci_id: params[:id])
|
||||
trigger = Ci::Trigger.find_by_token(params[:token])
|
||||
not_found! unless project && trigger
|
||||
unauthorized! unless trigger.project == project
|
||||
|
||||
# validate variables
|
||||
variables = params[:variables]
|
||||
if variables
|
||||
unless variables.is_a?(Hash)
|
||||
render_api_error!('variables needs to be a hash', 400)
|
||||
end
|
||||
|
||||
# Validate variables
|
||||
variables = params[:variables].to_h
|
||||
unless variables.all? { |key, value| key.is_a?(String) && value.is_a?(String) }
|
||||
render_api_error!('variables needs to be a map of key-valued strings', 400)
|
||||
end
|
||||
|
||||
# convert variables from Mash to Hash
|
||||
variables = variables.to_h
|
||||
end
|
||||
|
||||
# create request and trigger builds
|
||||
trigger_request = Ci::CreateTriggerRequestService.new.execute(project, trigger, params[:ref].to_s, variables)
|
||||
trigger_request = Ci::CreateTriggerRequestService.new.execute(project, trigger, params[:ref], variables)
|
||||
if trigger_request
|
||||
present trigger_request, with: Entities::TriggerRequest
|
||||
else
|
||||
|
|
|
@ -60,7 +60,8 @@ describe Ci::API::Triggers do
|
|||
it 'validates variables to be a hash' do
|
||||
post ci_api("/projects/#{project.ci_id}/refs/master/trigger"), options.merge(variables: 'value')
|
||||
expect(response).to have_http_status(400)
|
||||
expect(json_response['message']).to eq('variables needs to be a hash')
|
||||
|
||||
expect(json_response['error']).to eq('variables is invalid')
|
||||
end
|
||||
|
||||
it 'validates variables needs to be a map of key-valued strings' do
|
||||
|
|
Loading…
Reference in a new issue