From d6718c2bc45c514caf8b674f96ea4aaf209c07c8 Mon Sep 17 00:00:00 2001
From: Vasilii Iakliushin <viakliushin@gitlab.com>
Date: Tue, 31 Oct 2023 15:28:59 +0000
Subject: [PATCH] Remove .md from help_page_links (step 2)

---
 .haml-lint_todo.yml                           | 25 +++----------------
 app/helpers/clusters_helper.rb                |  2 +-
 app/helpers/environments_helper.rb            |  4 +--
 app/helpers/ide_helper.rb                     | 10 ++++----
 app/helpers/merge_requests_helper.rb          |  4 +--
 app/helpers/operations_helper.rb              |  2 +-
 app/helpers/preferences_helper.rb             |  4 +--
 app/helpers/projects_helper.rb                |  2 +-
 app/presenters/clusters/cluster_presenter.rb  |  2 +-
 app/serializers/issue_entity.rb               |  6 ++---
 .../merge_request_noteable_entity.rb          |  4 +--
 .../merge_request_widget_entity.rb            |  8 +++---
 app/services/projects/update_service.rb       |  2 +-
 .../application_settings/_email.html.haml     |  2 +-
 .../_error_tracking.html.haml                 |  4 +--
 .../application_settings/_floc.html.haml      |  2 +-
 .../_gitlab_shell_operation_limits.html.haml  |  2 +-
 .../_localization.html.haml                   |  2 +-
 .../_projects_api_limits.html.haml            |  2 +-
 .../_runner_registrars_form.html.haml         |  2 +-
 .../application_settings/general.html.haml    |  6 ++---
 .../application_settings/network.html.haml    | 22 ++++++++--------
 .../preferences.html.haml                     | 10 ++++----
 .../application_settings/reporting.html.haml  |  2 +-
 .../application_settings/repository.html.haml | 10 ++++----
 .../admin/dev_ops_report/_score.html.haml     |  2 +-
 ...roup_from_another_instance_panel.html.haml |  2 +-
 app/views/profiles/gpg_keys/index.html.haml   |  2 +-
 app/views/profiles/keys/_key.html.haml        |  2 +-
 app/views/profiles/keys/index.html.haml       |  2 +-
 .../personal_access_tokens/index.html.haml    |  2 +-
 .../blob/_pipeline_tour_success.html.haml     |  2 +-
 .../commit/_signature_badge.html.haml         |  6 ++---
 .../storage/limit_alert_component.rb          |  2 +-
 .../repository_limit_alert_component.rb       |  2 +-
 .../presenters/ee/merge_request_presenter.rb  |  2 +-
 ee/app/serializers/epic_entity.rb             |  2 +-
 .../projects/menus/infrastructure_menu.rb     |  2 +-
 spec/helpers/environments_helper_spec.rb      |  4 +--
 spec/helpers/ide_helper_spec.rb               |  2 +-
 spec/helpers/operations_helper_spec.rb        |  2 +-
 .../clusters/cluster_presenter_spec.rb        |  2 +-
 spec/serializers/issue_entity_spec.rb         |  2 +-
 43 files changed, 82 insertions(+), 101 deletions(-)

diff --git a/.haml-lint_todo.yml b/.haml-lint_todo.yml
index c9b6930bc2ba2..c587e299c62cc 100644
--- a/.haml-lint_todo.yml
+++ b/.haml-lint_todo.yml
@@ -1,6 +1,6 @@
 # This configuration was generated by
 # `haml-lint --auto-gen-config`
-# on 2023-10-26 11:21:24 +0200 using Haml-Lint version 0.40.1.
+# on 2023-10-30 15:10:05 +0100 using Haml-Lint version 0.40.1.
 # The point is for the user to remove these configuration records
 # one by one as the lints are removed from the code base.
 # Note that changes in the inspected code, or installation of new
@@ -8,30 +8,11 @@
 
 linters:
 
-  # Offense count: 49
+  # Offense count: 37
   DocumentationLinks:
     exclude:
-      - "app/views/admin/application_settings/_email.html.haml"
-      - "app/views/admin/application_settings/_error_tracking.html.haml"
-      - "app/views/admin/application_settings/_floc.html.haml"
-      - "app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml"
       - "app/views/admin/application_settings/_localization.html.haml"
-      - "app/views/admin/application_settings/_projects_api_limits.html.haml"
-      - "app/views/admin/application_settings/_runner_registrars_form.html.haml"
-      - "app/views/admin/application_settings/general.html.haml"
-      - "app/views/admin/application_settings/network.html.haml"
-      - "app/views/admin/application_settings/preferences.html.haml"
-      - "app/views/admin/application_settings/reporting.html.haml"
-      - "app/views/admin/application_settings/repository.html.haml"
-      - "app/views/admin/dev_ops_report/_score.html.haml"
-      - "app/views/groups/_import_group_from_another_instance_panel.html.haml"
-      - "app/views/profiles/gpg_keys/index.html.haml"
-      - "app/views/profiles/keys/_key.html.haml"
-      - "app/views/profiles/keys/index.html.haml"
-      - "app/views/profiles/personal_access_tokens/index.html.haml"
       - "app/views/profiles/two_factor_auths/show.html.haml"
-      - "app/views/projects/blob/_pipeline_tour_success.html.haml"
-      - "app/views/projects/commit/_signature_badge.html.haml"
       - "app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml"
       - "app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml"
       - "app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml"
@@ -59,4 +40,4 @@ linters:
       - "ee/app/views/projects/settings/merge_requests/_merge_request_approvals_settings.html.haml"
       - "ee/app/views/projects/settings/merge_requests/_target_branch_rules_settings.html.haml"
       - "ee/app/views/shared/_new_user_signups_cap_reached_alert.html.haml"
-      - "ee/app/views/shared/promotions/_promote_mobile_devops.html.haml"
+      - "ee/app/views/shared/promotions/_promote_mobile_devops.html.haml"
\ No newline at end of file
diff --git a/app/helpers/clusters_helper.rb b/app/helpers/clusters_helper.rb
index 1989d6ab3d5b2..319cec6f140f2 100644
--- a/app/helpers/clusters_helper.rb
+++ b/app/helpers/clusters_helper.rb
@@ -38,7 +38,7 @@ def js_cluster_form_data(cluster, can_edit)
       environment_scope: cluster.environment_scope,
       base_domain: cluster.base_domain,
       auto_devops_help_path: help_page_path('topics/autodevops/index'),
