Add artifacts downloading API

This commit is contained in:
Tomasz Maczukin 2017-02-28 17:55:56 +01:00
parent c2eb54760d
commit f7d352341e
No known key found for this signature in database
GPG Key ID: 7E9EB2E4B0F625CD
2 changed files with 65 additions and 0 deletions

View File

@ -221,6 +221,31 @@ module API
render_validation_error!(job)
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

View File

@ -895,6 +895,46 @@ describe API::Runner do
post api("/jobs/#{job.id}/artifacts"), params, headers
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