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

Refactor build artifacts upload API endpoint

parent 3f0c18f8
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -289,12 +289,14 @@ module API
 
# file helpers
 
def uploaded_file!(field, uploads_path)
def uploaded_file(field, uploads_path)
if params[field]
bad_request!("#{field} is not a file") unless params[field].respond_to?(:filename)
return params[field]
end
 
return nil unless params["#{field}.path"] && params["#{field}.name"]
# sanitize file paths
# this requires all paths to exist
required_attributes! %W(#{field}.path)
Loading
Loading
Loading
Loading
@@ -85,7 +85,6 @@ module Ci
# 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)
# metadata.type - content type (returned by Workhorse)
# Headers:
# BUILD-TOKEN (required) - The build authorization token, the same as token
# Body:
Loading
Loading
@@ -99,17 +98,17 @@ 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!('metadata reserved for workhorse') if params[:metadata]
forbidden!('Build is not running!') unless build.running?
 
artifacts_upload_path = ArtifactUploader.artifacts_upload_path
artifacts = uploaded_file!(:file, artifacts_upload_path)
artifacts = uploaded_file(:file, artifacts_upload_path)
metadata = uploaded_file(:metadata, artifacts_upload_path)
bad_request!('Missing artifacts file!') unless artifacts
file_to_large! unless artifacts.size < max_artifacts_size
build.artifacts_file = artifacts
 
if params[:'metadata.path'] && params[:'metadata.name']
build.artifacts_metadata = uploaded_file!(:metadata, artifacts_upload_path)
end
build.artifacts_file = artifacts
build.artifacts_metadata = metadata
 
if build.save
present(build, with: Entities::Build)
Loading
Loading
Loading
Loading
@@ -240,17 +240,16 @@ describe Ci::API::API do
end
end
 
context 'runner sends metadata file' do
context 'no artifacts file in post data' do
let(:post_data) do
{ 'file' => artifacts, 'metadata' => metadata }
{ 'metadata' => metadata }
end
 
it 'is expected to respond with forbbiden' do
expect(response.status).to eq(403)
it 'is expected to respond with bad request' do
expect(response.status).to eq(400)
end
 
it 'does not store artifacts or metadata' do
expect(stored_artifacts_file).to be_nil
it 'does not store metadata' do
expect(stored_metadata_file).to be_nil
end
end
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