-      external_endpoint_help_path: help_page_path('user/project/clusters/gitlab_managed_clusters.md', anchor: 'base-domain')
+      external_endpoint_help_path: help_page_path('user/project/clusters/gitlab_managed_clusters', anchor: 'base-domain')
     }
   end
 
diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb
index 80a5649365385..e358eb3f49198 100644
--- a/app/helpers/environments_helper.rb
+++ b/app/helpers/environments_helper.rb
@@ -85,8 +85,8 @@ def project_and_environment_metrics_data(project, environment)
 
   def static_metrics_data
     {
-      'documentation_path' => help_page_path('administration/monitoring/prometheus/index.md'),
-      'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
+      'documentation_path' => help_page_path('administration/monitoring/prometheus/index'),
+      'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project'),
       'empty_getting_started_svg_path' => image_path('illustrations/monitoring/getting_started.svg'),
       'empty_loading_svg_path' => image_path('illustrations/monitoring/loading.svg'),
       'empty_no_data_svg_path' => image_path('illustrations/monitoring/no_data.svg'),
diff --git a/app/helpers/ide_helper.rb b/app/helpers/ide_helper.rb
index 2582d6fcc348a..f2d393f1f77d2 100644
--- a/app/helpers/ide_helper.rb
+++ b/app/helpers/ide_helper.rb
@@ -5,7 +5,7 @@ module IdeHelper
   def ide_data(project:, fork_info:, params:)
     base_data = {
       'use-new-web-ide' => use_new_web_ide?.to_s,
-      'new-web-ide-help-page-path' => help_page_path('user/project/web_ide/index.md', anchor: 'vscode-reimplementation'),
+      'new-web-ide-help-page-path' => help_page_path('user/project/web_ide/index', anchor: 'vscode-reimplementation'),
       'sign-in-path' => new_session_path(current_user),
       'user-preferences-path' => profile_preferences_path
     }.merge(use_new_web_ide? ? new_ide_data(project: project) : legacy_ide_data(project: project))
@@ -71,16 +71,16 @@ def legacy_ide_data(project:)
       'switch-editor-svg-path': image_path('illustrations/rocket-launch-md.svg'),
       'promotion-svg-path': image_path('illustrations/web-ide_promotion.svg'),
       'ci-help-page-path' => help_page_path('ci/quick_start/index'),
-      'web-ide-help-page-path' => help_page_path('user/project/web_ide/index.md'),
+      'web-ide-help-page-path' => help_page_path('user/project/web_ide/index'),
       'render-whitespace-in-code': current_user.render_whitespace_in_code.to_s,
       'default-branch' => project && project.default_branch,
       'project' => convert_to_project_entity_json(project),
       'enable-environments-guidance' => enable_environments_guidance?(project).to_s,
       'preview-markdown-path' => project && preview_markdown_path(project),
       'web-terminal-svg-path' => image_path('illustrations/web-ide_promotion.svg'),
-      'web-terminal-help-path' => help_page_path('user/project/web_ide/index.md', anchor: 'interactive-web-terminals-for-the-web-ide'),
-      'web-terminal-config-help-path' => help_page_path('user/project/web_ide/index.md', anchor: 'web-ide-configuration-file'),
-      'web-terminal-runners-help-path' => help_page_path('user/project/web_ide/index.md', anchor: 'runner-configuration')
+      'web-terminal-help-path' => help_page_path('user/project/web_ide/index', anchor: 'interactive-web-terminals-for-the-web-ide'),
+      'web-terminal-config-help-path' => help_page_path('user/project/web_ide/index', anchor: 'web-ide-configuration-file'),
+      'web-terminal-runners-help-path' => help_page_path('user/project/web_ide/index', anchor: 'runner-configuration')
     }
   end
 
diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb
index 7eaa0d41297e1..4cb6260c03ee8 100644
--- a/app/helpers/merge_requests_helper.rb
+++ b/app/helpers/merge_requests_helper.rb
@@ -187,7 +187,7 @@ def diffs_tab_pane_data(project, merge_request, params)
       endpoint_batch: diffs_batch_project_json_merge_request_path(project, merge_request, 'json', params),
       endpoint_coverage: @coverage_path,
       endpoint_diff_for_path: diff_for_path_namespace_project_merge_request_path(format: 'json', id: merge_request.iid, namespace_id: project.namespace.to_param, project_id: project.path),
-      help_page_path: help_page_path('user/project/merge_requests/reviews/suggestions.md'),
+      help_page_path: help_page_path('user/project/merge_requests/reviews/suggestions'),
       current_user_data: @current_user_data,
       update_current_user_path: @update_current_user_path,
       project_path: project_path(merge_request.project),
@@ -219,7 +219,7 @@ def how_merge_modal_data(merge_request)
       source_project_full_path: merge_request.source_project&.full_path,
       source_project_default_url: merge_request.source_project && default_url_to_repo(merge_request.source_project),
       target_branch: merge_request.target_branch,
-      reviewing_docs_path: help_page_path('user/project/merge_requests/reviews/index.md', anchor: "checkout-merge-requests-locally-through-the-head-ref")
+      reviewing_docs_path: help_page_path('user/project/merge_requests/reviews/index', anchor: "checkout-merge-requests-locally-through-the-head-ref")
     }
   end
 
diff --git a/app/helpers/operations_helper.rb b/app/helpers/operations_helper.rb
index 8528f5f04f70b..d8b3cc3b36efa 100644
--- a/app/helpers/operations_helper.rb
+++ b/app/helpers/operations_helper.rb
@@ -21,7 +21,7 @@ def alerts_settings_data(disabled: false)
       'prometheus_authorization_key' => @project.alerting_setting&.token,
       'prometheus_api_url' => prometheus_integration.api_url,
       'prometheus_url' => notify_project_prometheus_alerts_url(@project, format: :json),
-      'alerts_setup_url' => help_page_path('operations/incident_management/integrations.md', anchor: 'configuration'),
+      'alerts_setup_url' => help_page_path('operations/incident_management/integrations', anchor: 'configuration'),
       'alerts_usage_url' => project_alert_management_index_path(@project),
       'disabled' => disabled.to_s,
       'project_path' => @project.full_path,
diff --git a/app/helpers/preferences_helper.rb b/app/helpers/preferences_helper.rb
index 656d35e927d9b..d5bbd3a081d03 100644
--- a/app/helpers/preferences_helper.rb
+++ b/app/helpers/preferences_helper.rb
@@ -122,8 +122,8 @@ def default_preferred_language_choices
 
   def integration_views
     [].tap do |views|
