From 8d4555037a844d21dbf56c2995cff30782af920b Mon Sep 17 00:00:00 2001
From: Tomasz Maczukin <tomasz@maczukin.pl>
Date: Mon, 28 Dec 2015 16:38:29 +0100
Subject: [PATCH] Add cancel/retry endpoints to build API

---
 lib/api/builds.rb | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index 5ac24d0367a..16e4549d280 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -64,6 +64,42 @@ module API
         trace = build.trace
         body trace
       end
+
+      # cancel a specific build of a project
+      #
+      # parameters:
+      #   id (required) - the id of a project
+      #   build_id (required) - the id of a build
+      # example request:
+      #   post /projects/:id/build/:build_id/cancel
+      post ':id/builds/:build_id/cancel' do
+        authorize_manage_builds!
+
+        build = get_build(params[:build_id])
+        return not_found!(build) unless build
+
+        build.cancel
+
+        present build, with: Entities::Build
+      end
+
+      # cancel a specific build of a project
+      #
+      # parameters:
+      #   id (required) - the id of a project
+      #   build_id (required) - the id of a build
+      # example request:
+      #   post /projects/:id/build/:build_id/retry
+      post ':id/builds/:build_id/retry' do
+        authorize_manage_builds!
+
+        build = get_build(params[:build_id])
+        return not_found!(build) unless build && build.retryable?
+
+        build = Ci::Build.retry(build)
+
+        present build, with: Entities::Build
+      end
     end
 
     helpers do
@@ -81,6 +117,10 @@ module API
           builds
         end
       end
+
+      def authorize_manage_builds!
+        authorize! :manage_builds, user_project
+      end
     end
   end
 end
-- 
GitLab