From fb444b78aeb04bbd519867ff47db34bd9e76a1c5 Mon Sep 17 00:00:00 2001
From: Steve Abrams <sabrams@gitlab.com>
Date: Tue, 18 Apr 2023 11:35:03 -0600
Subject: [PATCH] Skip certain Danger rules for stable branch MRs

- Skip database warnings
- Skip product intelligence review
- Skip data team warnings
---
 danger/database/Dangerfile                |  2 ++
 danger/datateam/Dangerfile                |  2 ++
 danger/product_intelligence/Dangerfile    |  2 ++
 danger/roulette/Dangerfile                |  3 +++
 spec/tooling/danger/stable_branch_spec.rb | 22 ++++++++++++++++++++++
 tooling/danger/stable_branch.rb           |  4 ++--
 6 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/danger/database/Dangerfile b/danger/database/Dangerfile
index df6ffab7c943a..96134ea66a696 100644
--- a/danger/database/Dangerfile
+++ b/danger/database/Dangerfile
@@ -45,6 +45,8 @@ geo_migration_created = !git.added_files.grep(%r{\Aee/db/geo/(post_)?migrate/}).
 
 format_str = helper.ci? ? SCHEMA_NOT_UPDATED_MESSAGE_FULL : SCHEMA_NOT_UPDATED_MESSAGE_SHORT
 
+return if stable_branch.valid_stable_branch?
+
 if non_geo_migration_created && !non_geo_db_schema_updated
   warn format(format_str, migrations: 'migrations', schema: helper.html_link("db/structure.sql"))
 end
diff --git a/danger/datateam/Dangerfile b/danger/datateam/Dangerfile
index ed2703f31e6f8..3cd0578a068d8 100644
--- a/danger/datateam/Dangerfile
+++ b/danger/datateam/Dangerfile
@@ -1,3 +1,5 @@
 # frozen_string_literal: true
 
+return if stable_branch.valid_stable_branch?
+
 markdown(datateam.build_message) if datateam.impacted?
diff --git a/danger/product_intelligence/Dangerfile b/danger/product_intelligence/Dangerfile
index 86888fe542e64..b20c56a7b7ce2 100644
--- a/danger/product_intelligence/Dangerfile
+++ b/danger/product_intelligence/Dangerfile
@@ -1,5 +1,7 @@
 # frozen_string_literal: true
 
+return if stable_branch.valid_stable_branch?
+
 product_intelligence.check!
 
 product_intelligence.check_affected_scopes!
diff --git a/danger/roulette/Dangerfile b/danger/roulette/Dangerfile
index 32899c4d74fb0..3256ff25bbf14 100644
--- a/danger/roulette/Dangerfile
+++ b/danger/roulette/Dangerfile
@@ -104,6 +104,9 @@ categories << :product_intelligence if helper.mr_labels.include?("product intell
 # Skip Product intelligence reviews for growth experiment MRs
 categories.delete(:product_intelligence) if helper.mr_labels.include?("growth experiment")
 
+# Skip specialty reviews for stable branch MRs since they have already been merged to the default branch
+categories.subtract([:database, :ux, :product_intelligence]) if stable_branch.valid_stable_branch?
+
 if changes.any?
   random_roulette_spins = roulette.spin(nil, categories, timezone_experiment: false)
 
diff --git a/spec/tooling/danger/stable_branch_spec.rb b/spec/tooling/danger/stable_branch_spec.rb
index b0a8ab3c1325c..fc644413a5a45 100644
--- a/spec/tooling/danger/stable_branch_spec.rb
+++ b/spec/tooling/danger/stable_branch_spec.rb
@@ -351,4 +351,26 @@
       it { is_expected.to eq(result) }
     end
   end
+
+  describe '#valid_stable_branch?' do
+    it "returns false when on the default branch" do
+      allow(fake_helper).to receive(:mr_target_branch).and_return('main')
+
+      expect(stable_branch.valid_stable_branch?).to be(false)
+    end
+
+    it "returns true when on a stable branch" do
+      allow(fake_helper).to receive(:mr_target_branch).and_return('15-1-stable-ee')
+      allow(fake_helper).to receive(:security_mr?).and_return(false)
+
+      expect(stable_branch.valid_stable_branch?).to be(true)
+    end
+
+    it "returns false when on a stable branch on a security MR" do
+      allow(fake_helper).to receive(:mr_target_branch).and_return('15-1-stable-ee')
+      allow(fake_helper).to receive(:security_mr?).and_return(true)
+
+      expect(stable_branch.valid_stable_branch?).to be(false)
+    end
+  end
 end
diff --git a/tooling/danger/stable_branch.rb b/tooling/danger/stable_branch.rb
index 2751a6f01918d..9deb4838079e0 100644
--- a/tooling/danger/stable_branch.rb
+++ b/tooling/danger/stable_branch.rb
@@ -85,12 +85,12 @@ def encourage_package_and_qa_execution?
           !has_flaky_failure_label?
       end
 
-      private
-
       def valid_stable_branch?
         !!stable_target_branch && !helper.security_mr?
       end
 
+      private
+
       def package_and_test_bridge_and_pipeline_status
         mr_head_pipeline_id = gitlab.mr_json.dig('head_pipeline', 'id')
         return unless mr_head_pipeline_id
-- 
GitLab