Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKamil Trzciński <ayufan@ayufan.eu>2016-02-20 01:30:11 +0300
committerRémy Coutable <remy@rymai.me>2016-02-21 22:59:39 +0300
commitba893daf53ba729f2d07f0acde4ba24c7ba97d23 (patch)
tree7d1371db93720b0bb6f3c4eecf6dd02f00959ab9 /lib
parent6e5084b583bced34d8a64303366c92f7725f4d62 (diff)
Merge branch 'builds-artifacts-API' into 'master'
Introduce API for serving the artifacts archive Add API to download build artifacts archive in context of GitLab API /cc @DouweM @grzesiek See merge request !2893
Diffstat (limited to 'lib')
-rw-r--r--lib/api/builds.rb24
-rw-r--r--lib/api/entities.rb5
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index c058128ae54..2b104f90aa7 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -60,6 +60,30 @@ 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
+
+ return not_found! unless artifacts_file.exists?
+
+ 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..a3b5f1eb8d3 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: -> (build, opts) { build.artifacts? }
expose :commit, with: RepoCommit do |repo_obj, _options|
if repo_obj.respond_to?(:commit)
repo_obj.commit.commit_data