From 88a1c327fd22e82623e51521de180537612e3b27 Mon Sep 17 00:00:00 2001
From: James Fargher <proglottis@gmail.com>
Date: Tue, 8 Jun 2021 14:03:45 +0000
Subject: [PATCH] Enable Style/GlobalStdStream

---
 .rubocop_todo.yml                             |  5 ----
 doc/administration/file_hooks.md              |  2 +-
 doc/administration/troubleshooting/debug.md   |  2 +-
 .../gitlab_rails_cheat_sheet.md               |  4 +--
 .../navigating_gitlab_via_rails_console.md    |  2 +-
 doc/development/profiling.md                  |  2 +-
 ee/lib/tasks/gitlab/elastic.rake              |  2 +-
 file_hooks/examples/save_to_file.rb           |  2 +-
 lib/gitlab/profiler.rb                        |  2 +-
 lib/gitlab/sidekiq_cluster/cli.rb             |  2 +-
 lib/gitlab/task_helpers.rb                    |  8 +++---
 lib/gitlab/utils/measuring.rb                 |  4 +--
 lib/tasks/gitlab/artifacts/migrate.rake       |  4 +--
 lib/tasks/gitlab/cleanup.rake                 |  2 +-
 lib/tasks/gitlab/db.rake                      |  2 +-
 lib/tasks/gitlab/docs/redirect.rake           |  4 +--
 lib/tasks/gitlab/doctor/secrets.rake          |  2 +-
 lib/tasks/gitlab/ldap.rake                    |  2 +-
 lib/tasks/gitlab/lfs/migrate.rake             |  4 +--
 lib/tasks/gitlab/packages/composer.rake       |  2 +-
 lib/tasks/gitlab/packages/events.rake         |  4 +--
 lib/tasks/gitlab/packages/migrate.rake        |  2 +-
 lib/tasks/gitlab/pages.rake                   |  6 ++--
 lib/tasks/gitlab/terraform/migrate.rake       |  2 +-
 lib/tasks/gitlab/uploads/migrate.rake         |  4 +--
 lib/tasks/gitlab/uploads/sanitize.rake        |  2 +-
 lib/tasks/gitlab/x509/update.rake             |  2 +-
 lib/tasks/import.rake                         |  4 +--
 lib/tasks/tokens.rake                         |  2 +-
 qa/qa/tools/delete_projects.rb                |  8 +++---
 qa/qa/tools/delete_subgroups.rb               |  8 +++---
 qa/qa/tools/delete_test_ssh_keys.rb           |  8 +++---
 qa/qa/tools/generate_perf_testdata.rb         | 28 +++++++++----------
 .../revoke_all_personal_access_tokens.rb      |  4 +--
 scripts/trigger-build                         |  2 +-
 spec/lib/gitlab/file_hook_spec.rb             |  2 +-
 spec/lib/gitlab/profiler_spec.rb              |  8 ++++--
 spec/lib/gitlab/utils/measuring_spec.rb       |  2 +-
 spec/support/helpers/gitaly_setup.rb          |  4 +--
 spec/tasks/gitlab/ldap_rake_spec.rb           |  4 +--
 .../gitlab/terraform/migrate_rake_spec.rb     |  2 +-
 41 files changed, 83 insertions(+), 84 deletions(-)

diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index 39b1518558d48..ad1f7afa451b1 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -742,11 +742,6 @@ Style/ExplicitBlockArgument:
 Style/FormatString:
   Enabled: false
 
-# Offense count: 67
-# Cop supports --auto-correct.
-Style/GlobalStdStream:
-  Enabled: false
-
 # Offense count: 897
 # Configuration parameters: MinBodyLength.
 Style/GuardClause:
diff --git a/doc/administration/file_hooks.md b/doc/administration/file_hooks.md
index c60f00404968b..f6bbd2338be2a 100644
--- a/doc/administration/file_hooks.md
+++ b/doc/administration/file_hooks.md
@@ -79,7 +79,7 @@ require 'json'
 require 'mail'
 
 # The incoming variables are in JSON format so we need to parse it first.
-ARGS = JSON.parse(STDIN.read)
+ARGS = JSON.parse($stdin.read)
 
 # We only want to trigger this file hook on the event project_create
 return unless ARGS['event_name'] == 'project_create'
diff --git a/doc/administration/troubleshooting/debug.md b/doc/administration/troubleshooting/debug.md
index 7be51cae84787..c1e51001961c0 100644
--- a/doc/administration/troubleshooting/debug.md
+++ b/doc/administration/troubleshooting/debug.md
@@ -26,7 +26,7 @@ You can enable output of Active Record debug logging in the Rails console
 session by running:
 
 ```ruby
-ActiveRecord::Base.logger = Logger.new(STDOUT)
+ActiveRecord::Base.logger = Logger.new($stdout)
 ```
 
 This will show information about database queries triggered by any Ruby code
diff --git a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
index dd1f368043537..c56b2a45c396e 100644
--- a/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
+++ b/doc/administration/troubleshooting/gitlab_rails_cheat_sheet.md
@@ -100,7 +100,7 @@ Rails.cache.instance_variable_get(:@data).keys
 
 ```ruby
 # Before 11.6.0
-logger = Logger.new(STDOUT)
+logger = Logger.new($stdout)
 admin_token = User.find_by_username('ADMIN_USERNAME').personal_access_tokens.first.token
 app.get("URL/?private_token=#{admin_token}")
 
@@ -113,7 +113,7 @@ Gitlab::Profiler.with_user(admin) { app.get(url) }
 ## Using the GitLab profiler inside console (used as of 10.5)
 
 ```ruby
