diff options
Diffstat (limited to 'lib/ci/api/builds.rb')
-rw-r--r-- | lib/ci/api/builds.rb | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb index 15faa6edd84..2e9a5d311f9 100644 --- a/lib/ci/api/builds.rb +++ b/lib/ci/api/builds.rb @@ -13,14 +13,14 @@ module Ci post "register" do authenticate_runner! update_runner_last_contact + update_runner_info required_attributes! [:token] not_found! unless current_runner.active? build = Ci::RegisterBuildService.new.execute(current_runner) if build - update_runner_info - present build, with: Entities::Build + present build, with: Entities::BuildDetails else not_found! end @@ -38,6 +38,8 @@ module Ci authenticate_runner! update_runner_last_contact build = Ci::Build.where(runner_id: current_runner.id).running.find(params[:id]) + forbidden!('Build has been erased!') if build.erased? + build.update_attributes(trace: params[:trace]) if params[:trace] case params[:state].to_s @@ -78,11 +80,13 @@ module Ci # Parameters: # id (required) - The ID of a build # token (required) - The build authorization token - # file (required) - The uploaded file + # file (required) - Artifacts file # Parameters (accelerated by GitLab Workhorse): # file.path - path to locally stored body (generated by Workhorse) # file.name - real filename as send in Content-Disposition # file.type - real content type as send in Content-Type + # metadata.path - path to locally stored body (generated by Workhorse) + # metadata.name - filename (generated by Workhorse) # Headers: # BUILD-TOKEN (required) - The build authorization token, the same as token # Body: @@ -96,13 +100,21 @@ module Ci build = Ci::Build.find_by_id(params[:id]) not_found! unless build authenticate_build_token!(build) - forbidden!('build is not running') unless build.running? + forbidden!('Build is not running!') unless build.running? + forbidden!('Build has been erased!') if build.erased? + + artifacts_upload_path = ArtifactUploader.artifacts_upload_path + artifacts = uploaded_file(:file, artifacts_upload_path) + metadata = uploaded_file(:metadata, artifacts_upload_path) - file = uploaded_file!(:file, ArtifactUploader.artifacts_upload_path) - file_to_large! unless file.size < max_artifacts_size + bad_request!('Missing artifacts file!') unless artifacts + file_to_large! unless artifacts.size < max_artifacts_size - if build.update_attributes(artifacts_file: file) - present build, with: Entities::Build + build.artifacts_file = artifacts + build.artifacts_metadata = metadata + + if build.save + present(build, with: Entities::BuildDetails) else render_validation_error!(build) end @@ -134,7 +146,7 @@ module Ci present_file!(artifacts_file.path, artifacts_file.filename) end - # Remove the artifacts file from build + # Remove the artifacts file from build - Runners only # # Parameters: # id (required) - The ID of a build @@ -147,7 +159,9 @@ module Ci build = Ci::Build.find_by_id(params[:id]) not_found! unless build authenticate_build_token!(build) + build.remove_artifacts_file! + build.remove_artifacts_metadata! end end end |