From 0e06cfc059af0b70b366ab1eaf75f7601fdcb5e1 Mon Sep 17 00:00:00 2001
From: Shinya Maeda <gitlab.shinyamaeda@gmail.com>
Date: Tue, 28 Feb 2017 04:17:21 +0900
Subject: [PATCH] Add api points for ci cd status. Add favicon.

---
 app/controllers/projects/builds_controller.rb         | 6 ++++++
 app/controllers/projects/merge_requests_controller.rb | 8 +++++++-
 app/controllers/projects/pipelines_controller.rb      | 6 ++++++
 app/serializers/build_entity.rb                       | 6 ++++++
 app/serializers/build_serializer.rb                   | 3 +++
 app/serializers/status_entity.rb                      | 2 +-
 config/routes/project.rb                              | 3 +++
 lib/gitlab/ci/status/build/failed_allowed.rb          | 4 ++++
 lib/gitlab/ci/status/canceled.rb                      | 4 ++++
 lib/gitlab/ci/status/created.rb                       | 4 ++++
 lib/gitlab/ci/status/failed.rb                        | 4 ++++
 lib/gitlab/ci/status/pending.rb                       | 4 ++++
 lib/gitlab/ci/status/running.rb                       | 4 ++++
 lib/gitlab/ci/status/skipped.rb                       | 4 ++++
 lib/gitlab/ci/status/success.rb                       | 4 ++++
 lib/gitlab/ci/status/success_warning.rb               | 4 ++++
 16 files changed, 68 insertions(+), 2 deletions(-)
 create mode 100644 app/serializers/build_serializer.rb

diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index 886934a3f67..54650bc37a2 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -91,6 +91,12 @@ class Projects::BuildsController < Projects::ApplicationController
     end
   end
 
+  def ci_cd_status
+    render json: BuildSerializer
+      .new(project: @project, user: @current_user)
+      .represent(@build)
+  end
+
   private
 
   def build
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 677a8a1a73a..18b1a5cb395 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -10,7 +10,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
   before_action :module_enabled
   before_action :merge_request, only: [
     :edit, :update, :show, :diffs, :commits, :conflicts, :conflict_for_path, :pipelines, :merge, :merge_check,
-    :ci_status, :ci_environments_status, :toggle_subscription, :cancel_merge_when_pipeline_succeeds, :remove_wip, :resolve_conflicts, :assign_related_issues
+    :ci_status, :ci_cd_status, :ci_environments_status, :toggle_subscription, :cancel_merge_when_pipeline_succeeds, :remove_wip, :resolve_conflicts, :assign_related_issues
   ]
   before_action :validates_merge_request, only: [:show, :diffs, :commits, :pipelines]
   before_action :define_show_vars, only: [:show, :diffs, :commits, :conflicts, :conflict_for_path, :builds, :pipelines]
@@ -473,6 +473,12 @@ class Projects::MergeRequestsController < Projects::ApplicationController
     render json: response
   end
 
+  def ci_cd_status
+    render json: PipelineSerializer
+      .new(project: @project, user: @current_user)
+      .represent(@merge_request.head_pipeline)
+  end
+
   def ci_environments_status
     environments =
       begin
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb
index 718d9e86bea..508d627889c 100644
--- a/app/controllers/projects/pipelines_controller.rb
+++ b/app/controllers/projects/pipelines_controller.rb
@@ -72,6 +72,12 @@ class Projects::PipelinesController < Projects::ApplicationController
     end
   end
 
+  def ci_cd_status
+    render json: PipelineSerializer
+      .new(project: @project, user: @current_user)
+      .represent(@pipeline)
+  end
+
   def stage
     @stage = pipeline.stage(params[:stage])
     return not_found unless @stage
diff --git a/app/serializers/build_entity.rb b/app/serializers/build_entity.rb
index 5bcbe285052..531b3768da3 100644
--- a/app/serializers/build_entity.rb
+++ b/app/serializers/build_entity.rb
@@ -19,6 +19,12 @@ class BuildEntity < Grape::Entity
   expose :created_at
   expose :updated_at
 
+  expose :status do |build, options|
+    StatusEntity.represent(
+      build.detailed_status(request.user),
+      options)
+  end
+
   private
 
   def path_to(route, build)
diff --git a/app/serializers/build_serializer.rb b/app/serializers/build_serializer.rb
new file mode 100644
index 00000000000..637aacc7be5
--- /dev/null
+++ b/app/serializers/build_serializer.rb
@@ -0,0 +1,3 @@
+class BuildSerializer < BaseSerializer
+  entity BuildEntity
+end
diff --git a/app/serializers/status_entity.rb b/app/serializers/status_entity.rb
index 47066bebfb1..dfd9d1584a1 100644
--- a/app/serializers/status_entity.rb
+++ b/app/serializers/status_entity.rb
@@ -1,7 +1,7 @@
 class StatusEntity < Grape::Entity
   include RequestAwareEntity
 
