Class: SupplyChain::ArtifactsReader
- Inherits:
-
Object
- Object
- SupplyChain::ArtifactsReader
- Defined in:
- lib/supply_chain/artifacts_reader.rb
Constant Summary collapse
- MAX_FILES_IN_BUNDLE =
1000- MAX_SIZE =
Gitlab::CurrentSettings.current_application_settings.max_artifacts_content_include_size
- Error =
Class.new(StandardError)
- BundleTooLarge =
Class.new(Error)
- NoArtifacts =
Class.new(Error)
- ArtifactTooLarge =
Class.new(Error)
- DiskFull =
Class.new(Error)
- TooManyFiles =
Class.new(Error)
Instance Method Summary collapse
- #files ⇒ Object
-
#initialize(build) ⇒ ArtifactsReader
constructor
A new instance of ArtifactsReader.
Constructor Details
#initialize(build) ⇒ ArtifactsReader
Returns a new instance of ArtifactsReader.
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/supply_chain/artifacts_reader.rb', line 15 def initialize(build) @build = build raise Error, "Job doesn't exist" unless @build raise NoArtifacts, "#{build_id} does not have artifacts" unless @build.artifacts? raise Error, "#{build_id} has missing metadata and cannot be extracted" unless @build. = build.('', recursive: true) raise Error, "#{build_id} has invalid metadata" unless validate_bundle! end |
Instance Method Details
#files ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/supply_chain/artifacts_reader.rb', line 28 def files artifacts = @build.artifacts_file.use_open_file(unlink_early: false) do |tmp_open_file| zip_file_path = tmp_open_file.file_path Zip::File.open(zip_file_path) do |zip_file| # rubocop:disable Performance/Rubyzip -- General purpose flag Bit 3 is set so not possible to get proper info from local header artifacts.each do |artifact| entry = zip_file.get_entry(artifact) yield entry.name, entry.get_input_stream end end end rescue Errno::EDQUOT, Errno::ENOSPC raise DiskFull, "#{build_id} Unable to download artifact bundle: insufficient disk space" end |