Files
2025-07-29 12:07:38 +00:00

45 lines
1.1 KiB
Ruby

# frozen_string_literal: true
require 'open3'
module Gitlab
module Housekeeper
class Shell
Error = Class.new(StandardError)
def self.execute(*cmd, env: {})
env = ENV.to_h.merge(env)
stdin, stdout, stderr, wait_thr = Open3.popen3(env, *cmd)
stdin.close
out = stdout.read
stdout.close
err = stderr.read
stderr.close
exit_status = wait_thr.value
raise Error, "Failed with #{exit_status}\nOutput: #{out}\nError: #{err}\n" unless exit_status.success?
out + err
end
# Run `rubocop --autocorrect --force-exclusion`.
#
# RuboCop is run without revealed TODOs.
def self.rubocop_autocorrect(files, logger: Logger.new(nil))
# Stop revealing RuboCop TODOs so RuboCop is only fixing material offenses.
env = { 'REVEAL_RUBOCOP_TODO' => nil }
cmd = ['rubocop', '--autocorrect', '--force-exclusion']
::Gitlab::Housekeeper::Shell.execute(*cmd, *files, env: env)
true
rescue ::Gitlab::Housekeeper::Shell::Error => e
logger.warn(e.message)
false
end
end
end
end