-      views << { name: 'gitpod', message: gitpod_enable_description, message_url: gitpod_url_placeholder, help_link: help_page_path('integration/gitpod.md') } if Gitlab::CurrentSettings.gitpod_enabled
-      views << { name: 'sourcegraph', message: sourcegraph_url_message, message_url: Gitlab::CurrentSettings.sourcegraph_url, help_link: help_page_path('user/profile/preferences.md', anchor: 'sourcegraph') } if Gitlab::Sourcegraph.feature_available? && Gitlab::CurrentSettings.sourcegraph_enabled
+      views << { name: 'gitpod', message: gitpod_enable_description, message_url: gitpod_url_placeholder, help_link: help_page_path('integration/gitpod') } if Gitlab::CurrentSettings.gitpod_enabled
+      views << { name: 'sourcegraph', message: sourcegraph_url_message, message_url: Gitlab::CurrentSettings.sourcegraph_url, help_link: help_page_path('user/profile/preferences', anchor: 'sourcegraph') } if Gitlab::Sourcegraph.feature_available? && Gitlab::CurrentSettings.sourcegraph_enabled
     end
   end
 
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 7dc0f63924f0c..c3b9a0a421b38 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -187,7 +187,7 @@ def last_push_event
   end
 
   def link_to_autodeploy_doc
-    link_to _('About auto deploy'), help_page_path('topics/autodevops/stages.md', anchor: 'auto-deploy'), target: '_blank', rel: 'noopener'
+    link_to _('About auto deploy'), help_page_path('topics/autodevops/stages', anchor: 'auto-deploy'), target: '_blank', rel: 'noopener'
   end
 
   def autodeploy_flash_notice(branch_name)
diff --git a/app/presenters/clusters/cluster_presenter.rb b/app/presenters/clusters/cluster_presenter.rb
index ec1dc96c2e366..5765d08dfb30a 100644
--- a/app/presenters/clusters/cluster_presenter.rb
+++ b/app/presenters/clusters/cluster_presenter.rb
@@ -61,7 +61,7 @@ def health_data(clusterable)
         'clusters-path': clusterable.index_path,
         'dashboard-endpoint': clusterable.metrics_dashboard_path(cluster),
         'documentation-path': help_page_path('user/infrastructure/clusters/manage/clusters_health'),
-        'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
+        'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project'),
         'empty-getting-started-svg-path': image_path('illustrations/monitoring/getting_started.svg'),
         'empty-loading-svg-path': image_path('illustrations/monitoring/loading.svg'),
         'empty-no-data-svg-path': image_path('illustrations/monitoring/no_data.svg'),
diff --git a/app/serializers/issue_entity.rb b/app/serializers/issue_entity.rb
index 657af578c7f67..9a55e761bf049 100644
--- a/app/serializers/issue_entity.rb
+++ b/app/serializers/issue_entity.rb
@@ -73,11 +73,11 @@ class IssueEntity < IssuableEntity
   end
 
   expose :confidential_issues_docs_path, if: -> (issue) { issue.confidential? } do |issue|
-    help_page_path('user/project/issues/confidential_issues.md')
+    help_page_path('user/project/issues/confidential_issues')
   end
 
   expose :locked_discussion_docs_path, if: -> (issue) { issue.discussion_locked? } do |issue|
-    help_page_path('user/discussions/index.md', anchor: 'prevent-comments-by-locking-an-issue')
+    help_page_path('user/discussions/index', anchor: 'prevent-comments-by-locking-an-issue')
   end
 
   expose :is_project_archived do |issue|
@@ -85,7 +85,7 @@ class IssueEntity < IssuableEntity
   end
 
   expose :archived_project_docs_path, if: -> (issue) { issue.project.archived? } do |issue|
-    help_page_path('user/project/settings/index.md', anchor: 'archive-a-project')
+    help_page_path('user/project/settings/index', anchor: 'archive-a-project')
   end
 
   expose :issue_email_participants do |issue|
diff --git a/app/serializers/merge_request_noteable_entity.rb b/app/serializers/merge_request_noteable_entity.rb
index 44f51f43998e0..04b801e29adb2 100644
--- a/app/serializers/merge_request_noteable_entity.rb
+++ b/app/serializers/merge_request_noteable_entity.rb
@@ -52,7 +52,7 @@ class MergeRequestNoteableEntity < IssuableEntity
   end
 
   expose :locked_discussion_docs_path, if: -> (merge_request) { merge_request.discussion_locked? } do |merge_request|
-    help_page_path('user/discussions/index.md', anchor: 'prevent-comments-by-locking-an-issue')
+    help_page_path('user/discussions/index', anchor: 'prevent-comments-by-locking-an-issue')
   end
 
   expose :is_project_archived do |merge_request|
@@ -62,7 +62,7 @@ class MergeRequestNoteableEntity < IssuableEntity
   expose :project_id
 
   expose :archived_project_docs_path, if: -> (merge_request) { merge_request.project.archived? } do |merge_request|
-    help_page_path('user/project/settings/index.md', anchor: 'archive-a-project')
+    help_page_path('user/project/settings/index', anchor: 'archive-a-project')
   end
 
   private
diff --git a/app/serializers/merge_request_widget_entity.rb b/app/serializers/merge_request_widget_entity.rb
index cf984207ad1da..95072ae815e00 100644
--- a/app/serializers/merge_request_widget_entity.rb
+++ b/app/serializers/merge_request_widget_entity.rb
@@ -48,15 +48,15 @@ class MergeRequestWidgetEntity < Grape::Entity
   end
 
   expose :conflicts_docs_path do |merge_request|
-    help_page_path('user/project/merge_requests/conflicts.md')
+    help_page_path('user/project/merge_requests/conflicts')
   end
 
   expose :reviewing_and_managing_merge_requests_docs_path do |merge_request|
-    help_page_path('user/project/merge_requests/reviews/index.md', anchor: "checkout-merge-requests-locally-through-the-head-ref")
+    help_page_path('user/project/merge_requests/reviews/index', anchor: "checkout-merge-requests-locally-through-the-head-ref")
   end
 
   expose :merge_request_pipelines_docs_path do |merge_request|
-    help_page_path('ci/pipelines/merge_request_pipelines.md')
+    help_page_path('ci/pipelines/merge_request_pipelines')
   end
 
   expose :ci_environments_status_path do |merge_request|
