docker_registry2 1.14.0 → 1.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c331456d39ce2a4a57002e7117101f261b2b78bea3b056843430b6c8ccc2110
4
- data.tar.gz: 2370009afd0319cfc35a49443e51ad6566508362e5cf3fce941af793c16ac885
3
+ metadata.gz: bf700e5c43bdbd9216827748cc2010b4f4a2ab6fc83615478589e24200a17e80
4
+ data.tar.gz: 10dc661ce6689a5a4009d64483c4e26c78bb8dae08412058e4a565cc79169c59
5
5
  SHA512:
6
- metadata.gz: 32a04a5987fa31cd7feb34d476f82b771e02fd4e5f93caeb4888ad27da0ab7b20cd5cf279f3f06954c599cf68ac930ed9183e5b0410ef90642110bd9ca859b62
7
- data.tar.gz: 6ae15951f3f7ca11af1700a701fbc5e270f4adf9a9fb1998bb3657ef85fc79bd1c7cb18e1f9e598e8d592eec9d3c2dfb412d34c7c39fab26b7a3df69585b0dc0
6
+ metadata.gz: e2f999e780c186e6e19c23698984f2897ddda4e312641cbea94fb1f6e873053c14a55b7fe6422508537eb6e9c3eb023086030156a3ec2214a828f886e956ddba
7
+ data.tar.gz: 33166c81576a0f368ce6326c1d62726524e8143eeb9e9c579433efa172e87dea00f2a469359ff87238750b7595af7508798c090dcfd68a1d0e5c02192ed134db
@@ -4,30 +4,30 @@ module DockerRegistry2
4
4
  class Exception < RuntimeError
5
5
  end
6
6
 
7
- class RegistryAuthenticationException < StandardError
7
+ class RegistryAuthenticationException < DockerRegistry2::Exception
8
8
  end
9
9
 
10
- class RegistryAuthorizationException < StandardError
10
+ class RegistryAuthorizationException < DockerRegistry2::Exception
11
11
  end
12
12
 
13
- class RegistryUnknownException < StandardError
13
+ class RegistryUnknownException < DockerRegistry2::Exception
14
14
  end
15
15
 
16
- class RegistrySSLException < StandardError
16
+ class RegistrySSLException < DockerRegistry2::Exception
17
17
  end
18
18
 
19
- class RegistryVersionException < StandardError
19
+ class RegistryVersionException < DockerRegistry2::Exception
20
20
  end
21
21
 
22
- class ReauthenticatedException < StandardError
22
+ class ReauthenticatedException < DockerRegistry2::Exception
23
23
  end
24
24
 
25
- class UnknownRegistryException < StandardError
25
+ class UnknownRegistryException < DockerRegistry2::Exception
26
26
  end
27
27
 
28
- class NotFound < StandardError
28
+ class NotFound < DockerRegistry2::Exception
29
29
  end
30
30
 
31
- class InvalidMethod < StandardError
31
+ class InvalidMethod < DockerRegistry2::Exception
32
32
  end
33
33
  end
@@ -17,7 +17,7 @@ module DockerRegistry2
17
17
  # @option options [Hash] :http_options Extra options for RestClient::Request.execute.
18
18
  def initialize(uri, options = {})
19
19
  @uri = URI.parse(uri)
20
- @base_uri = "#{@uri.scheme}://#{@uri.host}:#{@uri.port}"
20
+ @base_uri = "#{@uri.scheme}://#{@uri.host}:#{@uri.port}#{@uri.path}"
21
21
  @user = options[:user]
22
22
  @password = options[:password]
23
23
  @http_options = options[:http_options] || {}
@@ -83,21 +83,9 @@ module DockerRegistry2
83
83
 
84
84
  # do we include the hashes?
85
85
  if withHashes
86
- useGet = false
87
86
  resp['hashes'] = {}
88
87
  resp['tags'].each do |tag|
89
- if useGet
90
- head = doget "/v2/#{repo}/manifests/#{tag}"
91
- else
92
- begin
93
- head = dohead "/v2/#{repo}/manifests/#{tag}"
94
- rescue DockerRegistry2::InvalidMethod
95
- # in case we are in a registry pre-2.3.0, which did not support manifest HEAD
96
- useGet = true
97
- head = doget "/v2/#{repo}/manifests/#{tag}"
98
- end
99
- end
100
- resp['hashes'][tag] = head.headers[:docker_content_digest]
88
+ resp['hashes'][tag] = digest(repo, tag)
101
89
  end
102
90
  end
103
91
 
@@ -138,12 +126,29 @@ module DockerRegistry2
138
126
  end
139
127
  end
140
128
 
141
- def digest(repo, tag)
142
- tag_path = "/v2/#{repo}/manifests/#{tag}"
143
- dohead(tag_path).headers[:docker_content_digest]
144
- rescue DockerRegistry2::InvalidMethod
145
- # Pre-2.3.0 registries didn't support manifest HEAD requests
146
- doget(tag_path).headers[:docker_content_digest]
129
+ def digest(image, tag, architecture = nil, os = nil, variant = nil)
130
+ manifest = manifest(image, tag)
131
+ parsed_manifest = JSON.parse(manifest.body)
132
+
133
+ # Multi-arch images
134
+ if parsed_manifest.key?('manifests')
135
+ manifests = parsed_manifest['manifests']
136
+
137
+ return manifests if architecture.nil? || os.nil?
138
+
139
+ manifests.each do |entry|
140
+ if !variant.nil?
141
+ return entry['digest'] if entry['platform']['architecture'] == architecture && entry['platform']['os'] == os && entry['platform']['variant'] == variant
142
+ elsif entry['platform']['architecture'] == architecture && entry['platform']['os'] == os
143
+ return entry['digest']
144
+ end
145
+ end
146
+
147
+ raise DockerRegistry2::NotFound, "No matches found for the image=#{image} tag=#{tag} os=#{os} architecture=#{architecture}"
148
+
149
+ end
150
+
151
+ manifest.headers[:docker_content_digest]
147
152
  end
148
153
 
149
154
  def rmtag(image, tag)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DockerRegistry2
4
- VERSION = '1.14.0'
4
+ VERSION = '1.16.0'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: docker_registry2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.14.0
4
+ version: 1.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Avi Deitcher https://github.com/deitch
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2023-03-31 00:00:00.000000000 Z
14
+ date: 2023-06-06 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler