diff --git a/app/helpers/ci/status_helper.rb b/app/helpers/ci/status_helper.rb
new file mode 100644
index 0000000000000000000000000000000000000000..bca49324a1934ddb9ba2669c135a0c7d0474be90
--- /dev/null
+++ b/app/helpers/ci/status_helper.rb
@@ -0,0 +1,148 @@
+# 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_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
+
+    def ci_text_for_status(status)
+      if detailed_status?(status)
+        return status.text
+      end
+
+      case status
+      when 'success'
+        s_('CiStatusText|passed')
+      when 'success-with-warnings'
+        s_('CiStatusText|passed')
+      when 'manual'
+        s_('CiStatusText|blocked')
+      when 'scheduled'
+        s_('CiStatusText|delayed')
+      else
+        # All states are already being translated inside the detailed statuses:
+        # :running => Gitlab::Ci::Status::Running
+        # :skipped => Gitlab::Ci::Status::Skipped
+        # :failed => Gitlab::Ci::Status::Failed
+        # :success => Gitlab::Ci::Status::Success
+        # :canceled => Gitlab::Ci::Status::Canceled
+        # The following states are customized above:
+        # :manual => Gitlab::Ci::Status::Manual
+        status_translation = "CiStatusText|#{status}"
+        s_(status_translation)
+      end
+    end
+
+    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
+
+    def detailed_status?(status)
+      status.respond_to?(:text) &&
+        status.respond_to?(:group) &&
+        status.respond_to?(:label) &&
+        status.respond_to?(:icon)
+    end
+  end
+end
diff --git a/app/helpers/ci_status_helper.rb b/app/helpers/ci_status_helper.rb
deleted file mode 100644
index 80d1b7e7edbde78d8642f5ae1a22eedcb7f9044f..0000000000000000000000000000000000000000
--- a/app/helpers/ci_status_helper.rb
+++ /dev/null
@@ -1,146 +0,0 @@
-# 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 CiStatusHelper
-  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
-
-  def ci_text_for_status(status)
-    if detailed_status?(status)
-      return status.text
-    end
-
-    case status
-    when 'success'
-      s_('CiStatusText|passed')
-    when 'success-with-warnings'
-      s_('CiStatusText|passed')
-    when 'manual'
-      s_('CiStatusText|blocked')
-    when 'scheduled'
-      s_('CiStatusText|delayed')
-    else
-      # All states are already being translated inside the detailed statuses:
-      # :running => Gitlab::Ci::Status::Running
-      # :skipped => Gitlab::Ci::Status::Skipped
-      # :failed => Gitlab::Ci::Status::Failed
-      # :success => Gitlab::Ci::Status::Success
-      # :canceled => Gitlab::Ci::Status::Canceled
-      # The following states are customized above:
-      # :manual => Gitlab::Ci::Status::Manual
-      status_translation = "CiStatusText|#{status}"
-      s_(status_translation)
-    end
-  end
-
-  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
-
-  def detailed_status?(status)
-    status.respond_to?(:text) &&
-      status.respond_to?(:group) &&
-      status.respond_to?(:label) &&
-      status.respond_to?(:icon)
-  end
-end
diff --git a/spec/helpers/ci_status_helper_spec.rb b/spec/helpers/ci/status_helper_spec.rb
similarity index 99%
rename from spec/helpers/ci_status_helper_spec.rb
rename to spec/helpers/ci/status_helper_spec.rb
index 1c8a749944b8c657568113a84795a13e75f8806a..12a6acb1ecc305b11d3c81775735d311bec31868 100644
--- a/spec/helpers/ci_status_helper_spec.rb
+++ b/spec/helpers/ci/status_helper_spec.rb
@@ -2,7 +2,7 @@
 
 require 'spec_helper'
 
-RSpec.describe CiStatusHelper do
+RSpec.describe Ci::StatusHelper do
   include IconsHelper
 
   let(:success_commit) { double("Ci::Pipeline", status: 'success') }