summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZ.J. van de Weg <zegerjan@gitlab.com>2016-08-15 15:58:22 +0200
committerZ.J. van de Weg <zegerjan@gitlab.com>2016-08-18 21:10:52 +0200
commitfffe5c2b577b39be2254525d4320cf396b7ff58b (patch)
treee3b3965f4877afcf32e37e36fa25646583ea6286
parent15b441f3678bffd948ccb56b7f978646fd40b853 (diff)
downloadgitlab-ce-fffe5c2b577b39be2254525d4320cf396b7ff58b.tar.gz
Add Play endpoints on Builds
-rw-r--r--CHANGELOG1
-rw-r--r--lib/api/builds.rb23
-rw-r--r--spec/requests/api/builds_spec.rb22
3 files changed, 46 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
index a8e3c401df5..26b4e76e76f 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -30,6 +30,7 @@ v 8.11.0 (unreleased)
- Expand commit message width in repo view (ClemMakesApps)
- Cache highlighted diff lines for merge requests
- Pre-create all builds for a Pipeline when the new Pipeline is created !5295
+ - Add Play endpoint on Builds
- Fix of 'Commits being passed to custom hooks are already reachable when using the UI'
- Show member roles to all users on members page
- Project.visible_to_user is instrumented again
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index be5a3484ec8..2bd3b65acdc 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -189,6 +189,29 @@ module API
present build, with: Entities::Build,
user_can_download_artifacts: can?(current_user, :read_build, user_project)
end
+
+ desc 'Trigger a manual build' do
+ success Entities::Build
+ detail 'This feature was added in GitLab 8.11'
+ end
+ params do
+ requires :build_id, type: Integer, desc: 'The ID of a Build'
+ end
+ post ":id/builds/:build_id/play" do
+ authorize_read_builds!
+
+ build = get_build!(params[:build_id])
+
+ if build.playable?
+ build.play(current_user)
+
+ status 200
+ present build, with: Entities::Build,
+ user_can_download_artifacts: can?(current_user, :read_build, user_project)
+ else
+ bad_request!("Unplayable Build")
+ end
+ end
end
helpers do
diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb
index 41503885dd9..02b7e0c819f 100644
--- a/spec/requests/api/builds_spec.rb
+++ b/spec/requests/api/builds_spec.rb
@@ -407,4 +407,26 @@ describe API::API, api: true do
end
end
end
+
+ describe 'POST /projects/:id/builds/:build_id/play' do
+ before do
+ post api("/projects/#{project.id}/builds/#{build.id}/play", user)
+ end
+
+ context 'on an playable build' do
+ let(:build) { create(:ci_build, :manual, project: project, pipeline: pipeline) }
+
+ it 'plays the build' do
+ expect(response).to have_http_status 200
+ expect(json_response['user']['id']).to eq(user.id)
+ end
+ end
+
+ context 'on a non-playable build' do
+ it 'returns a status code 400, Bad Request' do
+ expect(response).to have_http_status 400
+ expect(response.body).to match("Unplayable Build")
+ end
+ end
+ end
end