2015-12-24 13:05:57 -05:00
|
|
|
module API
|
|
|
|
# Projects builds API
|
|
|
|
class Builds < Grape::API
|
|
|
|
before { authenticate! }
|
|
|
|
|
|
|
|
resource :projects do
|
|
|
|
# Get a project repository commits
|
|
|
|
#
|
|
|
|
# Parameters:
|
|
|
|
# id (required) - The ID of a project
|
|
|
|
# scope (optional) - The scope of builds to show (one of: all, finished, running)
|
|
|
|
# page (optional) - The page number for pagination (default: 1)
|
|
|
|
# per_page (ooptional) - The value of items per page to show (default 30)
|
|
|
|
# Example Request:
|
2015-12-24 13:18:01 -05:00
|
|
|
# GET /projects/:id/builds
|
2015-12-24 13:05:57 -05:00
|
|
|
get ':id/builds' do
|
|
|
|
all_builds = user_project.builds
|
2015-12-28 07:09:51 -05:00
|
|
|
builds = all_builds.order('id DESC')
|
2015-12-24 13:05:57 -05:00
|
|
|
builds =
|
|
|
|
case params[:scope]
|
|
|
|
when 'finished'
|
|
|
|
builds.finished
|
|
|
|
when 'running'
|
|
|
|
builds.running
|
|
|
|
else
|
2015-12-28 07:09:51 -05:00
|
|
|
builds
|
2015-12-24 13:05:57 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
page = (params[:page] || 1).to_i
|
|
|
|
per_page = (params[:per_page] || 30).to_i
|
|
|
|
|
|
|
|
present builds.page(page).per(per_page), with: Entities::Build
|
|
|
|
end
|
|
|
|
|
|
|
|
# Get a specific build of a project
|
|
|
|
#
|
|
|
|
# Parameters:
|
|
|
|
# id (required) - The ID of a project
|
|
|
|
# build_id (required) - The ID of a build
|
|
|
|
# Example Request:
|
|
|
|
# GET /projects/:id/builds/:build_id
|
|
|
|
get ':id/builds/:build_id' do
|
|
|
|
present get_build(params[:build_id]), with: Entities::Build
|
|
|
|
end
|
|
|
|
|
|
|
|
# Get a trace of a specific build of a project
|
|
|
|
#
|
|
|
|
# Parameters:
|
|
|
|
# id (required) - The ID of a project
|
|
|
|
# build_id (required) - The ID of a build
|
|
|
|
# Example Request:
|
|
|
|
# GET /projects/:id/build/:build_id/trace
|
|
|
|
get ':id/builds/:build_id/trace' do
|
2015-12-28 07:09:51 -05:00
|
|
|
build = get_build(params[:build_id])
|
|
|
|
|
|
|
|
header 'Content-Disposition', "infile; filename=\"#{build.id}.log\""
|
|
|
|
content_type 'text/plain'
|
|
|
|
env['api.format'] = :binary
|
2015-12-24 13:05:57 -05:00
|
|
|
|
2015-12-28 07:09:51 -05:00
|
|
|
trace = build.trace
|
|
|
|
body trace
|
2015-12-24 13:05:57 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
helpers do
|
|
|
|
def get_build(id)
|
|
|
|
user_project.builds.where(id: id).first
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|