Skip to content
Snippets Groups Projects
Commit e8995f9f authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Modify artifacts upload API endpoint, add artifacts metadata

parent cf00a808
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -78,11 +78,15 @@ 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
# metadata (optional) - Artifacts metadata 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 - real filename as send in Content-Disposition
# metadata.type - real content type as send in Content-Type
# Headers:
# BUILD-TOKEN (required) - The build authorization token, the same as token
# Body:
Loading
Loading
@@ -98,10 +102,17 @@ module Ci
authenticate_build_token!(build)
forbidden!('build is not running') unless build.running?
 
file = uploaded_file!(:file, ArtifactUploader.artifacts_upload_path)
file_to_large! unless file.size < max_artifacts_size
artifacts_upload_path = ArtifactUploader.artifacts_upload_path
artifacts = uploaded_file!(:file, artifacts_upload_path)
file_to_large! unless artifacts.size < max_artifacts_size
artifacts_attributes = { artifacts_file: artifacts }
 
if build.update_attributes(artifacts_file: file)
if params[:metadata] || params['metadata.path'.to_sym]
metadata = uploaded_file!(:metadata, artifacts_upload_path)
artifacts_attributes.store(:artifacts_metadata, metadata)
end
if build.update_attributes(artifacts_attributes)
present build, with: Entities::Build
else
render_validation_error!(build)
Loading
Loading
@@ -148,6 +159,7 @@ module Ci
not_found! unless build
authenticate_build_token!(build)
build.remove_artifacts_file!
build.remove_artifacts_metadata!
end
end
end
Loading
Loading
Loading
Loading
@@ -31,6 +31,7 @@ module Ci
 
expose :variables
expose :artifacts_file, using: ArtifactFile
expose :artifacts_metadata, using: ArtifactFile
end
 
class Runner < Grape::Entity
Loading
Loading
Loading
Loading
@@ -210,6 +210,31 @@ describe Ci::API::API do
end
end
 
context "should post artifacts metadata" do
let!(:artifacts) { file_upload }
let!(:metadata) { file_upload2 }
before do
build.run!
post_data = {
'file.path' => artifacts.path,
'file.name' => artifacts.original_filename,
'metadata.path' => metadata.path,
'metadata.name' => metadata.original_filename
}
post post_url, post_data, headers_with_token
end
it 'stores artifacts and artifacts metadata' do
expect(response.status).to eq(201)
expect(json_response['artifacts_file']['filename']).to eq(artifacts.original_filename)
expect(json_response['artifacts_metadata']['filename']).to eq(metadata.original_filename)
end
end
context "should fail to post too large artifact" do
before do
build.run!
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment