diff --git a/app/models/project.rb b/app/models/project.rb index d384c58ca36..36ce472f3a3 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -375,17 +375,19 @@ class Project < ActiveRecord::Base @repository ||= Repository.new(path_with_namespace, self) end - def container_registry + def container_registry_repository @container_registry_repository ||= begin token = Jwt::ContainerRegistryAuthenticationService.full_access_token(path_with_namespace) - registry = ContainerRegistry::Registry.new(Gitlab.config.registry.api_url, token: token) + url = Gitlab.config.registry.api_url + host_port = Gitlab.config.registry.host_port + registry = ContainerRegistry::Registry.new(url, token: token, path: host_port) registry[path_with_namespace] end end - def container_registry_url + def container_registry_repository_url if container_registry_enabled? && Gitlab.config.registry.enabled - "#{Gitlab.config.registry.host_with_port}/#{path_with_namespace}" + "#{Gitlab.config.registry.host_port}/#{path_with_namespace}" end end diff --git a/app/views/projects/container_registry/index.html.haml b/app/views/projects/container_registry/index.html.haml index 1ac3a62f54e..5b7dd27ace6 100644 --- a/app/views/projects/container_registry/index.html.haml +++ b/app/views/projects/container_registry/index.html.haml @@ -1,35 +1,36 @@ - page_title "Container Registry" = render "header_title" -.light.prepend-top-default - %p - A 'container image' is a snapshot of a container. - You can host your 'container images' with GitLab. - %br - To start using container images hosted on GitLab you first need to login: - %pre - %code - docker login #{Gitlab.config.registry.host_port} - %br - Then you are free to create and upload a container images with build and push commands: - %pre - docker build -t #{Gitlab.config.registry.host_port}/#{@project.path_with_namespace} . - %br - docker push #{Gitlab.config.registry.host_port}/#{@project.path_with_namespace} - %hr %ul.content-list - if @tags.blank? %li - .nothing-here-block No images to show + .nothing-here-block No images in Container Registry for this project. + + .light.prepend-top-default + %p + A 'container image' is a snapshot of a container. + You can host your container images with GitLab. + %br + To start using container images hosted on GitLab you first need to login: + %pre + %code + docker login #{Gitlab.config.registry.host_port} + %br + Then you are free to create and upload a container images with build and push commands: + %pre + docker build -t #{escape_once(@project.container_registry_repository_url)} . + %br + docker push #{escape_once(@project.container_registry_repository_url)} + - else .table-holder %table.table.builds %thead %tr %th Name - %th Digest + %th Image ID %th Size %th Created %th @@ -37,8 +38,8 @@ - @tags.each do |tag| %tr %td - #{tag.repository.name}:#{tag.name} - = clipboard_button(clipboard_text: "docker pull #{Gitlab.config.registry.host_port}/#{tag.repository.name}:#{tag.name}") + = escape_once(tag.name) + = clipboard_button(clipboard_text: "docker pull #{tag.path}") %td - if layer = tag.layers.first %span.has-tooltip(title="#{layer.revision}") diff --git a/lib/container_registry/blob.rb b/lib/container_registry/blob.rb index e0d9923f217..16e3f853418 100644 --- a/lib/container_registry/blob.rb +++ b/lib/container_registry/blob.rb @@ -11,6 +11,10 @@ module ContainerRegistry digest.present? end + def path + "#{repository.path}@#{digest}" + end + def digest config['digest'] end diff --git a/lib/container_registry/registry.rb b/lib/container_registry/registry.rb index f866862db22..a86ddb9326a 100644 --- a/lib/container_registry/registry.rb +++ b/lib/container_registry/registry.rb @@ -1,8 +1,9 @@ module ContainerRegistry class Registry - attr_reader :uri, :client + attr_reader :uri, :client, :path def initialize(uri, options = {}) + @path = uri || options[:path] @uri = URI.parse(uri) @client = ContainerRegistry::Client.new(uri, options) end diff --git a/lib/container_registry/repository.rb b/lib/container_registry/repository.rb index c930878d265..f01330f3648 100644 --- a/lib/container_registry/repository.rb +++ b/lib/container_registry/repository.rb @@ -10,6 +10,10 @@ module ContainerRegistry @client ||= registry.client end + def path + [registry.path, name].compact.join('/') + end + def [](tag) ContainerRegistry::Tag.new(self, tag) end diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb index 324778bdf2a..14cee8be889 100644 --- a/lib/container_registry/tag.rb +++ b/lib/container_registry/tag.rb @@ -15,6 +15,10 @@ module ContainerRegistry @manifest = client.repository_manifest(repository.name, name) end + def path + "#{repository.path}:#{name}" + end + def [](key) return unless manifest manifest[key]