mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-03 16:04:30 +00:00
45 lines
1.1 KiB
Ruby
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
|