diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb index 886934a3f677e884ade8a5bf903d79f4a4ae4110..54650bc37a2094ec0652c649043427227a1d9924 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 677a8a1a73a3f687d411d380ad8f91a87469d44a..18b1a5cb39590960409692413c2cac8c3d3ac203 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 718d9e86beaad2db77c8dd894f5ca39ac6f0f2e4..508d627889c6f29ec10b2343cbaa62db192f47e0 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 5bcbe285052ee07f25218b1419f935f6a1f64795..531b3768da37a07592ea76cd4dd9cf86bbad3a5f 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 0000000000000000000000000000000000000000..637aacc7be503d72c94dcb6d656e95b5c71d6272 --- /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 47066bebfb11075658c0888d381590d4bce27bf5..dfd9d1584a1ca631d890204dead9d9ebe77953fd 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 44b8ae7aeddffa91bdb30a9ccbc3141fe0b9da3e..2c6d45187720e2f158861618ec4382d2c97a18b1 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 807afe24bd5765f695cd3cf88d8c6b618a4930c8..93c7475f47d608cc138fe1e615d4df8bef6a0be6 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 dd6d99e90757d623a83964ca738141eb44ed6559..e8558164602d119a97307da5e99e43ae7d95b051 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 6596d7e01ca9bb48b2c1beae651a99f012e42f91..1b01210077aab2411bbceff8a8c6a97f97d70e02 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 c5b5e3203ad6af466b7e53ffcde0ed55bf08dcae..5b180ba45fbc1717dc5b53cc17edf701c885057c 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 d30f35a59a254bb89ec67f39c6071f5f81dcb07a..25ce6f4449e50dea77fd7a199556dc20d7acf720 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 2aba3c373c7fabbff7ecec5a019d478f90ada659..59e6bf3812d1e158c0f95af75afbcbfe08d914de 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 16282aefd03d7a6a9942f388adad8213a012311d..49ddeda5057c31cb4f56bb67dbf45917743583ab 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 c09c5f006e326a4353cb07a7e1909e1499f1d656..428598d0e24d6e882189a2f3010b95eb508b0fcb 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 d4cdab6957a00c835c7996b02aac7f62bb14e88a..8bb2a2e5e4e0ddf00ae608752ed10c8cc0a524b6 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