diff --git a/Dangerfile b/Dangerfile
index d0a605f8d8e1251edeff986cf93a8bf2b6a83ae3..094d55e8652d074b1985c72114c02c2b9d116430 100644
--- a/Dangerfile
+++ b/Dangerfile
@@ -19,4 +19,5 @@ unless helper.release_automation?
   danger.import_dangerfile(path: 'danger/single_codebase')
   danger.import_dangerfile(path: 'danger/gitlab_ui_wg')
   danger.import_dangerfile(path: 'danger/ce_ee_vue_templates')
+  danger.import_dangerfile(path: 'danger/only_documentation')
 end
diff --git a/danger/only_documentation/Dangerfile b/danger/only_documentation/Dangerfile
new file mode 100644
index 0000000000000000000000000000000000000000..8e4564f22b62c236274932d0fb67fbf6f0939aee
--- /dev/null
+++ b/danger/only_documentation/Dangerfile
@@ -0,0 +1,24 @@
+# rubocop:disable Style/SignalException
+# frozen_string_literal: true
+
+has_only_docs_changes = helper.all_changed_files.all? { |file| file.start_with?('doc/') }
+is_docs_only_branch = gitlab.branch_for_head =~ /(^docs[\/-].*|.*-docs$)/
+
+if is_docs_only_branch && !has_only_docs_changes
+  fail "It seems like your branch name has a `docs` prefix or suffix. "\
+    "The CI won't run the full pipeline, but you also have changed non-docs files. "\
+    "Please recreate this MR with a new branch name."
+end
+
+if has_only_docs_changes && !is_docs_only_branch
+  markdown(<<~MARKDOWN)
+
+  ## Documentation only changes
+
+  Hey! Seems your merge request contains only docs changes.
+  Tired of waiting 2 hours for the pipeline to finish?
+  Next time, prepend `docs-` to [your branch name](https://docs.gitlab.com/ee/development/documentation/#branch-naming)
+  and the pipeline will finish before you say GitLab (x300)!
+
+  MARKDOWN
+end