Class: Artifactory::Resource::Artifact
- Defined in:
- lib/artifactory/resources/artifact.rb
Class Method Summary collapse
-
.checksum_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by its checksum.
- .from_hash(hash, options = {}) ⇒ Object
-
.gavc_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by Maven coordinates: Group ID, Artifact ID,
Version
andClassifier
. -
.latest_version(options = {}) ⇒ String?
Get the latest version of an artifact.
-
.property_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by the given properties.
-
.search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by the full or partial filename.
-
.versions(options = {}) ⇒ Object
Get all versions of an artifact.
Instance Method Summary collapse
-
#checksums ⇒ Object
Return this object’s
checksums
. -
#checksums=(value) ⇒ Object
Set this object’s
checksums
. -
#checksums? ⇒ Boolean
Determines if the
checksums
value exists and is truthy. -
#compliance ⇒ Hash<String, Array<Hash>>
Get compliance info for a given artifact path.
- #copy(destination, options = {}) ⇒ Object
-
#created ⇒ Object
Return this object’s
created
. -
#created=(value) ⇒ Object
Set this object’s
created
. -
#created? ⇒ Boolean
Determines if the
created
value exists and is truthy. -
#delete ⇒ Boolean
Delete this artifact from repository, suppressing any
ResourceNotFound
exceptions might occur. -
#download(target = Dir.mktmpdir, options = {}) ⇒ String
Download the artifact onto the local disk.
-
#download_uri ⇒ Object
Return this object’s
download_uri
. -
#download_uri=(value) ⇒ Object
Set this object’s
download_uri
. -
#download_uri? ⇒ Boolean
Determines if the
download_uri
value exists and is truthy. -
#key ⇒ Object
Return this object’s
key
. -
#key=(value) ⇒ Object
Set this object’s
key
. -
#key? ⇒ Boolean
Determines if the
key
value exists and is truthy. -
#last_modified ⇒ Object
Return this object’s
last_modified
. -
#last_modified=(value) ⇒ Object
Set this object’s
last_modified
. -
#last_modified? ⇒ Boolean
Determines if the
last_modified
value exists and is truthy. -
#last_updated ⇒ Object
Return this object’s
last_updated
. -
#last_updated=(value) ⇒ Object
Set this object’s
last_updated
. -
#last_updated? ⇒ Boolean
Determines if the
last_updated
value exists and is truthy. -
#local_path ⇒ Object
Return this object’s
local_path
. -
#local_path=(value) ⇒ Object
Set this object’s
local_path
. -
#local_path? ⇒ Boolean
Determines if the
local_path
value exists and is truthy. -
#md5 ⇒ String
The MD5 of this artifact.
-
#mime_type ⇒ Object
Return this object’s
mime_type
. -
#mime_type=(value) ⇒ Object
Set this object’s
mime_type
. -
#mime_type? ⇒ Boolean
Determines if the
mime_type
value exists and is truthy. - #move(destination, options = {}) ⇒ Object
-
#properties ⇒ Hash<String, Object>
The list of properties for this object.
-
#repo ⇒ Object
Return this object’s
repo
. -
#repo=(value) ⇒ Object
Set this object’s
repo
. -
#repo? ⇒ Boolean
Determines if the
repo
value exists and is truthy. -
#sha1 ⇒ String
The SHA of this artifact.
-
#size ⇒ Object
Return this object’s
size
. -
#size=(value) ⇒ Object
Set this object’s
size
. -
#size? ⇒ Boolean
Determines if the
size
value exists and is truthy. -
#upload(repo, remote_path, properties = {}, headers = {}) ⇒ Resource::Artifact
Upload an artifact into the repository.
-
#upload_checksum(repo, remote_path, type, value) ⇒ true
Upload the checksum for this artifact.
-
#upload_from_archive(repo, remote_path, properties = {}) ⇒ Object
Upload an artifact with the given archive.
-
#upload_with_checksum(repo, remote_path, checksum, properties = {}) ⇒ Object
Upload an artifact with the given SHA checksum.
-
#uri ⇒ Object
Return this object’s
uri
. -
#uri=(value) ⇒ Object
Set this object’s
uri
. -
#uri? ⇒ Boolean
Determines if the
uri
value exists and is truthy.
Methods inherited from Base
attribute, attributes, #attributes, #client, #client=, #client?, #extract_client!, extract_client!, find_from_config, format_repos!, #format_repos!, from_url, has_attribute?, #initialize, #inspect, list_from_config, #set, #to_hash, #to_json, #to_matrix_properties, #to_s, url_safe, #url_safe
Constructor Details
This class inherits a constructor from Artifactory::Resource::Base
Class Method Details
.checksum_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by its checksum
160 161 162 163 164 165 166 167 168 |
# File 'lib/artifactory/resources/artifact.rb', line 160 def checksum_search( = {}) client = extract_client!() params = Util.slice(, :md5, :sha1, :repos) format_repos!(params) client.get('/api/search/checksum', params)['results'].map do |artifact| from_url(artifact['uri'], client: client) end end |
.from_hash(hash, options = {}) ⇒ Object
264 265 266 267 268 269 270 271 |
# File 'lib/artifactory/resources/artifact.rb', line 264 def from_hash(hash, = {}) super.tap do |instance| instance.created = Time.parse(instance.created) rescue nil instance.last_modified = Time.parse(instance.last_modified) rescue nil instance.last_updated = Time.parse(instance.last_updated) rescue nil instance.size = instance.size.to_i end end |
.gavc_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by Maven coordinates: Group ID, Artifact ID, Version
and Classifier
.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/artifactory/resources/artifact.rb', line 76 def gavc_search( = {}) client = extract_client!() = Util.rename_keys(, :group => :g, :name => :a, :version => :v, :classifier => :c, ) params = Util.slice(, :g, :a, :v, :c, :repos) format_repos!(params) client.get('/api/search/gavc', params)['results'].map do |artifact| from_url(artifact['uri'], client: client) end end |
.latest_version(options = {}) ⇒ String?
Get the latest version of an artifact.
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 |
# File 'lib/artifactory/resources/artifact.rb', line 241 def latest_version( = {}) client = extract_client!() = Util.rename_keys(, :group => :g, :name => :a, :version => :v, ) params = Util.slice(, :g, :a, :v, :repos, :remote) format_repos!(params) # For whatever reason, Artifactory won't accept "true" - they want a # literal "1"... params[:remote] = 1 if [:remote] client.get('/api/search/latestVersion', params) rescue Error::HTTPError => e raise unless e.code == 404 nil end |
.property_search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by the given properties. These are arbitrary properties defined by the user on artifact, so the search uses a free- form schema.
121 122 123 124 125 126 127 128 129 |
# File 'lib/artifactory/resources/artifact.rb', line 121 def property_search( = {}) client = extract_client!() params = .dup format_repos!(params) client.get('/api/search/prop', params)['results'].map do |artifact| from_url(artifact['uri'], client: client) end end |
.search(options = {}) ⇒ Array<Resource::Artifact>
Search for an artifact by the full or partial filename.
26 27 28 29 30 31 32 33 34 |
# File 'lib/artifactory/resources/artifact.rb', line 26 def search( = {}) client = extract_client!() params = Util.slice(, :name, :repos) format_repos!(params) client.get('/api/search/artifact', params)['results'].map do |artifact| from_url(artifact['uri'], client: client) end end |
.versions(options = {}) ⇒ Object
Get all versions of an artifact.
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/artifactory/resources/artifact.rb', line 190 def versions( = {}) client = extract_client!() = Util.rename_keys(, :group => :g, :name => :a, :version => :v, ) params = Util.slice(, :g, :a, :v, :repos) format_repos!(params) client.get('/api/search/versions', params)['results'] rescue Error::HTTPError => e raise unless e.code == 404 [] end |
Instance Method Details
#checksums ⇒ Object
Return this object’s checksums
275 |
# File 'lib/artifactory/resources/artifact.rb', line 275 attribute :checksums |
#checksums=(value) ⇒ Object
Set this object’s checksums
275 |
# File 'lib/artifactory/resources/artifact.rb', line 275 attribute :checksums |
#checksums? ⇒ Boolean
Determines if the checksums
value exists and is truthy
275 |
# File 'lib/artifactory/resources/artifact.rb', line 275 attribute :checksums |
#compliance ⇒ Hash<String, Array<Hash>>
Get compliance info for a given artifact path. The result includes license and vulnerabilities, if any.
**This requires the Black Duck addon to be enabled!**
355 356 357 |
# File 'lib/artifactory/resources/artifact.rb', line 355 def compliance @compliance ||= client.get(File.join('/api/compliance', relative_path)) end |
#copy(destination, options = {}) ⇒ Object
307 308 309 |
# File 'lib/artifactory/resources/artifact.rb', line 307 def copy(destination, = {}) copy_or_move(:copy, destination, ) end |
#created ⇒ Object
Return this object’s created
276 |
# File 'lib/artifactory/resources/artifact.rb', line 276 attribute :created |
#created=(value) ⇒ Object
Set this object’s created
276 |
# File 'lib/artifactory/resources/artifact.rb', line 276 attribute :created |
#created? ⇒ Boolean
Determines if the created
value exists and is truthy
276 |
# File 'lib/artifactory/resources/artifact.rb', line 276 attribute :created |
#delete ⇒ Boolean
Delete this artifact from repository, suppressing any ResourceNotFound
exceptions might occur.
318 319 320 321 322 |
# File 'lib/artifactory/resources/artifact.rb', line 318 def delete !!client.delete(download_uri) rescue Error::HTTPError false end |
#download(target = Dir.mktmpdir, options = {}) ⇒ String
Download the artifact onto the local disk.
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
# File 'lib/artifactory/resources/artifact.rb', line 380 def download(target = Dir.mktmpdir, = {}) target = File.(target) # Make the directory if it doesn't yet exist FileUtils.mkdir_p(target) unless File.exists?(target) # Use the server artifact's filename if one wasn't given filename = [:filename] || File.basename(download_uri) # Construct the full path for the file destination = File.join(target, filename) File.open(destination, 'wb') do |file| file.write(client.get(download_uri)) end destination end |
#download_uri ⇒ Object
Return this object’s download_uri
277 |
# File 'lib/artifactory/resources/artifact.rb', line 277 attribute :download_uri, ->{ raise 'Download URI missing!' } |
#download_uri=(value) ⇒ Object
Set this object’s download_uri
277 |
# File 'lib/artifactory/resources/artifact.rb', line 277 attribute :download_uri, ->{ raise 'Download URI missing!' } |
#download_uri? ⇒ Boolean
Determines if the download_uri
value exists and is truthy
277 |
# File 'lib/artifactory/resources/artifact.rb', line 277 attribute :download_uri, ->{ raise 'Download URI missing!' } |
#key ⇒ Object
Return this object’s key
278 |
# File 'lib/artifactory/resources/artifact.rb', line 278 attribute :key |
#key=(value) ⇒ Object
Set this object’s key
278 |
# File 'lib/artifactory/resources/artifact.rb', line 278 attribute :key |
#key? ⇒ Boolean
Determines if the key
value exists and is truthy
278 |
# File 'lib/artifactory/resources/artifact.rb', line 278 attribute :key |
#last_modified ⇒ Object
Return this object’s last_modified
279 |
# File 'lib/artifactory/resources/artifact.rb', line 279 attribute :last_modified |
#last_modified=(value) ⇒ Object
Set this object’s last_modified
279 |
# File 'lib/artifactory/resources/artifact.rb', line 279 attribute :last_modified |
#last_modified? ⇒ Boolean
Determines if the last_modified
value exists and is truthy
279 |
# File 'lib/artifactory/resources/artifact.rb', line 279 attribute :last_modified |
#last_updated ⇒ Object
Return this object’s last_updated
280 |
# File 'lib/artifactory/resources/artifact.rb', line 280 attribute :last_updated |
#last_updated=(value) ⇒ Object
Set this object’s last_updated
280 |
# File 'lib/artifactory/resources/artifact.rb', line 280 attribute :last_updated |
#last_updated? ⇒ Boolean
Determines if the last_updated
value exists and is truthy
280 |
# File 'lib/artifactory/resources/artifact.rb', line 280 attribute :last_updated |
#local_path ⇒ Object
Return this object’s local_path
281 |
# File 'lib/artifactory/resources/artifact.rb', line 281 attribute :local_path, ->{ raise 'Local destination missing!' } |
#local_path=(value) ⇒ Object
Set this object’s local_path
281 |
# File 'lib/artifactory/resources/artifact.rb', line 281 attribute :local_path, ->{ raise 'Local destination missing!' } |
#local_path? ⇒ Boolean
Determines if the local_path
value exists and is truthy
281 |
# File 'lib/artifactory/resources/artifact.rb', line 281 attribute :local_path, ->{ raise 'Local destination missing!' } |
#md5 ⇒ String
The MD5 of this artifact.
300 301 302 |
# File 'lib/artifactory/resources/artifact.rb', line 300 def md5 checksums && checksums['md5'] end |
#mime_type ⇒ Object
Return this object’s mime_type
282 |
# File 'lib/artifactory/resources/artifact.rb', line 282 attribute :mime_type |
#mime_type=(value) ⇒ Object
Set this object’s mime_type
282 |
# File 'lib/artifactory/resources/artifact.rb', line 282 attribute :mime_type |
#mime_type? ⇒ Boolean
Determines if the mime_type
value exists and is truthy
282 |
# File 'lib/artifactory/resources/artifact.rb', line 282 attribute :mime_type |
#move(destination, options = {}) ⇒ Object
327 328 329 |
# File 'lib/artifactory/resources/artifact.rb', line 327 def move(destination, = {}) copy_or_move(:move, destination, ) end |
#properties ⇒ Hash<String, Object>
The list of properties for this object.
340 341 342 |
# File 'lib/artifactory/resources/artifact.rb', line 340 def properties @properties ||= client.get(uri, properties: nil)['properties'] end |
#repo ⇒ Object
Return this object’s repo
283 |
# File 'lib/artifactory/resources/artifact.rb', line 283 attribute :repo |
#repo=(value) ⇒ Object
Set this object’s repo
283 |
# File 'lib/artifactory/resources/artifact.rb', line 283 attribute :repo |
#repo? ⇒ Boolean
Determines if the repo
value exists and is truthy
283 |
# File 'lib/artifactory/resources/artifact.rb', line 283 attribute :repo |
#sha1 ⇒ String
The SHA of this artifact.
291 292 293 |
# File 'lib/artifactory/resources/artifact.rb', line 291 def sha1 checksums && checksums['sha1'] end |
#size ⇒ Object
Return this object’s size
284 |
# File 'lib/artifactory/resources/artifact.rb', line 284 attribute :size |
#size=(value) ⇒ Object
Set this object’s size
284 |
# File 'lib/artifactory/resources/artifact.rb', line 284 attribute :size |
#size? ⇒ Boolean
Determines if the size
value exists and is truthy
284 |
# File 'lib/artifactory/resources/artifact.rb', line 284 attribute :size |
#upload(repo, remote_path, properties = {}, headers = {}) ⇒ Resource::Artifact
Upload an artifact into the repository. If the first parameter is a File object, that file descriptor is passed to the uploader. If the first parameter is a string, it is assumed to be the path to a local file on disk. This method will automatically construct the File object from the given path.
432 433 434 435 436 437 438 439 440 441 442 443 444 |
# File 'lib/artifactory/resources/artifact.rb', line 432 def upload(repo, remote_path, properties = {}, headers = {}) file = File.new(File.(local_path)) matrix = to_matrix_properties(properties) endpoint = File.join("#{url_safe(repo)}#{matrix}", remote_path) response = client.put(endpoint, file, headers) # Upload checksums if they were given upload_checksum(repo, remote_path, :md5, md5) if md5 upload_checksum(repo, remote_path, :sha1, sha1) if sha1 self.class.from_hash(response) end |
#upload_checksum(repo, remote_path, type, value) ⇒ true
Upload the checksum for this artifact. **The artifact must already be uploaded or Artifactory will throw an exception!**. This is both a public and private API. It is automatically called in #upload if the SHA values are set. You may also call it manually.
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 |
# File 'lib/artifactory/resources/artifact.rb', line 464 def upload_checksum(repo, remote_path, type, value) file = Tempfile.new("checksum.#{type}") file.write(value) file.rewind endpoint = File.join(url_safe(repo), "#{remote_path}.#{type}") client.put(endpoint, file) true ensure if file file.close file.unlink end end |
#upload_from_archive(repo, remote_path, properties = {}) ⇒ Object
Upload an artifact with the given archive. Consult the artifactory documentation for the format of the archive to upload.
514 515 516 517 518 |
# File 'lib/artifactory/resources/artifact.rb', line 514 def upload_from_archive(repo, remote_path, properties = {}) upload(repo, remote_path, properties, 'X-Explode-Archive' => true, ) end |
#upload_with_checksum(repo, remote_path, checksum, properties = {}) ⇒ Object
Upload an artifact with the given SHA checksum. Consult the artifactory documentation for the possible responses when the checksums fail to match.
495 496 497 498 499 500 |
# File 'lib/artifactory/resources/artifact.rb', line 495 def upload_with_checksum(repo, remote_path, checksum, properties = {}) upload(repo, remote_path, properties, 'X-Checksum-Deploy' => true, 'X-Checksum-Sha1' => checksum, ) end |
#uri ⇒ Object
Return this object’s uri
274 |
# File 'lib/artifactory/resources/artifact.rb', line 274 attribute :uri, ->{ raise 'API path missing!' } |
#uri=(value) ⇒ Object
Set this object’s uri
274 |
# File 'lib/artifactory/resources/artifact.rb', line 274 attribute :uri, ->{ raise 'API path missing!' } |
#uri? ⇒ Boolean
Determines if the uri
value exists and is truthy
274 |
# File 'lib/artifactory/resources/artifact.rb', line 274 attribute :uri, ->{ raise 'API path missing!' } |