Commit 5c2f2fd2 authored by Kamil Trzcinski's avatar Kamil Trzcinski

Fix CI tests

parent 4d84ba43
class Projects::ContainerRegistryController < Projects::ApplicationController class Projects::ContainerRegistryController < Projects::ApplicationController
before_action :authorize_read_container_registry! before_action :authorize_read_container_registry!
before_action :authorize_update_container_registry!, only: [:destroy] before_action :authorize_update_container_registry!, only: [:destroy]
before_action :tag, except: [:index]
layout 'project' layout 'project'
def index def index
......
...@@ -34,7 +34,7 @@ module GitlabRoutingHelper ...@@ -34,7 +34,7 @@ module GitlabRoutingHelper
end end
def project_container_registry_path(project, *args) def project_container_registry_path(project, *args)
namespace_project_container_registry_index_url(project.namespace, project, *args) namespace_project_container_registry_index_path(project.namespace, project, *args)
end end
def activity_project_path(project, *args) def activity_project_path(project, *args)
......
...@@ -291,7 +291,7 @@ class Ability ...@@ -291,7 +291,7 @@ class Ability
rules += named_abilities('build') rules += named_abilities('build')
end end
unless project.container_registry_enabled unless project.container_registry_enabled && Gitlab.config.registry.enabled
rules += named_abilities('container_registry') rules += named_abilities('container_registry')
end end
......
...@@ -128,7 +128,7 @@ class Namespace < ActiveRecord::Base ...@@ -128,7 +128,7 @@ class Namespace < ActiveRecord::Base
gitlab_shell.add_namespace(path_was) gitlab_shell.add_namespace(path_was)
if any_project_has_container_registry_tags? if any_project_has_container_registry_tags?
raise Exception.new('namespace cannot be moved, because at least one project has tags in container registry') raise Exception.new('Namespace cannot be moved, because at least one project has tags in container registry')
end end
if gitlab_shell.mv_namespace(path_was, path) if gitlab_shell.mv_namespace(path_was, path)
......
...@@ -377,7 +377,7 @@ class Project < ActiveRecord::Base ...@@ -377,7 +377,7 @@ class Project < ActiveRecord::Base
def container_registry_repository def container_registry_repository
@container_registry_repository ||= begin @container_registry_repository ||= begin
token = Jwt::ContainerRegistryAuthenticationService.full_access_token(path_with_namespace) token = JWT::ContainerRegistryAuthenticationService.full_access_token(path_with_namespace)
url = Gitlab.config.registry.api_url url = Gitlab.config.registry.api_url
host_port = Gitlab.config.registry.host_port host_port = Gitlab.config.registry.host_port
registry = ContainerRegistry::Registry.new(url, token: token, path: host_port) registry = ContainerRegistry::Registry.new(url, token: token, path: host_port)
...@@ -814,7 +814,7 @@ class Project < ActiveRecord::Base ...@@ -814,7 +814,7 @@ class Project < ActiveRecord::Base
if has_container_registry_tags? if has_container_registry_tags?
# we currently doesn't support renaming repository if it contains tags in container registry # we currently doesn't support renaming repository if it contains tags in container registry
raise Exception.new('repository cannot be renamed, due to tags in container registry') raise Exception.new('Project cannot be renamed, because tags are present in its container registry')
end end
if gitlab_shell.mv_repository(old_path_with_namespace, new_path_with_namespace) if gitlab_shell.mv_repository(old_path_with_namespace, new_path_with_namespace)
......
...@@ -14,7 +14,7 @@ module JWT ...@@ -14,7 +14,7 @@ module JWT
def self.full_access_token(*names) def self.full_access_token(*names)
registry = Gitlab.config.registry registry = Gitlab.config.registry
token = ::Jwt::RSAToken.new(registry.key) token = ::JWT::RSAToken.new(registry.key)
token.issuer = registry.issuer token.issuer = registry.issuer
token.audience = AUDIENCE token.audience = AUDIENCE
token[:access] = names.map do |name| token[:access] = names.map do |name|
......
...@@ -64,7 +64,9 @@ module Projects ...@@ -64,7 +64,9 @@ module Projects
end end
def remove_registry_tags def remove_registry_tags
project.image_registry.delete_tags return unless Gitlab.config.registry.enabled
project.container_registry_repository.delete_tags
end end
def raise_error(message) def raise_error(message)
......
...@@ -36,7 +36,7 @@ module Projects ...@@ -36,7 +36,7 @@ module Projects
if project.has_container_registry_tags? if project.has_container_registry_tags?
# we currently doesn't support renaming repository if it contains tags in container registry # we currently doesn't support renaming repository if it contains tags in container registry
raise TransferError.new('Repository cannot be renamed, due to tags in container registry') raise TransferError.new('Project cannot be transferred, because tags are present in its container registry')
end end
project.expire_caches_before_rename(old_path) project.expire_caches_before_rename(old_path)
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
= pluralize(tag.layers.size, "layer") = pluralize(tag.layers.size, "layer")
%td %td
= time_ago_in_words(tag.created_at) = time_ago_in_words(tag.created_at)
- if can?(current_user, :update_container_registry, @project)
%td.content %td.content
.controls.hidden-xs.pull-right .controls.hidden-xs.pull-right
= link_to namespace_project_container_registry_path(@project.namespace, @project, tag.name), class: 'btn btn-remove has-tooltip', title: "Remove", data: { confirm: "Are you sure?" }, method: :delete do = link_to namespace_project_container_registry_path(@project.namespace, @project, tag.name), class: 'btn btn-remove has-tooltip', title: "Remove", data: { confirm: "Are you sure?" }, method: :delete do
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
%code %code
docker login #{Gitlab.config.registry.host_port} docker login #{Gitlab.config.registry.host_port}
%br %br
Then you are free to create and upload a container images with build and push commands: Then you are free to create and upload a container image with build and push commands:
%pre %pre
docker build -t #{escape_once(@project.container_registry_repository_url)} . docker build -t #{escape_once(@project.container_registry_repository_url)} .
%br %br
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
%th Image ID %th Image ID
%th Size %th Size
%th Created %th Created
- if can?(current_user, :update_container_registry, @project)
%th %th
- @tags.each do |tag| - @tags.each do |tag|
......
...@@ -55,7 +55,7 @@ module ContainerRegistry ...@@ -55,7 +55,7 @@ module ContainerRegistry
conn.request :json conn.request :json
conn.headers['Accept'] = MANIFEST_VERSION conn.headers['Accept'] = MANIFEST_VERSION
conn.response :json, :content_type => /\bjson$/ conn.response :json, content_type: /\bjson$/
if options[:user] && options[:password] if options[:user] && options[:password]
conn.request(:basic_auth, options[:user].to_s, options[:password].to_s) conn.request(:basic_auth, options[:user].to_s, options[:password].to_s)
......
...@@ -30,19 +30,21 @@ module ContainerRegistry ...@@ -30,19 +30,21 @@ module ContainerRegistry
def tags def tags
return @tags if defined?(@tags) return @tags if defined?(@tags)
return [] unless manifest && manifest['tags'] return [] unless manifest && manifest['tags']
@tags = manifest['tags'].map do |tag| @tags = manifest['tags'].map do |tag|
ContainerRegistry::Tag.new(self, tag) ContainerRegistry::Tag.new(self, tag)
end end
@tags ||= []
end end
def delete_tags def delete_tags
return unless tags return unless tags
tags.each(:delete) tags.each(:delete)
end end
def mount_blob(blob) def mount_blob(blob)
return unless blob return unless blob
client.repository_mount_blob(name, blob.digest, blob.repository.name) client.repository_mount_blob(name, blob.digest, blob.repository.name)
end end
......
...@@ -5,14 +5,18 @@ describe "Container Registry" do ...@@ -5,14 +5,18 @@ describe "Container Registry" do
let(:repository) { project.container_registry_repository } let(:repository) { project.container_registry_repository }
let(:tag_name) { 'latest' } let(:tag_name) { 'latest' }
let(:tags) { [tag_name] } let(:tags) { [tag_name] }
let(:registry_settings) do
before do {
enabled: true
}
end end
before do before do
login_as(:user) login_as(:user)
project.team << [@user, :developer] project.team << [@user, :developer]
stub_container_registry(*tags) stub_container_registry(*tags)
allow(Gitlab.config.registry).to receive_messages(registry_settings)
allow(JWT::ContainerRegistryAuthenticationService).to receive(:full_access_token).and_return('token')
end end
describe 'GET /:project/container_registry' do describe 'GET /:project/container_registry' do
...@@ -22,6 +26,7 @@ describe "Container Registry" do ...@@ -22,6 +26,7 @@ describe "Container Registry" do
context 'when no tags' do context 'when no tags' do
let(:tags) { [] } let(:tags) { [] }
it { expect(page).to have_content('No images in Container Registry for this project') } it { expect(page).to have_content('No images in Container Registry for this project') }
end end
...@@ -37,6 +42,7 @@ describe "Container Registry" do ...@@ -37,6 +42,7 @@ describe "Container Registry" do
it do it do
expect_any_instance_of(::ContainerRegistry::Tag).to receive(:delete).and_return(true) expect_any_instance_of(::ContainerRegistry::Tag).to receive(:delete).and_return(true)
click_on 'Remove' click_on 'Remove'
end end
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