From 552dc183f03f8ca7b691928c5c3740d2f5e48a54 Mon Sep 17 00:00:00 2001
From: Peter Leitzen <pleitzen@gitlab.com>
Date: Thu, 1 Feb 2024 17:54:33 +0100
Subject: [PATCH] CI: Check Ruby syntax for rake and rackup files

---
 .gitlab/ci/rules.gitlab-ci.yml                |  2 ++
 .../lib/tooling/check_ruby_syntax_spec.rb     | 26 +++++++++++++++----
 tooling/lib/tooling/check_ruby_syntax.rb      |  5 ++--
 3 files changed, 26 insertions(+), 7 deletions(-)

diff --git a/.gitlab/ci/rules.gitlab-ci.yml b/.gitlab/ci/rules.gitlab-ci.yml
index 40433995b2581..fd3597f144235 100644
--- a/.gitlab/ci/rules.gitlab-ci.yml
+++ b/.gitlab/ci/rules.gitlab-ci.yml
@@ -333,7 +333,9 @@
   - "**/Dangerfile"
   - "**/Gemfile"
   - "**/Guardfile"
+  - "**/*.rake"
   - "**/*.rb"
+  - "**/*.ru"
 
 # Backend patterns + .ci-patterns
 .backend-patterns: &backend-patterns
diff --git a/spec/tooling/lib/tooling/check_ruby_syntax_spec.rb b/spec/tooling/lib/tooling/check_ruby_syntax_spec.rb
index cc1bc8e622302..9f80f5b905b66 100644
--- a/spec/tooling/lib/tooling/check_ruby_syntax_spec.rb
+++ b/spec/tooling/lib/tooling/check_ruby_syntax_spec.rb
@@ -26,14 +26,30 @@
       it { is_expected.to eq([]) }
     end
 
-    context "with files ending with .rb" do
+    context "with files ending with Ruby extensions" do
+      let(:ruby_files) do
+        %w[
+          ruby_file.rb
+          rspec.html.haml_spec.rb
+          task.rake
+          config.ru
+        ]
+      end
+
+      let(:non_ruby_files) do
+        %w[
+          a.txt
+          a.erb
+        ]
+      end
+
       before do
-        FileUtils.touch("foo.rb")
-        FileUtils.touch("bar.rb")
-        FileUtils.touch("baz.erb")
+        (ruby_files + non_ruby_files).each do |file|
+          FileUtils.touch(file)
+        end
       end
 
-      it { is_expected.to contain_exactly("foo.rb", "bar.rb") }
+      it { is_expected.to match_array(ruby_files) }
     end
 
     context "with special Ruby files" do
diff --git a/tooling/lib/tooling/check_ruby_syntax.rb b/tooling/lib/tooling/check_ruby_syntax.rb
index f769ca0199138..6941a10c0163b 100644
--- a/tooling/lib/tooling/check_ruby_syntax.rb
+++ b/tooling/lib/tooling/check_ruby_syntax.rb
@@ -7,7 +7,8 @@ module Tooling
   #
   # It does not check for compile time warnings yet. See https://gitlab.com/-/snippets/1929968
   class CheckRubySyntax
-    VALID_RUBYFILES = %w[Rakefile Dangerfile Gemfile Guardfile].to_set.freeze
+    VALID_RUBY_FILES = %w[Rakefile Dangerfile Gemfile Guardfile].to_set.freeze
+    VALID_RUBY_EXTENSIONS = %w[.rb .rake .ru].freeze
 
     attr_reader :files
 
@@ -18,7 +19,7 @@ def initialize(files)
     def ruby_files
       @ruby_files ||=
         @files.select do |file|
-          file.end_with?(".rb") || VALID_RUBYFILES.include?(File.basename(file))
+          file.end_with?(*VALID_RUBY_EXTENSIONS) || VALID_RUBY_FILES.include?(File.basename(file))
         end
     end
 
-- 
GitLab