47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
# File 'lib/cicd/builder/mixlib/repo/S3.rb', line 47
def uploadToRepo(artifacts)
@logger.info CLASS+'::'+__method__.to_s
s3 = getS3()
artifacts.each{|art|
s3_obj = maybeS3Object(art[:key], s3)
upload = false
if art[:data][:data]
tempArtifactFile('artifact', art[:data])
end
if s3_obj.nil?
upload = true
etag = ''
else
@logger.info "s3://#{ENV['AWS_S3_BUCKET']}/#{art[:key]} exists"
etag = s3_obj.etag.gsub(/"/, '')
end
md5 = if art[:data].has_key?(:file)
calcLocalETag(etag, art[:data][:file])
else
raise "Internal error: No :file in #{art[:data].ai}"
end
unless s3_obj.nil?
unless etag == md5
checksum = s3_obj.metadata[:checksum]
unless checksum and checksum == md5
@logger.warn "s3://#{ENV['AWS_S3_BUCKET']}/#{art[:key]} is different from our #{art[:key]}(#{s3_obj.etag} <=> #{md5})"
upload = true
end
end
end
if upload
@logger.info "Upload new s3://#{ENV['AWS_S3_BUCKET']}/#{art[:key]}"
body = nil
if art[:data].has_key?(:file)
size = File.size(art[:data][:file])
body = File.open(art[:data][:file], 'r')
else
raise "Internal error: No :file in #{art[:data].ai}"
end
art[:data][:metadata] = {checksum: md5, digest: "md5=#{md5}"}
res = s3.put_object( bucket: ENV['AWS_S3_BUCKET'],
key: art[:key],
body: body,
content_length: size,
metadata: art[:data][:metadata],
)
s3_obj = maybeS3Object(art[:key], s3)
raise "Failed to upload '#{art[:key]}'" unless s3_obj
if art.has_key?(:public_url)
@vars[art[:public_url]] = s3_obj.public_url
end
if art.has_key?(:read_url)
@vars[art[:read_url]] = s3_obj.presigned_url(:get, expires_in: 86400)
@logger.info "#{art[:label]}: #{@vars[art[:read_url]]}"
end
end
if art[:data][:temp]
File.unlink(art[:data][:file])
end
}
0
end
|