diff options
author | Rémy Coutable <remy@rymai.me> | 2016-06-15 15:07:39 +0000 |
---|---|---|
committer | Rémy Coutable <remy@rymai.me> | 2016-06-15 15:07:39 +0000 |
commit | a8b46301907abeeedab4010a966bbd8efc8d370c (patch) | |
tree | a24d4121c2912b55e9b38689859afd971ac81463 /lib | |
parent | e27de52607369a11ee3cec7fbdd2ffa5cb6e0061 (diff) | |
parent | 3213023dd657ba6c5c6d690fae2ca44a409b16fd (diff) | |
download | gitlab-ce-a8b46301907abeeedab4010a966bbd8efc8d370c.tar.gz |
Merge branch 'docker-registry-manifest-v1' into 'master'
Add support for Docker Registry manifest v1
## What does this MR do?
Adds support for Manifest V1 generated by older versions of Docker (before 1.10).
## What are the relevant issue numbers?
Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/18609
See merge request !4669
Diffstat (limited to 'lib')
-rw-r--r-- | lib/container_registry/blob.rb | 2 | ||||
-rw-r--r-- | lib/container_registry/client.rb | 4 | ||||
-rw-r--r-- | lib/container_registry/tag.rb | 14 |
3 files changed, 16 insertions, 4 deletions
diff --git a/lib/container_registry/blob.rb b/lib/container_registry/blob.rb index 4e20dc4f875..eb5a2596177 100644 --- a/lib/container_registry/blob.rb +++ b/lib/container_registry/blob.rb @@ -18,7 +18,7 @@ module ContainerRegistry end def digest - config['digest'] + config['digest'] || config['blobSum'] end def type diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb index 4d726692f45..e0b3f14d384 100644 --- a/lib/container_registry/client.rb +++ b/lib/container_registry/client.rb @@ -47,7 +47,9 @@ module ContainerRegistry conn.request :json conn.headers['Accept'] = MANIFEST_VERSION - conn.response :json, content_type: /\bjson$/ + conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+prettyjws' + conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+json' + conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v2+json' if options[:user] && options[:password] conn.request(:basic_auth, options[:user].to_s, options[:password].to_s) diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb index 43f8d6dc8c2..7a0929d774e 100644 --- a/lib/container_registry/tag.rb +++ b/lib/container_registry/tag.rb @@ -12,6 +12,14 @@ module ContainerRegistry manifest.present? end + def v1? + manifest && manifest['schemaVersion'] == 1 + end + + def v2? + manifest && manifest['schemaVersion'] == 2 + end + def manifest return @manifest if defined?(@manifest) @@ -57,7 +65,9 @@ module ContainerRegistry return @layers if defined?(@layers) return unless manifest - @layers = manifest['layers'].map do |layer| + layers = manifest['layers'] || manifest['fsLayers'] + + @layers = layers.map do |layer| repository.blob(layer) end end @@ -65,7 +75,7 @@ module ContainerRegistry def total_size return unless layers - layers.map(&:size).sum + layers.map(&:size).sum if v2? end def delete |