-logger = Logger.new(STDOUT)
+logger = Logger.new($stdout)
 admin = User.find_by_username('ADMIN_USERNAME')
 Gitlab::Profiler.profile('URL', logger: logger, user: admin)
 ```
diff --git a/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md b/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
index 7c0a1c1b39734..e55118d7309f9 100644
--- a/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
+++ b/doc/administration/troubleshooting/navigating_gitlab_via_rails_console.md
@@ -46,7 +46,7 @@ Let's enable debug logging for Active Record so we can see the underlying
 database queries made:
 
 ```ruby
-ActiveRecord::Base.logger = Logger.new(STDOUT)
+ActiveRecord::Base.logger = Logger.new($stdout)
 ```
 
 Now, let's try retrieving a user from the database:
diff --git a/doc/development/profiling.md b/doc/development/profiling.md
index 81881a4d490bd..781138a6ade61 100644
--- a/doc/development/profiling.md
+++ b/doc/development/profiling.md
@@ -49,7 +49,7 @@ ActiveRecord and ActionController log output to that logger. Further options are
 documented with the method source.
 
 ```ruby
-Gitlab::Profiler.profile('/gitlab-org/gitlab-test', user: User.first, logger: Logger.new(STDOUT))
+Gitlab::Profiler.profile('/gitlab-org/gitlab-test', user: User.first, logger: Logger.new($stdout))
 ```
 
 There is also a RubyProf printer available:
diff --git a/ee/lib/tasks/gitlab/elastic.rake b/ee/lib/tasks/gitlab/elastic.rake
index 33431ef61dbec..ff6d9027c50de 100644
--- a/ee/lib/tasks/gitlab/elastic.rake
+++ b/ee/lib/tasks/gitlab/elastic.rake
@@ -51,7 +51,7 @@ namespace :gitlab do
 
     desc "GitLab | Elasticsearch | Index all snippets"
     task index_snippets: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info("Indexing snippets...")
 
       Snippet.es_import
diff --git a/file_hooks/examples/save_to_file.rb b/file_hooks/examples/save_to_file.rb
index 61b0df9bfd6e3..88e5986337b43 100755
--- a/file_hooks/examples/save_to_file.rb
+++ b/file_hooks/examples/save_to_file.rb
@@ -1,3 +1,3 @@
 #!/usr/bin/env ruby
-x = STDIN.read
+x = $stdin.read
 File.write('/tmp/rb-data.txt', x)
diff --git a/lib/gitlab/profiler.rb b/lib/gitlab/profiler.rb
index 42f43f998c490..5c9b029a107d6 100644
--- a/lib/gitlab/profiler.rb
+++ b/lib/gitlab/profiler.rb
@@ -170,7 +170,7 @@ def self.log_load_times_by_model(logger)
     def self.print_by_total_time(result, options = {})
       default_options = { sort_method: :total_time, filter_by: :total_time }
 
-      RubyProf::FlatPrinter.new(result).print(STDOUT, default_options.merge(options))
+      RubyProf::FlatPrinter.new(result).print($stdout, default_options.merge(options))
     end
   end
 end
diff --git a/lib/gitlab/sidekiq_cluster/cli.rb b/lib/gitlab/sidekiq_cluster/cli.rb
index 9490d543dd1b7..5d633620c7e52 100644
--- a/lib/gitlab/sidekiq_cluster/cli.rb
+++ b/lib/gitlab/sidekiq_cluster/cli.rb
@@ -22,7 +22,7 @@ class CLI
 
       CommandError = Class.new(StandardError)
 
-      def initialize(log_output = STDERR)
+      def initialize(log_output = $stderr)
         require_relative '../../../lib/gitlab/sidekiq_logging/json_formatter'
 
         # As recommended by https://github.com/mperham/sidekiq/wiki/Advanced-Options#concurrency
diff --git a/lib/gitlab/task_helpers.rb b/lib/gitlab/task_helpers.rb
index 1ceccc64ec0d7..227962fc0f776 100644
--- a/lib/gitlab/task_helpers.rb
+++ b/lib/gitlab/task_helpers.rb
@@ -61,7 +61,7 @@ def os_name
     def prompt(message, choices = nil)
       begin
         print(message)
-        answer = STDIN.gets.chomp
+        answer = $stdin.gets.chomp
       end while choices.present? && !choices.include?(answer)
       answer
     end
@@ -70,12 +70,12 @@ def prompt(message, choices = nil)
     #
     # message - custom message to display before input
     def prompt_for_password(message = 'Enter password: ')
-      unless STDIN.tty?
+      unless $stdin.tty?
         print(message)
-        return STDIN.gets.chomp
+        return $stdin.gets.chomp
       end
 
-      STDIN.getpass(message)
+      $stdin.getpass(message)
     end
 
     # Runs the given command and matches the output against the given pattern
diff --git a/lib/gitlab/utils/measuring.rb b/lib/gitlab/utils/measuring.rb
index ffd12c1b51843..dc43d977a6217 100644
--- a/lib/gitlab/utils/measuring.rb
+++ b/lib/gitlab/utils/measuring.rb
@@ -9,7 +9,7 @@ class << self
         attr_writer :logger
 
         def logger
-          @logger ||= Logger.new(STDOUT)
+          @logger ||= Logger.new($stdout)
         end
       end
 
@@ -67,7 +67,7 @@ def with_measure_time
 
       def log_info(details)
         details = base_log_data.merge(details)
-        details = details.to_yaml if ActiveSupport::Logger.logger_outputs_to?(Measuring.logger, STDOUT)
+        details = details.to_yaml if ActiveSupport::Logger.logger_outputs_to?(Measuring.logger, $stdout)
         Measuring.logger.info(details)
       end
     end
diff --git a/lib/tasks/gitlab/artifacts/migrate.rake b/lib/tasks/gitlab/artifacts/migrate.rake
index 4c312ea492b33..084e7c78906d5 100644
--- a/lib/tasks/gitlab/artifacts/migrate.rake
+++ b/lib/tasks/gitlab/artifacts/migrate.rake
@@ -7,7 +7,7 @@ desc 'GitLab | Artifacts | Migrate files for artifacts to comply with new storag
 namespace :gitlab do
   namespace :artifacts do
     task migrate: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
 
       helper = Gitlab::LocalAndRemoteStorageMigration::ArtifactMigrater.new(logger)
 
@@ -19,7 +19,7 @@ namespace :gitlab do
     end
 
     task migrate_to_local: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
 
       helper = Gitlab::LocalAndRemoteStorageMigration::ArtifactMigrater.new(logger)
 
diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake
index 733cf6c3a9779..0cd4ab354c908 100644
--- a/lib/tasks/gitlab/cleanup.rake
+++ b/lib/tasks/gitlab/cleanup.rake
@@ -178,7 +178,7 @@ namespace :gitlab do
       return @logger if defined?(@logger)
 
       @logger = if Rails.env.development? || Rails.env.production?
-                  Logger.new(STDOUT).tap do |stdout_logger|
+                  Logger.new($stdout).tap do |stdout_logger|
                     stdout_logger.extend(ActiveSupport::Logger.broadcast(Rails.logger))
                     stdout_logger.level = debug? ? Logger::DEBUG : Logger::INFO
                   end
diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake
index 6145e0f3540b7..ee986f4c50306 100644
--- a/lib/tasks/gitlab/db.rake
+++ b/lib/tasks/gitlab/db.rake
@@ -209,7 +209,7 @@ namespace :gitlab do
         raise "Index not found or not supported: #{args[:index_name]}" if indexes.empty?
       end
 
-      ActiveRecord::Base.logger = Logger.new(STDOUT) if Gitlab::Utils.to_boolean(ENV['LOG_QUERIES_TO_CONSOLE'], default: false)
+      ActiveRecord::Base.logger = Logger.new($stdout) if Gitlab::Utils.to_boolean(ENV['LOG_QUERIES_TO_CONSOLE'], default: false)
 
       Gitlab::Database::Reindexing.perform(indexes)
     rescue StandardError => e
diff --git a/lib/tasks/gitlab/docs/redirect.rake b/lib/tasks/gitlab/docs/redirect.rake
index 71e0b6ab2c52a..990ff723eeb22 100644
--- a/lib/tasks/gitlab/docs/redirect.rake
+++ b/lib/tasks/gitlab/docs/redirect.rake
@@ -14,14 +14,14 @@ namespace :gitlab do
         old_path = args.old_path
       else
         puts '=> Enter the path of the OLD file:'
-        old_path = STDIN.gets.chomp
+        old_path = $stdin.gets.chomp
       end
 
       if args.new_path
         new_path = args.new_path
       else
         puts '=> Enter the path of the NEW file:'
-        new_path = STDIN.gets.chomp
+        new_path = $stdin.gets.chomp
       end
 
       #
diff --git a/lib/tasks/gitlab/doctor/secrets.rake b/lib/tasks/gitlab/doctor/secrets.rake
index 6e3f474312cf9..29f0f36c705d0 100644
--- a/lib/tasks/gitlab/doctor/secrets.rake
+++ b/lib/tasks/gitlab/doctor/secrets.rake
@@ -4,7 +4,7 @@ namespace :gitlab do
   namespace :doctor do
     desc "GitLab | Check if the database encrypted values can be decrypted using current secrets"
     task secrets: :gitlab_environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
 
       logger.level = Gitlab::Utils.to_boolean(ENV['VERBOSE']) ? Logger::DEBUG : Logger::INFO
 
diff --git a/lib/tasks/gitlab/ldap.rake b/lib/tasks/gitlab/ldap.rake
index 3b2834c000806..4da22e686ef22 100644
--- a/lib/tasks/gitlab/ldap.rake
+++ b/lib/tasks/gitlab/ldap.rake
@@ -42,7 +42,7 @@ namespace :gitlab do
     namespace :secret do
       desc 'GitLab | LDAP | Secret | Write LDAP secrets'
       task write: [:environment] do
-        content = STDIN.tty? ? STDIN.gets : STDIN.read
+        content = $stdin.tty? ? $stdin.gets : $stdin.read
         Gitlab::EncryptedLdapCommand.write(content)
       end
 
diff --git a/lib/tasks/gitlab/lfs/migrate.rake b/lib/tasks/gitlab/lfs/migrate.rake
index a173de7c5c709..47f9e1dfb3212 100644
--- a/lib/tasks/gitlab/lfs/migrate.rake
+++ b/lib/tasks/gitlab/lfs/migrate.rake
@@ -6,7 +6,7 @@ desc "GitLab | LFS | Migrate LFS objects to remote storage"
 namespace :gitlab do
   namespace :lfs do
     task migrate: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info('Starting transfer of LFS files to object storage')
 
       LfsObject.with_files_stored_locally
@@ -20,7 +20,7 @@ namespace :gitlab do
     end
 
     task migrate_to_local: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info('Starting transfer of LFS files to local storage')
 
       LfsObject.with_files_stored_remotely
diff --git a/lib/tasks/gitlab/packages/composer.rake b/lib/tasks/gitlab/packages/composer.rake
index c9bccfe938475..97f1da0ff636c 100644
--- a/lib/tasks/gitlab/packages/composer.rake
+++ b/lib/tasks/gitlab/packages/composer.rake
@@ -6,7 +6,7 @@ desc "GitLab | Packages | Build composer cache"
 namespace :gitlab do
   namespace :packages do
     task build_composer_cache: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info('Starting to build composer cache files')
 
       ::Packages::Package.composer.find_in_batches do |packages|
diff --git a/lib/tasks/gitlab/packages/events.rake b/lib/tasks/gitlab/packages/events.rake
index d24535d85b623..a5b801ff62dc6 100644
--- a/lib/tasks/gitlab/packages/events.rake
+++ b/lib/tasks/gitlab/packages/events.rake
@@ -14,7 +14,7 @@ namespace :gitlab do
       end
 
       task generate_counts: :environment do
-        logger = Logger.new(STDOUT)
+        logger = Logger.new($stdout)
         logger.info('Building list of package events...')
 
         path = Gitlab::UsageDataCounters::PackageEventCounter::KNOWN_EVENTS_PATH
@@ -26,7 +26,7 @@ namespace :gitlab do
       end
 
       task generate_unique: :environment do
-        logger = Logger.new(STDOUT)
+        logger = Logger.new($stdout)
         logger.info('Building list of package events...')
 
         path = File.join(File.dirname(Gitlab::UsageDataCounters::HLLRedisCounter::KNOWN_EVENTS_PATH), 'package_events.yml')
diff --git a/lib/tasks/gitlab/packages/migrate.rake b/lib/tasks/gitlab/packages/migrate.rake
index febc3e7fa2deb..1c28f4308a292 100644
--- a/lib/tasks/gitlab/packages/migrate.rake
+++ b/lib/tasks/gitlab/packages/migrate.rake
@@ -6,7 +6,7 @@ desc "GitLab | Packages | Migrate packages files to remote storage"
 namespace :gitlab do
   namespace :packages do
     task migrate: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info('Starting transfer of package files to object storage')
 
       unless ::Packages::PackageFileUploader.object_store_enabled?
diff --git a/lib/tasks/gitlab/pages.rake b/lib/tasks/gitlab/pages.rake
index 684d62d136793..c3828e7eba48e 100644
--- a/lib/tasks/gitlab/pages.rake
+++ b/lib/tasks/gitlab/pages.rake
@@ -35,7 +35,7 @@ namespace :gitlab do
     end
 
     def logger
-      @logger ||= Logger.new(STDOUT)
+      @logger ||= Logger.new($stdout)
     end
 
     def migration_threads
@@ -60,7 +60,7 @@ namespace :gitlab do
 
     namespace :deployments do
       task migrate_to_object_storage: :gitlab_environment do
-        logger = Logger.new(STDOUT)
+        logger = Logger.new($stdout)
 
         helper = Gitlab::LocalAndRemoteStorageMigration::PagesDeploymentMigrater.new(logger)
 
@@ -72,7 +72,7 @@ namespace :gitlab do
       end
 
       task migrate_to_local: :gitlab_environment do
-        logger = Logger.new(STDOUT)
+        logger = Logger.new($stdout)
 
         helper = Gitlab::LocalAndRemoteStorageMigration::PagesDeploymentMigrater.new(logger)
 
diff --git a/lib/tasks/gitlab/terraform/migrate.rake b/lib/tasks/gitlab/terraform/migrate.rake
index 2bf9ec9537aa5..99e33011cf5a4 100644
--- a/lib/tasks/gitlab/terraform/migrate.rake
+++ b/lib/tasks/gitlab/terraform/migrate.rake
@@ -6,7 +6,7 @@ desc "GitLab | Terraform | Migrate Terraform states to remote storage"
 namespace :gitlab do
   namespace :terraform_states do
     task migrate: :environment do
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
       logger.info('Starting transfer of Terraform states to object storage')
 
       begin
diff --git a/lib/tasks/gitlab/uploads/migrate.rake b/lib/tasks/gitlab/uploads/migrate.rake
index 6052ff90341b1..80290f95e8e38 100644
--- a/lib/tasks/gitlab/uploads/migrate.rake
+++ b/lib/tasks/gitlab/uploads/migrate.rake
@@ -16,7 +16,7 @@ namespace :gitlab do
     # category to object storage
     desc 'GitLab | Uploads | Migrate the uploaded files of specified type to object storage'
     task :migrate, [:uploader_class, :model_class, :mounted_as] => :environment do |_t, args|
-      Gitlab::Uploads::MigrationHelper.new(args, Logger.new(STDOUT)).migrate_to_remote_storage
+      Gitlab::Uploads::MigrationHelper.new(args, Logger.new($stdout)).migrate_to_remote_storage
     end
 
     namespace :migrate_to_local do
@@ -31,7 +31,7 @@ namespace :gitlab do
 
     desc 'GitLab | Uploads | Migrate the uploaded files of specified type to local storage'
     task :migrate_to_local, [:uploader_class, :model_class, :mounted_as] => :environment do |_t, args|
-      Gitlab::Uploads::MigrationHelper.new(args, Logger.new(STDOUT)).migrate_to_local_storage
+      Gitlab::Uploads::MigrationHelper.new(args, Logger.new($stdout)).migrate_to_local_storage
     end
   end
 end
diff --git a/lib/tasks/gitlab/uploads/sanitize.rake b/lib/tasks/gitlab/uploads/sanitize.rake
index eec423cbb8b51..40f6a7bb67d08 100644
--- a/lib/tasks/gitlab/uploads/sanitize.rake
+++ b/lib/tasks/gitlab/uploads/sanitize.rake
@@ -8,7 +8,7 @@ namespace :gitlab do
         args.with_defaults(dry_run: 'true')
         args.with_defaults(sleep_time: 0.3)
 
-        logger = Logger.new(STDOUT)
+        logger = Logger.new($stdout)
 
         sanitizer = Gitlab::Sanitizers::Exif.new(logger: logger)
         sanitizer.batch_clean(start_id: args.start_id, stop_id: args.stop_id,
diff --git a/lib/tasks/gitlab/x509/update.rake b/lib/tasks/gitlab/x509/update.rake
index de878a3d093c1..d3c63fa851462 100644
--- a/lib/tasks/gitlab/x509/update.rake
+++ b/lib/tasks/gitlab/x509/update.rake
@@ -10,7 +10,7 @@ namespace :gitlab do
     end
 
     def update_certificates
-      logger = Logger.new(STDOUT)
+      logger = Logger.new($stdout)
 
       unless X509CommitSignature.exists?
         logger.info("Unable to find any x509 commit signatures. Exiting.")
diff --git a/lib/tasks/import.rake b/lib/tasks/import.rake
index 633beb132d860..b7a5cbe44b915 100644
--- a/lib/tasks/import.rake
+++ b/lib/tasks/import.rake
@@ -38,7 +38,7 @@ class GithubImport
     puts "This will import GitHub #{@repo.full_name.bright} into GitLab #{@project_path.bright} as #{@current_user.name}"
     puts "Permission checks are ignored. Press any key to continue.".color(:red)
 
-    STDIN.getch
+    $stdin.getch
 
     puts 'Starting the import (this could take a while)'.color(:green)
   end
@@ -131,7 +131,7 @@ class GithubRepos
   end
 
   def repo_id
-    @repo_id ||= STDIN.gets.chomp.to_i
+    @repo_id ||= $stdin.gets.chomp.to_i
   end
 
   def repos
diff --git a/lib/tasks/tokens.rake b/lib/tasks/tokens.rake
index 74baa11c314ee..ff14ab51b4922 100644
--- a/lib/tasks/tokens.rake
+++ b/lib/tasks/tokens.rake
@@ -19,7 +19,7 @@ namespace :tokens do
   def reset_all_users_token(reset_token_method)
     TmpUser.find_in_batches do |batch|
       puts "Processing batch starting with user ID: #{batch.first.id}"
-      STDOUT.flush
+      $stdout.flush
 
       batch.each(&reset_token_method)
     end
diff --git a/qa/qa/tools/delete_projects.rb b/qa/qa/tools/delete_projects.rb
index bb73033e9d7a5..8a690373a376c 100644
--- a/qa/qa/tools/delete_projects.rb
+++ b/qa/qa/tools/delete_projects.rb
@@ -20,7 +20,7 @@ def initialize
       end
 
       def run
-        STDOUT.puts 'Running...'
+        $stdout.puts 'Running...'
 
         # Fetch group's id
         group_id = fetch_group_id
@@ -30,16 +30,16 @@ def run
 
         # Do not delete projects that are less than 4 days old (for debugging purposes)
         project_ids = fetch_project_ids(group_id, total_project_pages)
-        STDOUT.puts "Number of projects to be deleted: #{project_ids.length}"
+        $stdout.puts "Number of projects to be deleted: #{project_ids.length}"
 
         delete_projects(project_ids) unless project_ids.empty?
-        STDOUT.puts "\nDone"
+        $stdout.puts "\nDone"
       end
 
       private
 
       def delete_projects(project_ids)
-        STDOUT.puts "Deleting #{project_ids.length} projects..."
+        $stdout.puts "Deleting #{project_ids.length} projects..."
         project_ids.each do |project_id|
           delete_response = delete Runtime::API::Request.new(@api_client, "/projects/#{project_id}").url
           dot_or_f = delete_response.code.between?(200, 300) ? "\e[32m.\e[0m" : "\e[31mF\e[0m"
diff --git a/qa/qa/tools/delete_subgroups.rb b/qa/qa/tools/delete_subgroups.rb
index 903f730a03050..b9e3ed6601321 100644
--- a/qa/qa/tools/delete_subgroups.rb
+++ b/qa/qa/tools/delete_subgroups.rb
@@ -20,7 +20,7 @@ def initialize
       end
 
       def run
-        STDOUT.puts 'Running...'
+        $stdout.puts 'Running...'
 
         # Fetch group's id
         group_id = fetch_group_id
@@ -29,16 +29,16 @@ def run
         total_sub_group_pages = sub_groups_head_response.headers[:x_total_pages]
 
         sub_group_ids = fetch_subgroup_ids(group_id, total_sub_group_pages)
-        STDOUT.puts "Number of Sub Groups not already marked for deletion: #{sub_group_ids.length}"
+        $stdout.puts "Number of Sub Groups not already marked for deletion: #{sub_group_ids.length}"
 
         delete_subgroups(sub_group_ids) unless sub_group_ids.empty?
-        STDOUT.puts "\nDone"
+        $stdout.puts "\nDone"
       end
 
       private
 
       def delete_subgroups(sub_group_ids)
-        STDOUT.puts "Deleting #{sub_group_ids.length} subgroups..."
+        $stdout.puts "Deleting #{sub_group_ids.length} subgroups..."
         sub_group_ids.each do |subgroup_id|
           delete_response = delete Runtime::API::Request.new(@api_client, "/groups/#{subgroup_id}").url
           dot_or_f = delete_response.code == 202 ? "\e[32m.\e[0m" : "\e[31mF\e[0m"
diff --git a/qa/qa/tools/delete_test_ssh_keys.rb b/qa/qa/tools/delete_test_ssh_keys.rb
index 953e9fc63d1db..dea6930de1ea5 100644
--- a/qa/qa/tools/delete_test_ssh_keys.rb
+++ b/qa/qa/tools/delete_test_ssh_keys.rb
@@ -30,18 +30,18 @@ def initialize(title_portion: 'E2E test key:', delete_before: Date.today.to_s, d
       end
 
       def run
-        STDOUT.puts 'Running...'
+        $stdout.puts 'Running...'
 
         keys_head_response = head Runtime::API::Request.new(@api_client, "/user/keys", per_page: ITEMS_PER_PAGE).url
         total_pages = keys_head_response.headers[:x_total_pages]
 
         test_ssh_key_ids = fetch_test_ssh_key_ids(total_pages)
-        STDOUT.puts "Number of test ssh keys to be deleted: #{test_ssh_key_ids.length}"
+        $stdout.puts "Number of test ssh keys to be deleted: #{test_ssh_key_ids.length}"
 
         return if dry_run?
 
         delete_ssh_keys(test_ssh_key_ids) unless test_ssh_key_ids.empty?
-        STDOUT.puts "\nDone"
+        $stdout.puts "\nDone"
       end
 
       private
@@ -50,7 +50,7 @@ def run
       alias_method :dry_run?, :dry_run
 
       def delete_ssh_keys(ssh_key_ids)
-        STDOUT.puts "Deleting #{ssh_key_ids.length} ssh keys..."
+        $stdout.puts "Deleting #{ssh_key_ids.length} ssh keys..."
         ssh_key_ids.each do |key_id|
           delete_response = delete Runtime::API::Request.new(@api_client, "/user/keys/#{key_id}").url
           dot_or_f = delete_response.code == 204 ? "\e[32m.\e[0m" : "\e[31mF\e[0m"
diff --git a/qa/qa/tools/generate_perf_testdata.rb b/qa/qa/tools/generate_perf_testdata.rb
index 546f7e7cdca1b..ec1aa20c3b8c8 100644
--- a/qa/qa/tools/generate_perf_testdata.rb
+++ b/qa/qa/tools/generate_perf_testdata.rb
@@ -26,7 +26,7 @@ def initialize
       end
 
       def all
-        STDOUT.puts 'Running...'
+        $stdout.puts 'Running...'
         group_id = create_group
         create_project(group_id)
 
@@ -50,23 +50,23 @@ def all
         end
 
         threads_arr.each(&:join)
-        STDOUT.puts "\nURLs: #{@urls}"
+        $stdout.puts "\nURLs: #{@urls}"
         File.open("urls.yml", "w") { |file| file.puts @urls.stringify_keys.to_yaml }
-        STDOUT.puts "\nDone"
+        $stdout.puts "\nDone"
       end
 
       def create_group
         group_search_response = create_a_group_api_req(@group_name, @visibility)
         group = JSON.parse(group_search_response.body)
         @urls[:group_page] = group["web_url"]
-        STDOUT.puts "Created a group: #{@urls[:group_page]}"
+        $stdout.puts "Created a group: #{@urls[:group_page]}"
         group["id"]
       end
 
       def create_project(group_id)
         create_project_response = create_a_project_api_req(@project_name, group_id, @visibility)
         @urls[:project_page] = JSON.parse(create_project_response.body)["web_url"]
-        STDOUT.puts "Created a project: #{@urls[:project_page]}"
+        $stdout.puts "Created a project: #{@urls[:project_page]}"
       end
 
       def create_many_issues
@@ -74,7 +74,7 @@ def create_many_issues
           create_an_issue_api_req("#{@group_name}%2F#{@project_name}", "issue#{i}", "desc#{i}")
         end
         @urls[:issues_list_page] = @urls[:project_page] + "/issues"
-        STDOUT.puts "Created many issues: #{@urls[:issues_list_page]}"
+        $stdout.puts "Created many issues: #{@urls[:issues_list_page]}"
       end
 
       def create_many_todos
@@ -82,7 +82,7 @@ def create_many_todos
           create_a_todo_api_req("#{@group_name}%2F#{@project_name}", "#{i + 1}")
         end
         @urls[:todos_page] = ENV['GITLAB_ADDRESS'] + "/dashboard/todos"
-        STDOUT.puts "Created many todos: #{@urls[:todos_page]}"
+        $stdout.puts "Created many todos: #{@urls[:todos_page]}"
       end
 
       def create_many_labels
@@ -90,7 +90,7 @@ def create_many_labels
           create_a_label_api_req("#{@group_name}%2F#{@project_name}", "label#{i}", "#{Faker::Color.hex_color}")
         end
         @urls[:labels_page] = @urls[:project_page] + "/labels"
-        STDOUT.puts "Created many labels: #{@urls[:labels_page]}"
+        $stdout.puts "Created many labels: #{@urls[:labels_page]}"
       end
 
       def create_many_merge_requests
@@ -98,7 +98,7 @@ def create_many_merge_requests
           create_a_merge_request_api_req("#{@group_name}%2F#{@project_name}", "branch#{i}", Runtime::Env.default_branch, "MR#{i}")
         end
         @urls[:mr_list_page] = @urls[:project_page] + "/merge_requests"
-        STDOUT.puts "Created many MRs: #{@urls[:mr_list_page]}"
+        $stdout.puts "Created many MRs: #{@urls[:mr_list_page]}"
       end
 
       def create_many_new_files
@@ -109,7 +109,7 @@ def create_many_new_files
         end
 
         @urls[:files_page] = @urls[:project_page] + "/tree/#{Runtime::Env.default_branch}"
-        STDOUT.puts "Added many new files: #{@urls[:files_page]}"
+        $stdout.puts "Added many new files: #{@urls[:files_page]}"
       end
 
       def create_many_branches
@@ -117,7 +117,7 @@ def create_many_branches
           create_a_branch_api_req("branch#{i}", "#{@group_name}%2F#{@project_name}")
         end
         @urls[:branches_page] = @urls[:project_page] + "/-/branches"
-        STDOUT.puts "Created many branches: #{@urls[:branches_page]}"
+        $stdout.puts "Created many branches: #{@urls[:branches_page]}"
       end
 
       def create_an_issue_with_many_discussions
@@ -130,7 +130,7 @@ def create_an_issue_with_many_discussions
         # Add description and labels
         update_an_issue_api_req("#{@group_name}%2F#{@project_name}", issue_id, "#{Faker::Lorem.sentences(500).join(" ")}", labels_list)
         @urls[:large_issue] = @urls[:project_page] + "/issues/#{issue_id}"
-        STDOUT.puts "Created an issue with many discussions: #{@urls[:large_issue]}"
+        $stdout.puts "Created an issue with many discussions: #{@urls[:large_issue]}"
       end
 
       def create_an_mr_with_large_files_and_many_mr_discussions
@@ -178,7 +178,7 @@ def create_an_mr_with_large_files_and_many_mr_discussions
           create_a_discussion_on_mr_api_req("#{@group_name}%2F#{@project_name}", iid, "Let us discuss")
         end
         @urls[:large_mr] = JSON.parse(create_mr_response.body)["web_url"]
-        STDOUT.puts "Created an MR with many discussions and many very large Files: #{@urls[:large_mr]}"
+        $stdout.puts "Created an MR with many discussions and many very large Files: #{@urls[:large_mr]}"
       end
 
       def create_diff_note(iid, file_count, line_count, head_sha, start_sha, base_sha, line_type)
@@ -205,7 +205,7 @@ def create_mr_with_many_commits
         100.times do |i|
           update_file_api_req(file_name, branch_name, project_path, Faker::Lorem.sentences(5).join(" "), Faker::Lorem.sentences(500).join("\n"))
         end
-        STDOUT.puts "Using branch: #{branch_name}, created an MR with many commits: #{@urls[:mr_with_many_commits]}"
+        $stdout.puts "Using branch: #{branch_name}, created an MR with many commits: #{@urls[:mr_with_many_commits]}"
       end
 
       private
diff --git a/qa/qa/tools/revoke_all_personal_access_tokens.rb b/qa/qa/tools/revoke_all_personal_access_tokens.rb
index 63a7b0d2d8e51..c0a1697fa165d 100644
--- a/qa/qa/tools/revoke_all_personal_access_tokens.rb
+++ b/qa/qa/tools/revoke_all_personal_access_tokens.rb
@@ -12,7 +12,7 @@ class RevokeAllPersonalAccessTokens
       def run
         do_run
       rescue Net::ReadTimeout
-        STDOUT.puts 'Net::ReadTimeout during run. Trying again'
+        $stdout.puts 'Net::ReadTimeout during run. Trying again'
         run
       end
 
@@ -23,7 +23,7 @@ def do_run
         raise ArgumentError, "Please provide GITLAB_PASSWORD" unless ENV['GITLAB_PASSWORD']
         raise ArgumentError, "Please provide GITLAB_ADDRESS" unless ENV['GITLAB_ADDRESS']
 
-        STDOUT.puts 'Running...'
+        $stdout.puts 'Running...'
 
         Runtime::Browser.visit(ENV['GITLAB_ADDRESS'], Page::Main::Login)
         Page::Main::Login.perform(&:sign_in_using_credentials)
diff --git a/scripts/trigger-build b/scripts/trigger-build
index 5758db88b7c38..23c9ebbe294b6 100755
--- a/scripts/trigger-build
+++ b/scripts/trigger-build
@@ -419,7 +419,7 @@ module Trigger
           raise "#{self.class.unscoped_class_name} did not succeed!"
         end
 
-        STDOUT.flush
+        $stdout.flush
       end
 
       raise "#{self.class.unscoped_class_name} timed out after waiting for #{duration} minutes!"
diff --git a/spec/lib/gitlab/file_hook_spec.rb b/spec/lib/gitlab/file_hook_spec.rb
index 7f40d9ae7720c..4fc55f7ad7e6e 100644
--- a/spec/lib/gitlab/file_hook_spec.rb
+++ b/spec/lib/gitlab/file_hook_spec.rb
@@ -9,7 +9,7 @@
   let(:file_hook_source) do
     <<~EOS
       #!/usr/bin/env ruby
-      x = STDIN.read
+      x = $stdin.read
       File.write('#{tmp_file.path}', x)
     EOS
   end
diff --git a/spec/lib/gitlab/profiler_spec.rb b/spec/lib/gitlab/profiler_spec.rb
index 48e2a2e979435..5187c96b511cb 100644
--- a/spec/lib/gitlab/profiler_spec.rb
+++ b/spec/lib/gitlab/profiler_spec.rb
@@ -206,8 +206,12 @@
       end
     end
 
-    before do
-      stub_const('STDOUT', stdout)
+    around do |example|
+      original_stdout = $stdout
+
+      $stdout = stdout # rubocop: disable RSpec/ExpectOutput
+      example.run
+      $stdout = original_stdout # rubocop: disable RSpec/ExpectOutput
     end
 
     it 'prints a profile result sorted by total time' do
diff --git a/spec/lib/gitlab/utils/measuring_spec.rb b/spec/lib/gitlab/utils/measuring_spec.rb
index 4931ebf26f04e..5dad79b1c5fea 100644
--- a/spec/lib/gitlab/utils/measuring_spec.rb
+++ b/spec/lib/gitlab/utils/measuring_spec.rb
@@ -8,7 +8,7 @@
     let(:result) { "result" }
 
     before do
-      allow(ActiveSupport::Logger).to receive(:logger_outputs_to?).with(Gitlab::Utils::Measuring.logger, STDOUT).and_return(false)
+      allow(ActiveSupport::Logger).to receive(:logger_outputs_to?).with(Gitlab::Utils::Measuring.logger, $stdout).and_return(false)
     end
 
     let(:measurement) { described_class.new(base_log_data) }
diff --git a/spec/support/helpers/gitaly_setup.rb b/spec/support/helpers/gitaly_setup.rb
index 2ce4bcfa94314..5cfd03ecea8e1 100644
--- a/spec/support/helpers/gitaly_setup.rb
+++ b/spec/support/helpers/gitaly_setup.rb
@@ -15,7 +15,7 @@ module GitalySetup
     default_name = ENV['CI'] ? 'DEBUG' : 'WARN'
     level_name = ENV['GITLAB_TESTING_LOG_LEVEL']&.upcase
     level = Logger.const_get(level_name || default_name, true) # rubocop: disable Gitlab/ConstGetInheritFalse
-    Logger.new(STDOUT, level: level, formatter: ->(_, _, _, msg) { msg })
+    Logger.new($stdout, level: level, formatter: ->(_, _, _, msg) { msg })
   end
 
   def tmp_tests_gitaly_dir
@@ -153,7 +153,7 @@ def check_gitaly_config!
     end
 
     LOGGER.debug "Checking gitaly-ruby bundle...\n"
-    out = ENV['CI'] ? STDOUT : '/dev/null'
+    out = ENV['CI'] ? $stdout : '/dev/null'
     abort 'bundle check failed' unless system(env, 'bundle', 'check', out: out, chdir: File.dirname(gemfile))
   end
 
diff --git a/spec/tasks/gitlab/ldap_rake_spec.rb b/spec/tasks/gitlab/ldap_rake_spec.rb
index 5286cd98944f0..bc623119639a4 100644
--- a/spec/tasks/gitlab/ldap_rake_spec.rb
+++ b/spec/tasks/gitlab/ldap_rake_spec.rb
@@ -93,8 +93,8 @@
 
   describe 'write' do
     before do
-      allow(STDIN).to receive(:tty?).and_return(false)
-      allow(STDIN).to receive(:read).and_return('testvalue')
+      allow($stdin).to receive(:tty?).and_return(false)
+      allow($stdin).to receive(:read).and_return('testvalue')
     end
 
     it 'creates encrypted file from stdin' do
diff --git a/spec/tasks/gitlab/terraform/migrate_rake_spec.rb b/spec/tasks/gitlab/terraform/migrate_rake_spec.rb
index 4188521df8e3e..e4447a3e4a394 100644
--- a/spec/tasks/gitlab/terraform/migrate_rake_spec.rb
+++ b/spec/tasks/gitlab/terraform/migrate_rake_spec.rb
@@ -13,7 +13,7 @@
   end
 
   before do
-    allow(Logger).to receive(:new).with(STDOUT).and_return(logger)
+    allow(Logger).to receive(:new).with($stdout).and_return(logger)
   end
 
   describe 'gitlab:terraform_states:migrate' do
-- 
GitLab