@@ -129,7 +129,7 @@ class MergeRequestWidgetEntity < Grape::Entity
   end
 
   expose :security_reports_docs_path do |merge_request|
-    help_page_path('user/application_security/index.md', anchor: 'view-security-scan-information-in-merge-requests')
+    help_page_path('user/application_security/index', anchor: 'view-security-scan-information-in-merge-requests')
   end
 
   expose :enabled_reports do |merge_request|
diff --git a/app/services/projects/update_service.rb b/app/services/projects/update_service.rb
index e5e39247dbfae..2d81bbdaa3b3a 100644
--- a/app/services/projects/update_service.rb
+++ b/app/services/projects/update_service.rb
@@ -92,7 +92,7 @@ def validate_default_branch_change
     end
 
     def ambiguous_head_documentation_link
-      url = Rails.application.routes.url_helpers.help_page_path('user/project/repository/branches/index.md', anchor: 'error-ambiguous-head-branch-exists')
+      url = Rails.application.routes.url_helpers.help_page_path('user/project/repository/branches/index', anchor: 'error-ambiguous-head-branch-exists')
 
       format('<a href="%{url}" target="_blank" rel="noopener noreferrer">', url: url)
     end
diff --git a/app/views/admin/application_settings/_email.html.haml b/app/views/admin/application_settings/_email.html.haml
index 2d45391a83907..a9bc8ab9d325b 100644
--- a/app/views/admin/application_settings/_email.html.haml
+++ b/app/views/admin/application_settings/_email.html.haml
@@ -10,7 +10,7 @@
       = f.label :commit_email_hostname, _('Custom hostname (for private commit emails)'), class: 'label-bold'
       = f.text_field :commit_email_hostname, class: 'form-control gl-form-input'
       .form-text.text-muted
-        - commit_email_hostname_docs_link = link_to _('Learn more'), help_page_path('administration/settings/email.md', anchor: 'custom-hostname-for-private-commit-emails'), target: '_blank', rel: 'noopener noreferrer'
+        - commit_email_hostname_docs_link = link_to _('Learn more'), help_page_path('administration/settings/email', anchor: 'custom-hostname-for-private-commit-emails'), target: '_blank', rel: 'noopener noreferrer'
         = _("Hostname used in private commit emails. %{learn_more}").html_safe % { learn_more: commit_email_hostname_docs_link }
 
     = render_if_exists 'admin/application_settings/email_additional_text_setting', form: f
diff --git a/app/views/admin/application_settings/_error_tracking.html.haml b/app/views/admin/application_settings/_error_tracking.html.haml
index 6754dd99bbca4..ab4ed9917a0fd 100644
--- a/app/views/admin/application_settings/_error_tracking.html.haml
+++ b/app/views/admin/application_settings/_error_tracking.html.haml
@@ -7,8 +7,8 @@
     = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do
       = expanded ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
-      = _('Allows projects to track errors using an Opstrace integration.').html_safe % { link: help_page_path('operations/error_tracking.md') }
-      = link_to _('Learn more.'), help_page_path('operations/error_tracking.md'), target: '_blank', rel: 'noopener noreferrer'
+      = _('Allows projects to track errors using an Opstrace integration.').html_safe % { link: help_page_path('operations/error_tracking') }
+      = link_to _('Learn more.'), help_page_path('operations/error_tracking'), target: '_blank', rel: 'noopener noreferrer'
 
   .settings-content
 
diff --git a/app/views/admin/application_settings/_floc.html.haml b/app/views/admin/application_settings/_floc.html.haml
index e1576e84e6667..27df417d2251c 100644
--- a/app/views/admin/application_settings/_floc.html.haml
+++ b/app/views/admin/application_settings/_floc.html.haml
@@ -7,7 +7,7 @@
     = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do
       = expanded ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
-      - floc_link_url = help_page_path('administration/settings/floc.md')
+      - floc_link_url = help_page_path('administration/settings/floc')
       - floc_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: floc_link_url }
       = html_escape(s_('FloC|Configure whether you want to participate in FLoC. %{floc_link_start}What is FLoC?%{floc_link_end}')) % { floc_link_start: floc_link_start, floc_link_end: '</a>'.html_safe }
 
