summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/api/helpers.rb4
-rw-r--r--lib/ci/api/builds.rb15
-rw-r--r--spec/requests/ci/api/builds_spec.rb11
3 files changed, 15 insertions, 15 deletions
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index a4df810e755..d46b5c42967 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -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)
diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb
index be2790571cb..fb87637b94f 100644
--- a/lib/ci/api/builds.rb
+++ b/lib/ci/api/builds.rb
@@ -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:
@@ -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)
diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb
index f47ffb00e33..648ea0d5f50 100644
--- a/spec/requests/ci/api/builds_spec.rb
+++ b/spec/requests/ci/api/builds_spec.rb
@@ -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