diff options
Diffstat (limited to 'app/services/packages')
9 files changed, 66 insertions, 32 deletions
diff --git a/app/services/packages/composer/create_package_service.rb b/app/services/packages/composer/create_package_service.rb index ad5d267698b..7e16fc78599 100644 --- a/app/services/packages/composer/create_package_service.rb +++ b/app/services/packages/composer/create_package_service.rb @@ -2,7 +2,7 @@ module Packages module Composer - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService include ::Gitlab::Utils::StrongMemoize def execute @@ -21,10 +21,7 @@ module Packages private def created_package - project - .packages - .composer - .safe_find_or_create_by!(name: package_name, version: package_version) + find_or_create_package!(:composer, name: package_name, version: package_version) end def composer_json diff --git a/app/services/packages/conan/create_package_service.rb b/app/services/packages/conan/create_package_service.rb index 22a0436c5fb..35046d8776e 100644 --- a/app/services/packages/conan/create_package_service.rb +++ b/app/services/packages/conan/create_package_service.rb @@ -2,12 +2,11 @@ module Packages module Conan - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService def execute - project.packages.create!( + create_package!(:conan, name: params[:package_name], version: params[:package_version], - package_type: :conan, conan_metadatum_attributes: { package_username: params[:package_username], package_channel: params[:package_channel] diff --git a/app/services/packages/create_package_service.rb b/app/services/packages/create_package_service.rb new file mode 100644 index 00000000000..397a5f74e0a --- /dev/null +++ b/app/services/packages/create_package_service.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Packages + class CreatePackageService < BaseService + protected + + def find_or_create_package!(package_type, name: params[:name], version: params[:version]) + project + .packages + .with_package_type(package_type) + .safe_find_or_create_by!(name: name, version: version) do |pkg| + pkg.creator = package_creator + end + end + + def create_package!(package_type, attrs = {}) + project + .packages + .with_package_type(package_type) + .create!(package_attrs(attrs)) + end + + private + + def package_attrs(attrs) + { + creator: package_creator, + name: params[:name], + version: params[:version] + }.merge(attrs) + end + + def package_creator + current_user if current_user.is_a?(User) + end + end +end diff --git a/app/services/packages/maven/create_package_service.rb b/app/services/packages/maven/create_package_service.rb index aca5d28ca98..3df17021499 100644 --- a/app/services/packages/maven/create_package_service.rb +++ b/app/services/packages/maven/create_package_service.rb @@ -1,15 +1,12 @@ # frozen_string_literal: true module Packages module Maven - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService def execute app_group, _, app_name = params[:name].rpartition('/') app_group.tr!('/', '.') - package = project.packages.create!( - name: params[:name], - version: params[:version], - package_type: :maven, + package = create_package!(:maven, maven_metadatum_attributes: { path: params[:path], app_group: app_group, diff --git a/app/services/packages/npm/create_package_service.rb b/app/services/packages/npm/create_package_service.rb index cf927683ce9..7f868b71734 100644 --- a/app/services/packages/npm/create_package_service.rb +++ b/app/services/packages/npm/create_package_service.rb @@ -1,24 +1,21 @@ # frozen_string_literal: true module Packages module Npm - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService include Gitlab::Utils::StrongMemoize def execute return error('Version is empty.', 400) if version.blank? return error('Package already exists.', 403) if current_package_exists? + return error('File is too large.', 400) if file_size_exceeded? - ActiveRecord::Base.transaction { create_package! } + ActiveRecord::Base.transaction { create_npm_package! } end private - def create_package! - package = project.packages.create!( - name: name, - version: version, - package_type: 'npm' - ) + def create_npm_package! + package = create_package!(:npm, name: name, version: version) if build.present? package.create_build_info!(pipeline: build.pipeline) @@ -86,6 +83,10 @@ module Packages _version, versions_data = params[:versions].first versions_data end + + def file_size_exceeded? + project.actual_limits.exceeded?(:npm_max_file_size, attachment['length'].to_i) + end end end end diff --git a/app/services/packages/nuget/create_dependency_service.rb b/app/services/packages/nuget/create_dependency_service.rb index 2be5db732f6..19143fe3778 100644 --- a/app/services/packages/nuget/create_dependency_service.rb +++ b/app/services/packages/nuget/create_dependency_service.rb @@ -41,7 +41,7 @@ module Packages } end - ::Gitlab::Database.bulk_insert(::Packages::Nuget::DependencyLinkMetadatum.table_name, rows.compact) + ::Gitlab::Database.bulk_insert(::Packages::Nuget::DependencyLinkMetadatum.table_name, rows.compact) # rubocop:disable Gitlab/BulkInsert end def raw_dependency_for(dependency) diff --git a/app/services/packages/nuget/create_package_service.rb b/app/services/packages/nuget/create_package_service.rb index 68ad7f028e4..3999ccd3347 100644 --- a/app/services/packages/nuget/create_package_service.rb +++ b/app/services/packages/nuget/create_package_service.rb @@ -2,12 +2,12 @@ module Packages module Nuget - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService TEMPORARY_PACKAGE_NAME = 'NuGet.Temporary.Package' PACKAGE_VERSION = '0.0.0' def execute - project.packages.nuget.create!( + create_package!(:nuget, name: TEMPORARY_PACKAGE_NAME, version: "#{PACKAGE_VERSION}-#{uuid}" ) diff --git a/app/services/packages/pypi/create_package_service.rb b/app/services/packages/pypi/create_package_service.rb index 1313fc80e33..c49efca0fc5 100644 --- a/app/services/packages/pypi/create_package_service.rb +++ b/app/services/packages/pypi/create_package_service.rb @@ -2,16 +2,22 @@ module Packages module Pypi - class CreatePackageService < BaseService + class CreatePackageService < ::Packages::CreatePackageService include ::Gitlab::Utils::StrongMemoize def execute ::Packages::Package.transaction do - Packages::Pypi::Metadatum.upsert( - package_id: created_package.id, + meta = Packages::Pypi::Metadatum.new( + package: created_package, required_python: params[:requires_python] ) + unless meta.valid? + raise ActiveRecord::RecordInvalid.new(meta) + end + + Packages::Pypi::Metadatum.upsert(meta.attributes) + ::Packages::CreatePackageFileService.new(created_package, file_params).execute end end @@ -20,10 +26,7 @@ module Packages def created_package strong_memoize(:created_package) do - project - .packages - .pypi - .safe_find_or_create_by!(name: params[:name], version: params[:version]) + find_or_create_package!(:pypi) end end diff --git a/app/services/packages/update_tags_service.rb b/app/services/packages/update_tags_service.rb index da50cd3479e..adfad52910e 100644 --- a/app/services/packages/update_tags_service.rb +++ b/app/services/packages/update_tags_service.rb @@ -15,7 +15,7 @@ module Packages tags_to_create = @tags - existing_tags @package.tags.with_name(tags_to_destroy).delete_all if tags_to_destroy.any? - ::Gitlab::Database.bulk_insert(Packages::Tag.table_name, rows(tags_to_create)) if tags_to_create.any? + ::Gitlab::Database.bulk_insert(Packages::Tag.table_name, rows(tags_to_create)) if tags_to_create.any? # rubocop:disable Gitlab/BulkInsert end private |