Commit cf1beb00 authored by Kamil Trzciński's avatar Kamil Trzciński

Merge branch 'fix/gb/improve-container-registry-clipboard-links' into 'master'

Fix container repository/tag location text copied into the clipboard

Closes #30695

See merge request !10587
parents 7df8118a bb294b91
......@@ -23,6 +23,10 @@ class ContainerRepository < ActiveRecord::Base
@path ||= [project.full_path, name].select(&:present?).join('/')
end
def location
File.join(registry.path, path)
end
def tag(tag)
ContainerRegistry::Tag.new(self, tag)
end
......
......@@ -4,7 +4,7 @@
= icon('chevron-down', 'aria-hidden': 'true')
= escape_once(image.path)
= clipboard_button(clipboard_text: "docker pull #{image.path}")
= clipboard_button(clipboard_text: "docker pull #{image.location}")
.controls.hidden-xs.pull-right
= link_to namespace_project_container_registry_path(@project.namespace, @project, image),
......
%tr.tag
%td
= escape_once(tag.name)
= clipboard_button(text: "docker pull #{tag.path}")
= clipboard_button(text: "docker pull #{tag.location}")
%td
- if tag.revision
%span.has-tooltip{ title: "#{tag.revision}" }
......
......@@ -29,6 +29,10 @@ module ContainerRegistry
"#{repository.path}:#{name}"
end
def location
"#{repository.location}:#{name}"
end
def [](key)
return unless manifest
......
......@@ -50,6 +50,13 @@ describe ContainerRegistry::Tag do
end
end
describe '#location' do
it 'returns a full location of the tag' do
expect(tag.location)
.to eq 'registry.gitlab/group/test:tag'
end
end
context 'manifest processing' do
context 'schema v1' do
before do
......
......@@ -4,7 +4,7 @@ describe ContainerRepository do
let(:group) { create(:group, name: 'group') }
let(:project) { create(:project, path: 'test', group: group) }
let(:container_repository) do
let(:repository) do
create(:container_repository, name: 'my_image', project: project)
end
......@@ -23,48 +23,48 @@ describe ContainerRepository do
describe 'associations' do
it 'belongs to the project' do
expect(container_repository).to belong_to(:project)
expect(repository).to belong_to(:project)
end
end
describe '#tag' do
it 'has a test tag' do
expect(container_repository.tag('test')).not_to be_nil
expect(repository.tag('test')).not_to be_nil
end
end
describe '#path' do
it 'returns a full path to the repository' do
expect(container_repository.path).to eq('group/test/my_image')
expect(repository.path).to eq('group/test/my_image')
end
end
describe '#manifest' do
subject { container_repository.manifest }
it { is_expected.not_to be_nil }
it 'returns non-empty manifest' do
expect(repository.manifest).not_to be_nil
end
end
describe '#valid?' do
subject { container_repository.valid? }
it { is_expected.to be_truthy }
it 'is a valid repository' do
expect(repository).to be_valid
end
end
describe '#tags' do
subject { container_repository.tags }
it { is_expected.not_to be_empty }
it 'returns non-empty tags list' do
expect(repository.tags).not_to be_empty
end
end
describe '#has_tags?' do
it 'has tags' do
expect(container_repository).to have_tags
expect(repository).to have_tags
end
end
describe '#delete_tags!' do
let(:container_repository) do
let(:repository) do
create(:container_repository, name: 'my_image',
tags: %w[latest rc1],
project: project)
......@@ -72,21 +72,36 @@ describe ContainerRepository do
context 'when action succeeds' do
it 'returns status that indicates success' do
expect(container_repository.client)
expect(repository.client)
.to receive(:delete_repository_tag)
.and_return(true)
expect(container_repository.delete_tags!).to be_truthy
expect(repository.delete_tags!).to be_truthy
end
end
context 'when action fails' do
it 'returns status that indicates failure' do
expect(container_repository.client)
expect(repository.client)
.to receive(:delete_repository_tag)
.and_return(false)
expect(container_repository.delete_tags!).to be_falsey
expect(repository.delete_tags!).to be_falsey
end
end
end
describe '#location' do
context 'when registry is running on a custom port' do
before do
stub_container_registry_config(enabled: true,
api_url: 'http://registry.gitlab:5000',
host_port: 'registry.gitlab:5000')
end
it 'returns a full location of the repository' do
expect(repository.location)
.to eq 'registry.gitlab:5000/group/test/my_image'
end
end
end
......@@ -102,7 +117,7 @@ describe ContainerRepository do
context 'when repository is not a root repository' do
it 'returns false' do
expect(container_repository).not_to be_root_repository
expect(repository).not_to be_root_repository
end
end
end
......
require 'spec_helper'
describe 'projects/registry/repositories/index', :view do
let(:group) { create(:group, path: 'group') }
let(:project) { create(:empty_project, group: group, path: 'test') }
let(:repository) do
create(:container_repository, project: project, name: 'image')
end
before do
stub_container_registry_config(enabled: true,
host_port: 'registry.gitlab',
api_url: 'http://registry.gitlab')
stub_container_registry_tags(repository: :any, tags: [:latest])
assign(:project, project)
assign(:images, [repository])
allow(view).to receive(:can?).and_return(true)
end
it 'contains container repository path' do
render
expect(rendered).to have_content 'group/test/image'
end
it 'contains attribute for copying tag location into clipboard' do
render
expect(rendered).to have_css 'button[data-clipboard-text="docker pull ' \
'registry.gitlab/group/test/image:latest"]'
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment