Modify artifacts upload API endpoint, add artifacts metadata
This commit is contained in:
parent
cf00a808cc
commit
e8995f9fd5
3 changed files with 42 additions and 4 deletions
|
@ -78,11 +78,15 @@ module Ci
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# id (required) - The ID of a build
|
# id (required) - The ID of a build
|
||||||
# token (required) - The build authorization token
|
# 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):
|
# Parameters (accelerated by GitLab Workhorse):
|
||||||
# file.path - path to locally stored body (generated by Workhorse)
|
# file.path - path to locally stored body (generated by Workhorse)
|
||||||
# file.name - real filename as send in Content-Disposition
|
# file.name - real filename as send in Content-Disposition
|
||||||
# file.type - real content type as send in Content-Type
|
# 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:
|
# Headers:
|
||||||
# BUILD-TOKEN (required) - The build authorization token, the same as token
|
# BUILD-TOKEN (required) - The build authorization token, the same as token
|
||||||
# Body:
|
# Body:
|
||||||
|
@ -98,10 +102,17 @@ module Ci
|
||||||
authenticate_build_token!(build)
|
authenticate_build_token!(build)
|
||||||
forbidden!('build is not running') unless build.running?
|
forbidden!('build is not running') unless build.running?
|
||||||
|
|
||||||
file = uploaded_file!(:file, ArtifactUploader.artifacts_upload_path)
|
artifacts_upload_path = ArtifactUploader.artifacts_upload_path
|
||||||
file_to_large! unless file.size < max_artifacts_size
|
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
|
present build, with: Entities::Build
|
||||||
else
|
else
|
||||||
render_validation_error!(build)
|
render_validation_error!(build)
|
||||||
|
@ -148,6 +159,7 @@ module Ci
|
||||||
not_found! unless build
|
not_found! unless build
|
||||||
authenticate_build_token!(build)
|
authenticate_build_token!(build)
|
||||||
build.remove_artifacts_file!
|
build.remove_artifacts_file!
|
||||||
|
build.remove_artifacts_metadata!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -31,6 +31,7 @@ module Ci
|
||||||
|
|
||||||
expose :variables
|
expose :variables
|
||||||
expose :artifacts_file, using: ArtifactFile
|
expose :artifacts_file, using: ArtifactFile
|
||||||
|
expose :artifacts_metadata, using: ArtifactFile
|
||||||
end
|
end
|
||||||
|
|
||||||
class Runner < Grape::Entity
|
class Runner < Grape::Entity
|
||||||
|
|
|
@ -210,6 +210,31 @@ describe Ci::API::API do
|
||||||
end
|
end
|
||||||
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
|
context "should fail to post too large artifact" do
|
||||||
before do
|
before do
|
||||||
build.run!
|
build.run!
|
||||||
|
|
Loading…
Reference in a new issue