summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-02-08 22:32:36 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2016-02-19 18:30:13 +0100
commit921cfb66e617156517761b3f294f58c81db55dea (patch)
tree0580e40ca8dcbdb94db6b6b0d460bb4e0443acc6 /lib
parent96158aa6b377d6f683d560689562293c36e05002 (diff)
downloadgitlab-ce-921cfb66e617156517761b3f294f58c81db55dea.tar.gz
Introduce API for serving the artifacts archive
Diffstat (limited to 'lib')
-rw-r--r--lib/api/builds.rb26
-rw-r--r--lib/api/entities.rb5
2 files changed, 31 insertions, 0 deletions
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index c058128ae54..f5ae8e57e23 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -60,6 +60,32 @@ module API
user_can_download_artifacts: can?(current_user, :read_build, user_project)
end
+ # Download the artifacts file from build
+ #
+ # Parameters:
+ # id (required) - The ID of a build
+ # token (required) - The build authorization token
+ # Example Request:
+ # GET /projects/:id/builds/:build_id/artifacts
+ get ':id/builds/:build_id/artifacts' do
+ authorize_read_builds!
+
+ build = get_build(params[:build_id])
+ return not_found!(build) unless build
+
+ artifacts_file = build.artifacts_file
+
+ unless artifacts_file.file_storage?
+ return redirect_to build.artifacts_file.url
+ end
+
+ unless artifacts_file.exists?
+ not_found!
+ end
+
+ present_file!(artifacts_file.path, artifacts_file.filename)
+ end
+
# Get a trace of a specific build of a project
#
# Parameters:
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 857705dbf12..eaf42bee113 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -391,6 +391,10 @@ module API
end
end
+ class BuildArtifactFile < Grape::Entity
+ expose :filename, :size
+ end
+
class Build < Grape::Entity
expose :id, :status, :stage, :name, :ref, :tag, :coverage
expose :created_at, :started_at, :finished_at
@@ -402,6 +406,7 @@ module API
repo_obj.artifacts_download_url
end
end
+ expose :artifacts_file, using: BuildArtifactFile, if: lambda { |build, opts| build.artifacts? }
expose :commit, with: RepoCommit do |repo_obj, _options|
if repo_obj.respond_to?(:commit)
repo_obj.commit.commit_data