Commit 4210ae0d authored by David Fernandez's avatar David Fernandez Committed by Aleksei Lipniagov

Remove packages_conan_allow_empty_username_channel feature flag

parent 382e7194
...@@ -10,17 +10,10 @@ class Packages::Conan::Metadatum < ApplicationRecord ...@@ -10,17 +10,10 @@ class Packages::Conan::Metadatum < ApplicationRecord
validates :package_username, validates :package_username,
:package_channel, :package_channel,
presence: true, presence: true,
format: { with: Gitlab::Regex.conan_recipe_component_regex }, format: { with: Gitlab::Regex.conan_recipe_user_channel_regex }
if: -> { Feature.disabled?(:packages_conan_allow_empty_username_channel) }
validates :package_username,
:package_channel,
presence: true,
format: { with: Gitlab::Regex.conan_recipe_user_channel_regex },
if: -> { Feature.enabled?(:packages_conan_allow_empty_username_channel) }
validate :conan_package_type validate :conan_package_type
validate :username_channel_none_values, if: -> { Feature.enabled?(:packages_conan_allow_empty_username_channel) } validate :username_channel_none_values
def recipe def recipe
"#{package.name}/#{package.version}@#{package_username}/#{package_channel}" "#{package.name}/#{package.version}@#{package_username}/#{package_channel}"
......
---
name: packages_conan_allow_empty_username_channel
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/75106
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/346006
milestone: '14.5'
type: development
group: group::package
default_enabled: false
...@@ -11,6 +11,3 @@ Grape::Validations.register_validator(:untrusted_regexp, ::API::Validations::Val ...@@ -11,6 +11,3 @@ Grape::Validations.register_validator(:untrusted_regexp, ::API::Validations::Val
Grape::Validations.register_validator(:email_or_email_list, ::API::Validations::Validators::EmailOrEmailList) Grape::Validations.register_validator(:email_or_email_list, ::API::Validations::Validators::EmailOrEmailList)
Grape::Validations.register_validator(:iteration_id, ::API::Validations::Validators::IntegerOrCustomValue) Grape::Validations.register_validator(:iteration_id, ::API::Validations::Validators::IntegerOrCustomValue)
Grape::Validations.register_validator(:project_portable, ::API::Validations::Validators::ProjectPortable) Grape::Validations.register_validator(:project_portable, ::API::Validations::Validators::ProjectPortable)
# TODO Delete this validator along with the packages_conan_allow_empty_username_channel feature flag
# # https://gitlab.com/gitlab-org/gitlab/-/issues/346006
Grape::Validations.register_validator('packages_conan_user_channel', ::API::Validations::Validators::PackagesConanUserChannel)
...@@ -105,8 +105,7 @@ For more details about creating and managing Conan packages, see the ...@@ -105,8 +105,7 @@ For more details about creating and managing Conan packages, see the
#### Package without a username and a channel #### Package without a username and a channel
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/345055) in GitLab 14.6 [with a flag](../../../administration/feature_flags.md) named `packages_conan_allow_empty_username_channel`. Disabled by default. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/345055) in GitLab 14.6.
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/345055) in GitLab 14.6.
Even though they are [recommended](https://docs.conan.io/en/latest/reference/conanfile/attributes.html#user-channel) Even though they are [recommended](https://docs.conan.io/en/latest/reference/conanfile/attributes.html#user-channel)
to distinguish your package from a similarly named existing package, to distinguish your package from a similarly named existing package,
......
...@@ -27,6 +27,7 @@ module API ...@@ -27,6 +27,7 @@ module API
PACKAGE_COMPONENT_REGEX = Gitlab::Regex.conan_recipe_component_regex PACKAGE_COMPONENT_REGEX = Gitlab::Regex.conan_recipe_component_regex
CONAN_REVISION_REGEX = Gitlab::Regex.conan_revision_regex CONAN_REVISION_REGEX = Gitlab::Regex.conan_revision_regex
CONAN_REVISION_USER_CHANNEL_REGEX = Gitlab::Regex.conan_recipe_user_channel_regex
CONAN_FILES = (Gitlab::Regex::Packages::CONAN_RECIPE_FILES + Gitlab::Regex::Packages::CONAN_PACKAGE_FILES).freeze CONAN_FILES = (Gitlab::Regex::Packages::CONAN_RECIPE_FILES + Gitlab::Regex::Packages::CONAN_PACKAGE_FILES).freeze
...@@ -105,12 +106,12 @@ module API ...@@ -105,12 +106,12 @@ module API
params do params do
requires :package_name, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package name' requires :package_name, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package name'
requires :package_version, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package version' requires :package_version, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package version'
requires :package_username, type: String, packages_conan_user_channel: true, desc: 'Package username' requires :package_username, type: String, regexp: CONAN_REVISION_USER_CHANNEL_REGEX, desc: 'Package username'
requires :package_channel, type: String, packages_conan_user_channel: true, desc: 'Package channel' requires :package_channel, type: String, regexp: CONAN_REVISION_USER_CHANNEL_REGEX, desc: 'Package channel'
end end
namespace 'conans/:package_name/:package_version/:package_username/:package_channel', requirements: PACKAGE_REQUIREMENTS do namespace 'conans/:package_name/:package_version/:package_username/:package_channel', requirements: PACKAGE_REQUIREMENTS do
after_validation do after_validation do
check_username_channel if Feature.enabled?(:packages_conan_allow_empty_username_channel) check_username_channel
end end
# Get the snapshot # Get the snapshot
...@@ -268,8 +269,8 @@ module API ...@@ -268,8 +269,8 @@ module API
params do params do
requires :package_name, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package name' requires :package_name, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package name'
requires :package_version, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package version' requires :package_version, type: String, regexp: PACKAGE_COMPONENT_REGEX, desc: 'Package version'
requires :package_username, type: String, packages_conan_user_channel: true, desc: 'Package username' requires :package_username, type: String, regexp: CONAN_REVISION_USER_CHANNEL_REGEX, desc: 'Package username'
requires :package_channel, type: String, packages_conan_user_channel: true, desc: 'Package channel' requires :package_channel, type: String, regexp: CONAN_REVISION_USER_CHANNEL_REGEX, desc: 'Package channel'
requires :recipe_revision, type: String, regexp: CONAN_REVISION_REGEX, desc: 'Conan Recipe Revision' requires :recipe_revision, type: String, regexp: CONAN_REVISION_REGEX, desc: 'Conan Recipe Revision'
end end
namespace 'files/:package_name/:package_version/:package_username/:package_channel/:recipe_revision', requirements: PACKAGE_REQUIREMENTS do namespace 'files/:package_name/:package_version/:package_username/:package_channel/:recipe_revision', requirements: PACKAGE_REQUIREMENTS do
...@@ -278,7 +279,7 @@ module API ...@@ -278,7 +279,7 @@ module API
end end
after_validation do after_validation do
check_username_channel if Feature.enabled?(:packages_conan_allow_empty_username_channel) check_username_channel
end end
params do params do
......
# frozen_string_literal: true
module API
module Validations
module Validators
# TODO Delete this validator along with the packages_conan_allow_empty_username_channel feature flag
# Use a regexp validator in its place: regexp: Gitlab::Regex.conan_recipe_user_channel_regex
# https://gitlab.com/gitlab-org/gitlab/-/issues/346006
class PackagesConanUserChannel < Grape::Validations::Base
def validate_param!(attr_name, params)
value = params[attr_name]
if Feature.enabled?(:packages_conan_allow_empty_username_channel)
unless Gitlab::Regex.conan_recipe_user_channel_regex.match?(value)
raise Grape::Exceptions::Validation.new(
params: [@scope.full_name(attr_name)],
message: 'is invalid'
)
end
else
unless Gitlab::Regex.conan_recipe_component_regex.match?(value)
raise Grape::Exceptions::Validation.new(
params: [@scope.full_name(attr_name)],
message: 'is invalid'
)
end
end
end
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe API::Validations::Validators::PackagesConanUserChannel do
include ApiValidatorsHelpers
describe '#validate_param!' do
subject do
described_class.new(['test'], {}, false, scope.new)
end
shared_examples 'accepting valid values for conan user channels' do
let(:fifty_one_characters) { 'f_a' * 17}
it { expect_no_validation_error('test' => 'foobar') }
it { expect_no_validation_error('test' => 'foo_bar') }
it { expect_no_validation_error('test' => 'foo+bar') }
it { expect_no_validation_error('test' => '_foo+bar-baz+1.0') }
it { expect_no_validation_error('test' => '1.0.0') }
it { expect_validation_error('test' => '-foo_bar') }
it { expect_validation_error('test' => '+foo_bar') }
it { expect_validation_error('test' => '.foo_bar') }
it { expect_validation_error('test' => 'foo@bar') }
it { expect_validation_error('test' => 'foo/bar') }
it { expect_validation_error('test' => '!!()()') }
it { expect_validation_error('test' => fifty_one_characters) }
end
it_behaves_like 'accepting valid values for conan user channels'
it { expect_no_validation_error('test' => '_') }
context 'with packages_conan_allow_empty_username_channel disabled' do
before do
stub_feature_flags(packages_conan_allow_empty_username_channel: false)
end
it_behaves_like 'accepting valid values for conan user channels'
it { expect_validation_error('test' => '_') }
end
end
end
...@@ -54,23 +54,17 @@ RSpec.describe Packages::Conan::Metadatum, type: :model do ...@@ -54,23 +54,17 @@ RSpec.describe Packages::Conan::Metadatum, type: :model do
subject { metadatum.valid? } subject { metadatum.valid? }
where(:username, :channel, :feature_flag, :valid) do where(:username, :channel, :valid) do
'username' | 'channel' | true | true 'username' | 'channel' | true
'username' | '_' | true | false 'username' | '_' | false
'_' | 'channel' | true | false '_' | 'channel' | false
'_' | '_' | true | true '_' | '_' | true
'username' | 'channel' | false | true
'username' | '_' | false | false
'_' | 'channel' | false | false
'_' | '_' | false | false
end end
with_them do with_them do
before do before do
metadatum.package_username = username metadatum.package_username = username
metadatum.package_channel = channel metadatum.package_channel = channel
stub_feature_flags(packages_conan_allow_empty_username_channel: feature_flag)
end end
it { is_expected.to eq(valid) } it { is_expected.to eq(valid) }
......
...@@ -183,16 +183,11 @@ RSpec.shared_examples 'handling empty values for username and channel' do ...@@ -183,16 +183,11 @@ RSpec.shared_examples 'handling empty values for username and channel' do
let(:recipe_path) { "#{package.name}/#{package.version}/#{package_username}/#{channel}" } let(:recipe_path) { "#{package.name}/#{package.version}/#{package_username}/#{channel}" }
where(:username, :channel, :feature_flag, :status) do where(:username, :channel, :status) do
'username' | 'channel' | true | :ok 'username' | 'channel' | :ok
'username' | '_' | true | :bad_request 'username' | '_' | :bad_request
'_' | 'channel' | true | :bad_request_or_not_found '_' | 'channel' | :bad_request_or_not_found
'_' | '_' | true | :ok_or_not_found '_' | '_' | :ok_or_not_found
'username' | 'channel' | false | :ok
'username' | '_' | false | :bad_request
'_' | 'channel' | false | :bad_request
'_' | '_' | false | :bad_request
end end
with_them do with_them do
...@@ -205,7 +200,6 @@ RSpec.shared_examples 'handling empty values for username and channel' do ...@@ -205,7 +200,6 @@ RSpec.shared_examples 'handling empty values for username and channel' do
end end
before do before do
stub_feature_flags(packages_conan_allow_empty_username_channel: feature_flag)
project.add_maintainer(user) # avoid any permission issue project.add_maintainer(user) # avoid any permission issue
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