-  expose :icon, :text, :label, :group
+  expose :icon, :favicon, :text, :label, :group
 
   expose :has_details?, as: :has_details
   expose :details_path
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 44b8ae7aedd..2c6d4518772 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -102,6 +102,7 @@ constraints(ProjectUrlConstrainer.new) do
           get :merge_widget_refresh
           post :cancel_merge_when_pipeline_succeeds
           get :ci_status
+          get :ci_cd_status
           get :ci_environments_status
           post :toggle_subscription
           post :remove_wip
@@ -152,6 +153,7 @@ constraints(ProjectUrlConstrainer.new) do
           post :cancel
           post :retry
           get :builds
+          get :ci_cd_status
         end
       end
 
@@ -203,6 +205,7 @@ constraints(ProjectUrlConstrainer.new) do
           post :erase
           get :trace
           get :raw
+          get :ci_cd_status
         end
 
         resource :artifacts, only: [] do
diff --git a/lib/gitlab/ci/status/build/failed_allowed.rb b/lib/gitlab/ci/status/build/failed_allowed.rb
index 807afe24bd5..93c7475f47d 100644
--- a/lib/gitlab/ci/status/build/failed_allowed.rb
+++ b/lib/gitlab/ci/status/build/failed_allowed.rb
@@ -13,6 +13,10 @@ module Gitlab
             'icon_status_warning'
           end
 
+          def favicon
+            'build_status_warning'
+          end
+
           def group
             'failed_with_warnings'
           end
diff --git a/lib/gitlab/ci/status/canceled.rb b/lib/gitlab/ci/status/canceled.rb
index dd6d99e9075..e8558164602 100644
--- a/lib/gitlab/ci/status/canceled.rb
+++ b/lib/gitlab/ci/status/canceled.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_canceled'
         end
+
+        def favicon
+          'build_status_canceled'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/created.rb b/lib/gitlab/ci/status/created.rb
index 6596d7e01ca..1b01210077a 100644
--- a/lib/gitlab/ci/status/created.rb
+++ b/lib/gitlab/ci/status/created.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_created'
         end
+
+        def favicon
+          'build_status_created'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/failed.rb b/lib/gitlab/ci/status/failed.rb
index c5b5e3203ad..5b180ba45fb 100644
--- a/lib/gitlab/ci/status/failed.rb
+++ b/lib/gitlab/ci/status/failed.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_failed'
         end
+
+        def favicon
+          'build_status_failed'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/pending.rb b/lib/gitlab/ci/status/pending.rb
index d30f35a59a2..25ce6f4449e 100644
--- a/lib/gitlab/ci/status/pending.rb
+++ b/lib/gitlab/ci/status/pending.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_pending'
         end
+
+        def favicon
+          'build_status_pending'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/running.rb b/lib/gitlab/ci/status/running.rb
index 2aba3c373c7..59e6bf3812d 100644
--- a/lib/gitlab/ci/status/running.rb
+++ b/lib/gitlab/ci/status/running.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_running'
         end
+
+        def favicon
+          'build_status_running'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/skipped.rb b/lib/gitlab/ci/status/skipped.rb
index 16282aefd03..49ddeda5057 100644
--- a/lib/gitlab/ci/status/skipped.rb
+++ b/lib/gitlab/ci/status/skipped.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_skipped'
         end
+
+        def favicon
+          'build_status_skipped'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/success.rb b/lib/gitlab/ci/status/success.rb
index c09c5f006e3..428598d0e24 100644
--- a/lib/gitlab/ci/status/success.rb
+++ b/lib/gitlab/ci/status/success.rb
@@ -13,6 +13,10 @@ module Gitlab
         def icon
           'icon_status_success'
         end
+
+        def favicon
+          'build_status_success'
+        end
       end
     end
   end
diff --git a/lib/gitlab/ci/status/success_warning.rb b/lib/gitlab/ci/status/success_warning.rb
index d4cdab6957a..8bb2a2e5e4e 100644
--- a/lib/gitlab/ci/status/success_warning.rb
+++ b/lib/gitlab/ci/status/success_warning.rb
@@ -20,6 +20,10 @@ module Gitlab
           'icon_status_warning'
         end
 
+        def favicon
+          'build_status_warning'
+        end
+        
         def group
           'success_with_warnings'
         end
-- 
GitLab