Commit f7d35234 authored by Tomasz Maczukin's avatar Tomasz Maczukin

Add artifacts downloading API

parent c2eb5476
...@@ -221,6 +221,31 @@ module API ...@@ -221,6 +221,31 @@ module API
render_validation_error!(job) render_validation_error!(job)
end end
end end
desc 'Download the artifacts file for job' do
http_codes [[200, 'Upload allowed'],
[403, 'Forbidden'],
[404, 'Artifact not found']]
end
params do
requires :id, type: Fixnum, desc: %q(Job's ID)
optional :token, type: String, desc: %q(Job's authentication token)
end
get '/:id/artifacts' do
job = Ci::Build.find_by_id(params[:id])
authenticate_job!(job)
artifacts_file = job.artifacts_file
unless artifacts_file.file_storage?
return redirect_to job.artifacts_file.url
end
unless artifacts_file.exists?
not_found!
end
present_file!(artifacts_file.path, artifacts_file.filename)
end
end end
end end
end end
...@@ -895,6 +895,46 @@ describe API::Runner do ...@@ -895,6 +895,46 @@ describe API::Runner do
post api("/jobs/#{job.id}/artifacts"), params, headers post api("/jobs/#{job.id}/artifacts"), params, headers
end end
end end
describe 'GET /api/v4/jobs/:id/artifacts' do
let(:token) { job.token }
before { download_artifact }
context 'when job has artifacts' do
let(:job) { create(:ci_build, :artifacts) }
let(:download_headers) do
{ 'Content-Transfer-Encoding' => 'binary',
'Content-Disposition' => 'attachment; filename=ci_build_artifacts.zip' }
end
context 'when using job token' do
it 'download artifacts' do
expect(response).to have_http_status(200)
expect(response.headers).to include download_headers
end
end
context 'when using runnners token' do
let(:token) { job.project.runners_token }
it 'responds with forbidden' do
expect(response).to have_http_status(403)
end
end
end
context 'when job does not has artifacts' do
it 'responds with not found' do
expect(response).to have_http_status(404)
end
end
def download_artifact(params = {}, request_headers = headers)
params = params.merge(token: token)
get api("/jobs/#{job.id}/artifacts"), params, request_headers
end
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment