70 lines
2.7 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
2020-04-23 21:16:17 +02:00
require "cli/parser"
2020-08-09 01:34:07 +02:00
require "cask/auditor"
2020-04-23 21:16:17 +02:00
2018-09-06 08:29:14 +02:00
module Cask
2018-09-04 08:45:48 +01:00
class Cmd
2017-05-20 19:08:03 +02:00
class Audit < AbstractCommand
2020-04-23 21:16:17 +02:00
option "--download", :download_arg, false
option "--appcast", :appcast_arg, false
option "--token-conflicts", :token_conflicts_arg, false
option "--strict", :strict_arg, false
option "--online", :online_arg, false
option "--new-cask", :new_cask_arg, false
def self.usage
<<~EOS
`cask audit` [<options>] [<cask>]
--strict - Run additional, stricter style checks.
--online - Run additional, slower style checks that require a network connection.
--new-cask - Run various additional style checks to determine if a new cask is eligible
for Homebrew. This should be used when creating new casks and implies
`--strict` and `--online`.
--download - Audit the downloaded file
--appcast - Audit the appcast
--token-conflicts - Audit for token conflicts
Check <cask> for Homebrew coding style violations. This should be run before
submitting a new cask. If no <casks> are provided, check all locally
available casks. Will exit with a non-zero status if any errors are
found, which can be useful for implementing pre-commit hooks.
EOS
end
2017-05-21 00:15:56 +02:00
2016-09-24 13:52:43 +02:00
def self.help
"verifies installability of Casks"
end
def run
2020-04-23 21:16:17 +02:00
Homebrew.auditing = true
strict = new_cask_arg? || strict_arg?
token_conflicts = strict || token_conflicts_arg?
online = new_cask_arg? || online_arg?
download = online || download_arg?
appcast = online || appcast_arg?
2018-04-14 11:32:29 +02:00
failed_casks = casks(alternative: -> { Cask.to_a })
2020-04-23 21:16:17 +02:00
.reject do |cask|
odebug "Auditing Cask #{cask}"
result = Auditor.audit(cask, audit_download: download,
audit_appcast: appcast,
audit_online: online,
audit_strict: strict,
audit_new_cask: new_cask_arg?,
audit_token_conflicts: token_conflicts,
quarantine: quarantine?)
result[:warnings].empty? && result[:errors].empty?
2020-04-23 21:16:17 +02:00
end
2017-05-19 21:07:25 +02:00
return if failed_casks.empty?
2018-09-17 02:45:00 +02:00
2017-05-19 21:07:25 +02:00
raise CaskError, "audit failed for casks: #{failed_casks.join(" ")}"
2016-09-24 13:52:43 +02:00
end
2016-08-18 22:11:42 +03:00
end
end
end