diff --git a/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml b/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
index 64549b97bd184..8529accff8ebb 100644
--- a/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
+++ b/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
@@ -6,7 +6,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = s_('ShellOperations|Limit the number of Git operations a user can perform per minute, per repository.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limits_on_git_ssh_operations.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limits_on_git_ssh_operations'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = gitlab_ui_form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-gitlab-shell-operation-limits-settings'), html: { class: 'fieldset-form' } do |f|
       = form_errors(@application_setting)
diff --git a/app/views/admin/application_settings/_localization.html.haml b/app/views/admin/application_settings/_localization.html.haml
index 25038e6f22133..e1eb0ba84eb95 100644
--- a/app/views/admin/application_settings/_localization.html.haml
+++ b/app/views/admin/application_settings/_localization.html.haml
@@ -7,7 +7,7 @@
       = f.select :first_day_of_week, first_day_of_week_choices, {}, class: 'form-control'
       .form-text.text-muted
         = _('Default first day of the week in calendars and date pickers.')
-        = link_to _('Learn more.'), help_page_path('administration/settings/localization.md', anchor: 'change-the-default-first-day-of-the-week'), target: '_blank', rel: 'noopener noreferrer'
+        = link_to _('Learn more.'), help_page_path('administration/settings/localization', anchor: 'change-the-default-first-day-of-the-week'), target: '_blank', rel: 'noopener noreferrer'
 
     .form-group
       = f.label :time_tracking, _('Time tracking'), class: 'label-bold'
diff --git a/app/views/admin/application_settings/_projects_api_limits.html.haml b/app/views/admin/application_settings/_projects_api_limits.html.haml
index dde8ab079580a..d84df972c6d62 100644
--- a/app/views/admin/application_settings/_projects_api_limits.html.haml
+++ b/app/views/admin/application_settings/_projects_api_limits.html.haml
@@ -6,7 +6,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set the per-IP address rate limit applicable to unauthenticated requests for getting a list of projects via the API.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_projects_api.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_projects_api'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = gitlab_ui_form_for @application_setting, url: network_admin_application_settings_path(anchor: 'js-projects-api-limits-settings'), html: { class: 'fieldset-form' } do |f|
       = form_errors(@application_setting)
diff --git a/app/views/admin/application_settings/_runner_registrars_form.html.haml b/app/views/admin/application_settings/_runner_registrars_form.html.haml
index b112c273aaded..36bab2f665087 100644
--- a/app/views/admin/application_settings/_runner_registrars_form.html.haml
+++ b/app/views/admin/application_settings/_runner_registrars_form.html.haml
@@ -7,7 +7,7 @@
         = s_('Runners|Runner version management')
       %span.form-text.gl-mb-3.gl-mt-0
         - help_text = s_('Runners|Official runner version data is periodically fetched from GitLab.com to determine whether the runners need upgrades.')
-        - learn_more_link = link_to _('Learn more.'), help_page_path('ci/runners/runners_scope.md', anchor: 'determine-which-runners-need-to-be-upgraded'), target: '_blank', rel: 'noopener noreferrer'
+        - learn_more_link = link_to _('Learn more.'), help_page_path('ci/runners/runners_scope', anchor: 'determine-which-runners-need-to-be-upgraded'), target: '_blank', rel: 'noopener noreferrer'
         = f.gitlab_ui_checkbox_component :update_runner_versions_enabled,
           s_('Runners|Fetch GitLab Runner release version data from GitLab.com'),
           help_text: '%{help_text} %{learn_more_link}'.html_safe % { help_text: help_text, learn_more_link: learn_more_link }
diff --git a/app/views/admin/application_settings/general.html.haml b/app/views/admin/application_settings/general.html.haml
index dad0bf08bb09a..d84fbe94f6519 100644
--- a/app/views/admin/application_settings/general.html.haml
+++ b/app/views/admin/application_settings/general.html.haml
@@ -66,7 +66,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set sign-in restrictions for all users.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/sign_in_restrictions.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/sign_in_restrictions'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'signin'
 
@@ -78,7 +78,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Add a Terms of Service agreement and Privacy Policy for users of this GitLab instance.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/terms.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/terms'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'terms'
 
@@ -95,7 +95,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set the maximum session time for a web terminal.')
-      = link_to _('How do I use a web terminal?'), help_page_path('ci/environments/index.md', anchor: 'web-terminals-deprecated'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('How do I use a web terminal?'), help_page_path('ci/environments/index', anchor: 'web-terminals-deprecated'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'terminal'
 
diff --git a/app/views/admin/application_settings/network.html.haml b/app/views/admin/application_settings/network.html.haml
index fb22df9d0664f..ae5f7a5cec3ec 100644
--- a/app/views/admin/application_settings/network.html.haml
+++ b/app/views/admin/application_settings/network.html.haml
@@ -22,7 +22,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set limits for web and API requests.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/user_and_ip_rate_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/user_and_ip_rate_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'ip_limits'
 
@@ -34,7 +34,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set rate limits for package registry API requests that supersede the general user and IP rate limits.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/package_registry_rate_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/package_registry_rate_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render partial: 'network_rate_limits', locals: { anchor: 'js-packages-limits-settings', setting_fragment: 'packages_api' }
 
@@ -68,7 +68,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Configure specific limits for deprecated API requests that supersede the general user and IP rate limits.')
-      = link_to _('Which API requests are affected?'), help_page_path('administration/settings/deprecated_api_rate_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Which API requests are affected?'), help_page_path('administration/settings/deprecated_api_rate_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render partial: 'network_rate_limits', locals: { anchor: 'js-deprecated-limits-settings', setting_fragment: 'deprecated_api' }
 
@@ -80,7 +80,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Configure specific limits for Git LFS requests that supersede the general user and IP rate limits.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/git_lfs_rate_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/git_lfs_rate_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'git_lfs_limits'
 
@@ -96,7 +96,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = s_('OutboundRequests|Allow requests to the local network from hooks and integrations.')
-      = link_to _('Learn more.'), help_page_path('security/webhooks.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('security/webhooks'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'outbound'
 
@@ -108,7 +108,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Rate limit access to specified paths.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/protected_paths.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/protected_paths'), target: '_blank', rel: 'noopener noreferrer'
 
   .settings-content
     = render 'protected_paths'
@@ -121,7 +121,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Limit the number of issues and epics per minute a user can create through web and API requests.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_issues_creation.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_issues_creation'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'issue_limits'
 
@@ -133,7 +133,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set the per-user rate limit for notes created by web or API requests.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_notes_creation.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_notes_creation'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'note_limits'
 
@@ -145,7 +145,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set the per-user rate limit for getting a user by ID via the API.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_users_api.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_users_api'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'users_api_limits'
 
@@ -159,7 +159,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Set per-user rate limits for imports and exports of projects and groups.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/import_export_rate_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/import_export_rate_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'import_export_limits'
 
@@ -171,7 +171,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Limit the number of pipeline creation requests per minute. This limit includes pipelines created through the UI, the API, and by background processing.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_pipelines_creation.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/rate_limit_on_pipelines_creation'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'pipeline_limits'
 
diff --git a/app/views/admin/application_settings/preferences.html.haml b/app/views/admin/application_settings/preferences.html.haml
index 4590b6f45868a..3543e1d918aee 100644
--- a/app/views/admin/application_settings/preferences.html.haml
+++ b/app/views/admin/application_settings/preferences.html.haml
@@ -33,7 +33,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Additional text for the sign-in and Help page.')
-      = link_to _('Learn more.'), help_page_path('administration/settings/help_page.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/settings/help_page'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'help_page'
 
@@ -56,7 +56,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Adjust how frequently the GitLab UI polls for updates.')
-      = link_to _('Learn more.'), help_page_path('administration/polling.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/polling'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'realtime'
 
@@ -69,7 +69,7 @@
     %p.gl-text-secondary
       = _('Configure Gitaly timeouts.')
       %span
-        = link_to _('Learn more.'), help_page_path('administration/settings/gitaly_timeouts.md'), target: '_blank', rel: 'noopener noreferrer'
+        = link_to _('Learn more.'), help_page_path('administration/settings/gitaly_timeouts'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'gitaly'
 
@@ -93,7 +93,7 @@
     %p.gl-text-secondary
       = _('Limit the size of Sidekiq jobs stored in Redis.')
       %span
-        = link_to _('Learn more.'), help_page_path('administration/settings/sidekiq_job_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+        = link_to _('Learn more.'), help_page_path('administration/settings/sidekiq_job_limits'), target: '_blank', rel: 'noopener noreferrer'
 
   .settings-content
     = render 'sidekiq_job_limits'
@@ -106,6 +106,6 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = s_('TerraformLimits|Limits for Terraform features')
-      = link_to s_('TerraformLimits|Learn more about Terraform limits.'), help_page_path('administration/settings/terraform_limits.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to s_('TerraformLimits|Learn more about Terraform limits.'), help_page_path('administration/settings/terraform_limits'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'terraform_limits'
diff --git a/app/views/admin/application_settings/reporting.html.haml b/app/views/admin/application_settings/reporting.html.haml
index 91fabb505c2b3..49279c4584bec 100644
--- a/app/views/admin/application_settings/reporting.html.haml
+++ b/app/views/admin/application_settings/reporting.html.haml
@@ -25,7 +25,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Receive notification of abuse reports by email.')
-      = link_to _('Learn more.'), help_page_path('administration/review_abuse_reports.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/review_abuse_reports'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'abuse'
 
diff --git a/app/views/admin/application_settings/repository.html.haml b/app/views/admin/application_settings/repository.html.haml
index a46275ff9d578..0b31da3680424 100644
--- a/app/views/admin/application_settings/repository.html.haml
+++ b/app/views/admin/application_settings/repository.html.haml
@@ -22,7 +22,7 @@
       = expanded_by_default? ? 'Collapse' : 'Expand'
     %p.gl-text-secondary
       = _('Configure repository mirroring.')
-      = link_to _('Learn more.'), help_page_path('user/project/repository/mirror/index.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('user/project/repository/mirror/index'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render partial: 'repository_mirrors_form'
 
@@ -34,7 +34,7 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Configure repository storage.')
-      = link_to _('Learn more.'), help_page_path('administration/repository_storage_paths.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/repository_storage_paths'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'repository_storage'
 
@@ -45,9 +45,9 @@
     = render Pajamas::ButtonComponent.new(button_options: { class: 'js-settings-toggle' }) do
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
-      - repository_checks_link_url = help_page_path('administration/repository_checks.md')
+      - repository_checks_link_url = help_page_path('administration/repository_checks')
       - repository_checks_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: repository_checks_link_url }
-      - housekeeping_link_url = help_page_path('administration/housekeeping.md')
+      - housekeeping_link_url = help_page_path('administration/housekeeping')
       - housekeeping_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: housekeeping_link_url }
       = html_escape(s_('Configure %{repository_checks_link_start}repository checks%{link_end} and %{housekeeping_link_start}housekeeping%{link_end} on repositories.')) % { repository_checks_link_start: repository_checks_link_start, housekeeping_link_start: housekeeping_link_start, link_end: '</a>'.html_safe }
   .settings-content
@@ -61,6 +61,6 @@
       = expanded_by_default? ? _('Collapse') : _('Expand')
     %p.gl-text-secondary
       = _('Serve repository static objects (for example, archives and blobs) from external storage.')
-      = link_to _('Learn more.'), help_page_path('administration/static_objects_external_storage.md'), target: '_blank', rel: 'noopener noreferrer'
+      = link_to _('Learn more.'), help_page_path('administration/static_objects_external_storage'), target: '_blank', rel: 'noopener noreferrer'
   .settings-content
     = render 'repository_static_objects'
diff --git a/app/views/admin/dev_ops_report/_score.html.haml b/app/views/admin/dev_ops_report/_score.html.haml
index a504563ad917d..59cb30e8447e9 100644
--- a/app/views/admin/dev_ops_report/_score.html.haml
+++ b/app/views/admin/dev_ops_report/_score.html.haml
@@ -1,6 +1,6 @@
 - service_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled
 
 - if !service_ping_enabled
-  #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/internal_analytics/service_ping/index.md') } }
+  #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/internal_analytics/service_ping/index') } }
 - else
   #js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, no_data_image_path: image_path('dev_ops_report_no_data.svg'), devops_score_intro_image_path: image_path('dev_ops_report_overview.svg') } }
diff --git a/app/views/groups/_import_group_from_another_instance_panel.html.haml b/app/views/groups/_import_group_from_another_instance_panel.html.haml
index 38dc850553bd0..6c5a27e68c476 100644
--- a/app/views/groups/_import_group_from_another_instance_panel.html.haml
+++ b/app/views/groups/_import_group_from_another_instance_panel.html.haml
@@ -24,7 +24,7 @@
       = render Pajamas::AlertComponent.new(dismissible: false,
         variant: :warning) do |c|
         - c.with_body do
-          - docs_link = link_to('', help_page_path('user/group/import/index.md', anchor: 'migrated-group-items'), target: '_blank', rel: 'noopener noreferrer')
+          - docs_link = link_to('', help_page_path('user/group/import/index', anchor: 'migrated-group-items'), target: '_blank', rel: 'noopener noreferrer')
           = safe_format(s_('GroupsNew|Not all group items are migrated. %{docs_link_start}What items are migrated%{docs_link_end}?'), tag_pair(docs_link, :docs_link_start, :docs_link_end))
 
     %p.gl-mt-3
diff --git a/app/views/profiles/gpg_keys/index.html.haml b/app/views/profiles/gpg_keys/index.html.haml
index 982199d3d6ff5..031869cc60eff 100644
--- a/app/views/profiles/gpg_keys/index.html.haml
+++ b/app/views/profiles/gpg_keys/index.html.haml
@@ -28,7 +28,7 @@
         %h4.gl-mt-0
           = _('Add a GPG key')
         %p
-          - help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/repository/signed_commits/gpg.md') }
+          - help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/project/repository/signed_commits/gpg') }
           = _('Add a GPG key for secure access to GitLab. %{help_link_start}Learn more%{help_link_end}.').html_safe % {help_link_start: help_link_start, help_link_end: '</a>'.html_safe }
         = render 'form'
 
diff --git a/app/views/profiles/keys/_key.html.haml b/app/views/profiles/keys/_key.html.haml
index 7ba42274f8896..f80cd8cddc54d 100644
--- a/app/views/profiles/keys/_key.html.haml
+++ b/app/views/profiles/keys/_key.html.haml
@@ -25,7 +25,7 @@
     -# TODO: Remove this conditional when https://gitlab.com/gitlab-org/gitlab/-/issues/324764 is resolved.
     - if Feature.enabled?(:disable_ssh_key_used_tracking)
       = _('Unavailable')
-      = link_to sprite_icon('question-o'), help_page_path('user/ssh.md', anchor: 'view-your-accounts-ssh-keys')
+      = link_to sprite_icon('question-o'), help_page_path('user/ssh', anchor: 'view-your-accounts-ssh-keys')
     - else
       = key.last_used_at ? time_ago_with_tooltip(key.last_used_at) : _('Never')
 
diff --git a/app/views/profiles/keys/index.html.haml b/app/views/profiles/keys/index.html.haml
index 0cd41788a53cd..8477d87a5873f 100644
--- a/app/views/profiles/keys/index.html.haml
+++ b/app/views/profiles/keys/index.html.haml
@@ -30,7 +30,7 @@
         %h4.gl-mt-0
           = _('Add an SSH key')
         %p
-          - help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/ssh.md') }
+          - help_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: help_page_path('user/ssh') }
           = _('Add an SSH key for secure access to GitLab. %{help_link_start}Learn more%{help_link_end}.').html_safe % {help_link_start: help_link_start, help_link_end: '</a>'.html_safe }
         = render 'form'
 
diff --git a/app/views/profiles/personal_access_tokens/index.html.haml b/app/views/profiles/personal_access_tokens/index.html.haml
index c12f6907afbae..0457561b283a6 100644
--- a/app/views/profiles/personal_access_tokens/index.html.haml
+++ b/app/views/profiles/personal_access_tokens/index.html.haml
@@ -35,7 +35,7 @@
             path: profile_personal_access_tokens_path,
             token: @personal_access_token,
             scopes: @scopes,
-            help_path: help_page_path('user/profile/personal_access_tokens.md', anchor: 'personal-access-token-scopes')
+            help_path: help_page_path('user/profile/personal_access_tokens', anchor: 'personal-access-token-scopes')
 
   #js-access-token-table-app{ data: { access_token_type: type, access_token_type_plural: type_plural, initial_active_access_tokens: @active_access_tokens.to_json } }
 
diff --git a/app/views/projects/blob/_pipeline_tour_success.html.haml b/app/views/projects/blob/_pipeline_tour_success.html.haml
index f645d23aa1cf6..be2654c9b86da 100644
--- a/app/views/projects/blob/_pipeline_tour_success.html.haml
+++ b/app/views/projects/blob/_pipeline_tour_success.html.haml
@@ -1,6 +1,6 @@
 .js-success-pipeline-modal{ data: { 'commit-cookie': suggest_pipeline_commit_cookie_name,
   'go-to-pipelines-path': project_pipelines_path(@project),
   'project-merge-requests-path': project_merge_requests_path(@project),
-  'example-link': help_page_path('ci/examples/index.md'),
+  'example-link': help_page_path('ci/examples/index'),
   'code-quality-link': help_page_path('ci/testing/code_quality'),
   'human-access': @project.team.human_max_access(current_user&.id) } }
diff --git a/app/views/projects/commit/_signature_badge.html.haml b/app/views/projects/commit/_signature_badge.html.haml
index 6aefc2eaa8b74..d4a775728e392 100644
--- a/app/views/projects/commit/_signature_badge.html.haml
+++ b/app/views/projects/commit/_signature_badge.html.haml
@@ -17,17 +17,17 @@
   - if signature.x509?
     = render partial: "projects/commit/x509/certificate_details", locals: { signature: signature }
 
-    = link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/signed_commits/x509.md'), class: 'gl-link gl-display-block')
+    = link_to(_('Learn more about X.509 signed commits'), help_page_path('user/project/repository/signed_commits/x509'), class: 'gl-link gl-display-block')
   - elsif signature.ssh?
     = _('SSH key fingerprint:')
     %span.gl-font-monospace= signature.key_fingerprint_sha256 || _('Unknown')
 
-    = link_to(_('Learn about signing commits with SSH keys.'), help_page_path('user/project/repository/signed_commits/ssh.md'), class: 'gl-link gl-display-block gl-mt-3')
+    = link_to(_('Learn about signing commits with SSH keys.'), help_page_path('user/project/repository/signed_commits/ssh'), class: 'gl-link gl-display-block gl-mt-3')
   - else
     = _('GPG Key ID:')
     %span.gl-font-monospace= signature.gpg_key_primary_keyid
 
-    = link_to(_('Learn about signing commits'), help_page_path('user/project/repository/signed_commits/index.md'), class: 'gl-link gl-display-block gl-mt-3')
+    = link_to(_('Learn about signing commits'), help_page_path('user/project/repository/signed_commits/index'), class: 'gl-link gl-display-block gl-mt-3')
 
 %a.signature-badge.gl-display-inline-block.gl-ml-4{ role: 'button', tabindex: 0, data: { toggle: 'popover', html: 'true', placement: 'top', title: title, content: content } }
   = gl_badge_tag label, variant: variant
diff --git a/ee/app/components/namespaces/storage/limit_alert_component.rb b/ee/app/components/namespaces/storage/limit_alert_component.rb
index 1f536fc7f9c8e..6c0dbade7e933 100644
--- a/ee/app/components/namespaces/storage/limit_alert_component.rb
+++ b/ee/app/components/namespaces/storage/limit_alert_component.rb
@@ -200,7 +200,7 @@ def alert_message_cta
           ),
           group_member_link_start: link_start_tag(group_group_members_path(root_namespace)),
           purchase_more_link_start: link_start_tag(
-            help_page_path('subscriptions/gitlab_com/index.md', anchor: 'purchase-more-storage-and-transfer')
+            help_page_path('subscriptions/gitlab_com/index', anchor: 'purchase-more-storage-and-transfer')
           ),
           link_end: "</a>"
         }
diff --git a/ee/app/components/namespaces/storage/repository_limit_alert_component.rb b/ee/app/components/namespaces/storage/repository_limit_alert_component.rb
index 81c1e518d2bbe..ac14aa58a63c9 100644
--- a/ee/app/components/namespaces/storage/repository_limit_alert_component.rb
+++ b/ee/app/components/namespaces/storage/repository_limit_alert_component.rb
@@ -64,7 +64,7 @@ def alert_message_cta
         text_args = {
           group_member_link_start: link_start_tag(group_group_members_path(root_namespace)),
           purchase_more_link_start: link_start_tag(
-            help_page_path('subscriptions/gitlab_com/index.md', anchor: 'purchase-more-storage-and-transfer')
+            help_page_path('subscriptions/gitlab_com/index', anchor: 'purchase-more-storage-and-transfer')
           ),
           link_end: "</a>"
         }
diff --git a/ee/app/presenters/ee/merge_request_presenter.rb b/ee/app/presenters/ee/merge_request_presenter.rb
index 92e2684694a34..1b86e5fbbf976 100644
--- a/ee/app/presenters/ee/merge_request_presenter.rb
+++ b/ee/app/presenters/ee/merge_request_presenter.rb
@@ -26,7 +26,7 @@ def api_status_checks_path
     end
 
     def merge_immediately_docs_path
-      help_page_path('ci/pipelines/merge_trains.md', anchor: 'immediately-merge-a-merge-request-with-a-merge-train')
+      help_page_path('ci/pipelines/merge_trains', anchor: 'immediately-merge-a-merge-request-with-a-merge-train')
     end
 
     delegator_override :target_project
diff --git a/ee/app/serializers/epic_entity.rb b/ee/app/serializers/epic_entity.rb
index ea557862cbcb3..1310ac1be6700 100644
--- a/ee/app/serializers/epic_entity.rb
+++ b/ee/app/serializers/epic_entity.rb
@@ -56,6 +56,6 @@ class EpicEntity < IssuableEntity
   end
 
   expose :confidential_epics_docs_path, if: -> (epic) { epic.confidential? } do |epic|
-    help_page_path('user/group/epics/manage_epics.md', anchor: 'make-an-epic-confidential')
+    help_page_path('user/group/epics/manage_epics', anchor: 'make-an-epic-confidential')
   end
 end
diff --git a/lib/sidebars/projects/menus/infrastructure_menu.rb b/lib/sidebars/projects/menus/infrastructure_menu.rb
index b08845a37e6d5..d3c9f3a64660a 100644
--- a/lib/sidebars/projects/menus/infrastructure_menu.rb
+++ b/lib/sidebars/projects/menus/infrastructure_menu.rb
@@ -70,7 +70,7 @@ def kubernetes_hint_html_options
                     highlight: Users::CalloutsHelper::GKE_CLUSTER_INTEGRATION,
                     highlight_priority: Users::Callout.feature_names[:GKE_CLUSTER_INTEGRATION],
                     dismiss_endpoint: callouts_path,
-                    auto_devops_help_path: help_page_path('topics/autodevops/index.md') } }
+                    auto_devops_help_path: help_page_path('topics/autodevops/index') } }
         end
 
         def terraform_states_menu_item
diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb
index 6624404bc4982..734ff80e7d963 100644
--- a/spec/helpers/environments_helper_spec.rb
+++ b/spec/helpers/environments_helper_spec.rb
@@ -23,8 +23,8 @@
         'settings_path' => edit_project_settings_integration_path(project, 'prometheus'),
         'clusters_path' => project_clusters_path(project),
         'current_environment_name' => environment.name,
-        'documentation_path' => help_page_path('administration/monitoring/prometheus/index.md'),
-        'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
+        'documentation_path' => help_page_path('administration/monitoring/prometheus/index'),
+        'add_dashboard_documentation_path' => help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project'),
         'empty_getting_started_svg_path' => match_asset_path('/assets/illustrations/monitoring/getting_started.svg'),
         'empty_loading_svg_path' => match_asset_path('/assets/illustrations/monitoring/loading.svg'),
         'empty_no_data_svg_path' => match_asset_path('/assets/illustrations/monitoring/no_data.svg'),
diff --git a/spec/helpers/ide_helper_spec.rb b/spec/helpers/ide_helper_spec.rb
index 47500b8e21e33..d5d7f8f72b33a 100644
--- a/spec/helpers/ide_helper_spec.rb
+++ b/spec/helpers/ide_helper_spec.rb
@@ -101,7 +101,7 @@
           'user-preferences-path' => profile_preferences_path,
           'sign-in-path' => 'test-sign-in-path',
           'new-web-ide-help-page-path' =>
-            help_page_path('user/project/web_ide/index.md', anchor: 'vscode-reimplementation'),
+            help_page_path('user/project/web_ide/index', anchor: 'vscode-reimplementation'),
           'csp-nonce' => 'test-csp-nonce',
           'ide-remote-path' => ide_remote_path(remote_host: ':remote_host', remote_path: ':remote_path')
         }
diff --git a/spec/helpers/operations_helper_spec.rb b/spec/helpers/operations_helper_spec.rb
index 9e50712a386e2..e018ab41a8302 100644
--- a/spec/helpers/operations_helper_spec.rb
+++ b/spec/helpers/operations_helper_spec.rb
@@ -30,7 +30,7 @@
 
       it 'returns the correct values' do
         expect(subject).to eq(
-          'alerts_setup_url' => help_page_path('operations/incident_management/integrations.md', anchor: 'configuration'),
+          'alerts_setup_url' => help_page_path('operations/incident_management/integrations', anchor: 'configuration'),
           'alerts_usage_url' => project_alert_management_index_path(project),
           'prometheus_form_path' => project_settings_integration_path(project, prometheus_integration),
           'prometheus_reset_key_path' => reset_alerting_token_project_settings_operations_path(project),
diff --git a/spec/presenters/clusters/cluster_presenter_spec.rb b/spec/presenters/clusters/cluster_presenter_spec.rb
index 755f1ea607876..aacb696a88e6a 100644
--- a/spec/presenters/clusters/cluster_presenter_spec.rb
+++ b/spec/presenters/clusters/cluster_presenter_spec.rb
@@ -123,7 +123,7 @@
           'clusters-path': clusterable_presenter.index_path,
           'dashboard-endpoint': clusterable_presenter.metrics_dashboard_path(cluster),
           'documentation-path': help_page_path('user/infrastructure/clusters/manage/clusters_health'),
-          'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index.md', anchor: 'add-a-new-dashboard-to-your-project'),
+          'add-dashboard-documentation-path': help_page_path('operations/metrics/dashboards/index', anchor: 'add-a-new-dashboard-to-your-project'),
           'empty-getting-started-svg-path': match_asset_path('/assets/illustrations/monitoring/getting_started.svg'),
           'empty-loading-svg-path': match_asset_path('/assets/illustrations/monitoring/loading.svg'),
           'empty-no-data-svg-path': match_asset_path('/assets/illustrations/monitoring/no_data.svg'),
diff --git a/spec/serializers/issue_entity_spec.rb b/spec/serializers/issue_entity_spec.rb
index a8fd96a03bb13..1faf4c6fe4c75 100644
--- a/spec/serializers/issue_entity_spec.rb
+++ b/spec/serializers/issue_entity_spec.rb
@@ -149,7 +149,7 @@
       end
 
       it 'returns archived project doc' do
-        expect(subject[:archived_project_docs_path]).to eq('/help/user/project/settings/index.md#archive-a-project')
+        expect(subject[:archived_project_docs_path]).to eq('/help/user/project/settings/index#archive-a-project')
       end
     end
   end
-- 
GitLab