Skip to content

Commit

Permalink
audit: add extract artifcats method
Browse files Browse the repository at this point in the history
  • Loading branch information
razvanazamfirei committed Nov 5, 2023
1 parent e605237 commit df2aee4
Showing 1 changed file with 47 additions and 35 deletions.
82 changes: 47 additions & 35 deletions Library/Homebrew/cask/audit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -475,21 +475,8 @@ def audit_signing
return if !signing? || download.blank? || cask.url.blank?

odebug "Auditing signing"
artifacts = cask.artifacts.select do |k|
k.is_a?(Artifact::Pkg) || k.is_a?(Artifact::App) || k.is_a?(Artifact::Binary)
end

return if artifacts.empty?

downloaded_path = download.fetch
primary_container = UnpackStrategy.detect(downloaded_path, type: @cask.container&.type, merge_xattrs: true)

return if primary_container.nil?

Dir.mktmpdir do |tmpdir|
tmpdir = Pathname(tmpdir)
primary_container.extract_nestedly(to: tmpdir, basename: downloaded_path.basename, verbose: false)

extract_artifacts do |artifacts, tmpdir|
artifacts.each do |artifact|
artifact_path = artifact.is_a?(Artifact::Pkg) ? artifact.path : artifact.source
path = tmpdir/artifact_path.relative_path_from(cask.staged_path)
Expand All @@ -510,6 +497,38 @@ def audit_signing
end
end

sig { void }
def extract_artifacts
return unless online?

artifacts = cask.artifacts.select do |artifact|
artifact.is_a?(Artifact::Pkg) || artifact.is_a?(Artifact::App) || artifact.is_a?(Artifact::Binary)

Check warning on line 505 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L504-L505

Added lines #L504 - L505 were not covered by tests
end

if @artifacts_extracted && @tmpdir
yield artifacts, @tmpdir if block_given?
return

Check warning on line 510 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L510

Added line #L510 was not covered by tests
end

return if artifacts.empty?

@tmpdir ||= Pathname(Dir.mktmpdir)

Check warning on line 515 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L515

Added line #L515 was not covered by tests

ohai "Downloading and extracting artifacts"

Check warning on line 517 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L517

Added line #L517 was not covered by tests

downloaded_path = download.fetch

Check warning on line 519 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L519

Added line #L519 was not covered by tests

primary_container = UnpackStrategy.detect(downloaded_path, type: @cask.container&.type, merge_xattrs: true)
return if primary_container.nil?

# Extract the container to the temporary directory.
primary_container.extract_nestedly(to: @tmpdir, basename: downloaded_path.basename, verbose: false)
@artifacts_extracted = true # Set the flag to indicate that extraction has occurred.

Check warning on line 526 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L525-L526

Added lines #L525 - L526 were not covered by tests

# Yield the artifacts and temp directory to the block if provided.
yield artifacts, @tmpdir if block_given?
end

sig { returns(T.any(NilClass, T::Boolean, Symbol)) }
def audit_livecheck_version
return unless online?
Expand Down Expand Up @@ -548,26 +567,31 @@ def audit_min_os

odebug "Auditing minimum OS version"

Check warning on line 568 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L568

Added line #L568 was not covered by tests

sparkle_min_os = livecheck_min_os
plist_min_os = cask_plist_min_os
odebug "Minimum OS version: Plist #{plist_min_os} | Sparkle #{sparkle_min_os.inspect}"
min_os_string = [sparkle_min_os, plist_min_os].compact.max
sparkle_min_os = livecheck_min_os

Check warning on line 571 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L570-L571

Added lines #L570 - L571 were not covered by tests

debug_messages = []

Check warning on line 573 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L573

Added line #L573 was not covered by tests
debug_messages << "Plist #{plist_min_os}" if plist_min_os
debug_messages << "Sparkle #{sparkle_min_os}" if sparkle_min_os
odebug "Minimum OS version: #{debug_messages.join(" | ")}" unless debug_messages.empty?
min_os = [sparkle_min_os, plist_min_os].compact.max

Check warning on line 577 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L577

Added line #L577 was not covered by tests

return if min_os_string.nil? || min_os_string <= HOMEBREW_MACOS_OLDEST_ALLOWED
return if min_os.nil? || min_os <= HOMEBREW_MACOS_OLDEST_ALLOWED

cask_min_os = cask.depends_on.macos&.version
return if cask_min_os == min_os_string
return if cask_min_os == min_os

min_os_symbol = if cask_min_os.present?

Check warning on line 584 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L584

Added line #L584 was not covered by tests
cask_min_os.to_sym.inspect
else
"no minimum OS version"
end
add_error "Upstream defined #{min_os_string.to_sym.inspect} as the minimum OS version " \
add_error "Upstream defined #{min_os.to_sym.inspect} as the minimum OS version " \

Check warning on line 589 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L589

Added line #L589 was not covered by tests
"and the cask defined #{min_os_symbol}",
strict_only: true
end

sig { returns(T.nilable(MacOSVersion)) }
def livecheck_min_os
return unless online?
return unless cask.livecheckable?
Expand Down Expand Up @@ -600,26 +624,14 @@ def livecheck_min_os
end
end

sig { returns(T.nilable(MacOSVersion)) }
def cask_plist_min_os
return unless online?

artifacts = cask.artifacts.select do |k|
k.is_a?(Artifact::Pkg) || k.is_a?(Artifact::App) || k.is_a?(Artifact::Binary)
end

return if artifacts.empty?

downloaded_path = download.fetch
primary_container = UnpackStrategy.detect(downloaded_path, type: @cask.container&.type, merge_xattrs: true)

return if primary_container.nil?

plist_min_os = T.let(nil, T.untyped)
@staged_path ||= cask.staged_path

Check warning on line 632 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L631-L632

Added lines #L631 - L632 were not covered by tests

Dir.mktmpdir do |tmpdir|
tmpdir = Pathname(tmpdir)
primary_container.extract_nestedly(to: tmpdir, basename: downloaded_path.basename, verbose: false)

extract_artifacts do |artifacts, tmpdir|
artifacts.each do |artifact|

Check warning on line 635 in Library/Homebrew/cask/audit.rb

View check run for this annotation

Codecov / codecov/patch

Library/Homebrew/cask/audit.rb#L634-L635

Added lines #L634 - L635 were not covered by tests
artifact_path = artifact.is_a?(Artifact::Pkg) ? artifact.path : artifact.source
path = tmpdir/artifact_path.relative_path_from(cask.staged_path)
Expand Down

0 comments on commit df2aee4

Please sign in to comment.