class Drunker::Artifact
Attributes
bucket[R]
builds[R]
exit_status[R]
logger[R]
name[R]
stderr[R]
stdout[R]
Public Class Methods
new(config:, logger:)
click to toggle source
# File lib/drunker/artifact.rb, line 8 def initialize(config:, logger:) timestamp = Time.now.to_i s3 = Aws::S3::Resource.new(client: Aws::S3::Client.new(config.aws_client_options)) @bucket = s3.create_bucket(bucket: "drunker-artifact-store-#{timestamp}") logger.info("Created artifact bucket: #{bucket.name}") @name = "drunker_artifact_#{timestamp}" @stdout = "drunker_artifact_#{timestamp}_stdout.txt" @stderr = "drunker_artifact_#{timestamp}_stderr.txt" @exit_status = "drunker_artifact_#{timestamp}_exit_status.txt" @builds = [] @logger = logger end
Public Instance Methods
delete()
click to toggle source
# File lib/drunker/artifact.rb, line 57 def delete bucket.delete! logger.info("Deleted bucket: #{bucket.name}") end
layers()
click to toggle source
# File lib/drunker/artifact.rb, line 30 def layers @layers ||= builds.each_with_object([]) do |build, layers| project_name, build_id = build.split(":") layers << Layer.new(build_id: build).tap do |layer| begin layer.stdout = fetch_content("#{build_id}/#{project_name}/#{stdout}") layer.stderr = fetch_content("#{build_id}/#{project_name}/#{stderr}") layer.exit_status = fetch_content("#{build_id}/#{project_name}/#{exit_status}") rescue Aws::S3::Errors::NoSuchKey logger.debug("Artifact not found") layer.invalid! end end end end
replace_build(before:, after:)
click to toggle source
# File lib/drunker/artifact.rb, line 51 def replace_build(before:, after:) builds.delete(before) logger.debug("Unset build: { build: #{before}, artifact: #{name} }") set_build(after) end
set_build(build)
click to toggle source
# File lib/drunker/artifact.rb, line 46 def set_build(build) @builds << build logger.debug("Set build: { build: #{build}, artifact: #{name} }") end
to_h()
click to toggle source
# File lib/drunker/artifact.rb, line 22 def to_h { type: "S3", location: bucket.name, namespace_type: "BUILD_ID", } end
Private Instance Methods
fetch_content(object_id)
click to toggle source
# File lib/drunker/artifact.rb, line 68 def fetch_content(object_id) logger.debug("Get artifact: #{object_id}") bucket.object(object_id).get.body.string end