Welcome to mirror list, hosted at ThFree Co, Russian Federation.

status_helper.rb « ci « helpers « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 5d526a6abb674c9113a4e018ffa5c7c70aa31559 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# frozen_string_literal: true

##
# DEPRECATED
#
# These helpers are deprecated in favor of detailed CI/CD statuses.
#
# See 'detailed_status?` method and `Gitlab::Ci::Status` module.
#
module Ci
  module StatusHelper
    def ci_status_for_statuseable(subject)
      status = subject.try(:status) || 'not found'
      status.humanize
    end

    # rubocop:disable Metrics/CyclomaticComplexity
    def ci_icon_for_status(status, size: 16)
      if detailed_status?(status)
        return sprite_icon(status.icon, size: size)
      end

      icon_name =
        case status
        when 'success'
          'status_success'
        when 'success-with-warnings'
          'status_warning'
        when 'failed'
          'status_failed'
        when 'pending'
          'status_pending'
        when 'waiting_for_resource'
          'status_pending'
        when 'preparing'
          'status_preparing'
        when 'running'
          'status_running'
        when 'play'
          'play'
        when 'created'
          'status_created'
        when 'skipped'
          'status_skipped'
        when 'manual'
          'status_manual'
        when 'scheduled'
          'status_scheduled'
        else
          'status_canceled'
        end

      sprite_icon(icon_name, size: size)
    end
    # rubocop:enable Metrics/CyclomaticComplexity

    def ci_icon_class_for_status(status)
      group = detailed_status?(status) ? status.group : status.dasherize

      "ci-status-icon-#{group}"
    end

    def pipeline_status_cache_key(pipeline_status)
      "pipeline-status/#{pipeline_status.sha}-#{pipeline_status.status}"
    end

    def render_commit_status(commit, status, ref: nil, tooltip_placement: 'left')
      project = commit.project
      path = pipelines_project_commit_path(project, commit, ref: ref)

      render_status_with_link(
        status,
        path,
        tooltip_placement: tooltip_placement,
        icon_size: 24)
    end

    def render_status_with_link(status, path = nil, type: _('pipeline'), tooltip_placement: 'left', cssclass: '', container: 'body', icon_size: 16)
      klass = "ci-status-link #{ci_icon_class_for_status(status)} d-inline-flex #{cssclass}"
      title = "#{type.titleize}: #{ci_label_for_status(status)}"
      data = { toggle: 'tooltip', placement: tooltip_placement, container: container }

      if path
        link_to ci_icon_for_status(status, size: icon_size), path,
          class: klass, title: title, data: data
      else
        content_tag :span, ci_icon_for_status(status, size: icon_size),
          class: klass, title: title, data: data
      end
    end

    private

    def detailed_status?(status)
      status.respond_to?(:text) &&
        status.respond_to?(:group) &&
        status.respond_to?(:label) &&
        status.respond_to?(:icon)
    end

    def ci_label_for_status(status)
      if detailed_status?(status)
        return status.label
      end

      label = case status
              when 'success'
                'passed'
              when 'success-with-warnings'
                'passed with warnings'
              when 'manual'
                'waiting for manual action'
              when 'scheduled'
                'waiting for delayed job'
              else
                status
              end
      translation = "CiStatusLabel|#{label}"
      s_(translation)
    end
  end
end