diff options
author | Kamil Trzciński <ayufan@ayufan.eu> | 2016-02-20 01:30:11 +0300 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-02-21 22:59:39 +0300 |
commit | ba893daf53ba729f2d07f0acde4ba24c7ba97d23 (patch) | |
tree | 7d1371db93720b0bb6f3c4eecf6dd02f00959ab9 /lib | |
parent | 6e5084b583bced34d8a64303366c92f7725f4d62 (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.rb | 24 | ||||
-rw-r--r-- | lib/api/entities.rb | 5 |
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 |