diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-01 15:10:15 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-01 15:10:15 +0300 |
commit | cf19a51fc5711144b26f7123c14f9b64a7597195 (patch) | |
tree | 09c151fd3655213e87b1c25beb842a99510122cb /app/services | |
parent | 3b1df712c7a15c9b6abadd61e9c8894fdeb0442a (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/services')
-rw-r--r-- | app/services/ci/runners/assign_runner_service.rb | 4 | ||||
-rw-r--r-- | app/services/issues/base_service.rb | 4 | ||||
-rw-r--r-- | app/services/issues/close_service.rb | 5 | ||||
-rw-r--r-- | app/services/issues/reopen_service.rb | 6 | ||||
-rw-r--r-- | app/services/packages/nuget/metadata_extraction_service.rb | 26 | ||||
-rw-r--r-- | app/services/packages/nuget/sync_metadatum_service.rb | 47 | ||||
-rw-r--r-- | app/services/packages/nuget/update_package_from_metadata_service.rb | 36 |
7 files changed, 94 insertions, 34 deletions
diff --git a/app/services/ci/runners/assign_runner_service.rb b/app/services/ci/runners/assign_runner_service.rb index 290f945cc72..4e7b08bdd7a 100644 --- a/app/services/ci/runners/assign_runner_service.rb +++ b/app/services/ci/runners/assign_runner_service.rb @@ -17,6 +17,10 @@ module Ci return ServiceResponse.error(message: 'user not allowed to assign runner', http_status: :forbidden) end + unless @user.can?(:register_project_runners, @project) + return ServiceResponse.error(message: 'user not allowed to add runners to project', http_status: :forbidden) + end + if @runner.assign_to(@project, @user) ServiceResponse.success else diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index efe42fb29d5..f982d66eb08 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -124,6 +124,10 @@ module Issues def update_project_counter_caches?(issue) super || issue.confidential_changed? end + + def log_audit_event(issue, user, event_type, message) + # defined in EE + end end end diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index e45033f2b91..f848a8db12a 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -28,6 +28,11 @@ module Issues event_service.close_issue(issue, current_user) create_note(issue, closed_via) if system_note + if current_user.project_bot? + log_audit_event(issue, current_user, "#{issue.issue_type}_closed_by_project_bot", + "Closed #{issue.issue_type.humanize(capitalize: false)} #{issue.title}") + end + closed_via = _("commit %{commit_id}") % { commit_id: closed_via.id } if closed_via.is_a?(Commit) notification_service.async.close_issue(issue, current_user, { closed_via: closed_via }) if notifications diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb index f4d229ecec7..d71ba4e3414 100644 --- a/app/services/issues/reopen_service.rb +++ b/app/services/issues/reopen_service.rb @@ -7,6 +7,12 @@ module Issues if issue.reopen event_service.reopen_issue(issue, current_user) + + if current_user.project_bot? + log_audit_event(issue, current_user, "#{issue.issue_type}_reopened_by_project_bot", + "Reopened #{issue.issue_type.humanize(capitalize: false)} #{issue.title}") + end + create_note(issue, 'reopened') notification_service.async.reopen_issue(issue, current_user) perform_incident_management_actions(issue) diff --git a/app/services/packages/nuget/metadata_extraction_service.rb b/app/services/packages/nuget/metadata_extraction_service.rb index 02086b2a282..3b92d977c79 100644 --- a/app/services/packages/nuget/metadata_extraction_service.rb +++ b/app/services/packages/nuget/metadata_extraction_service.rb @@ -7,18 +7,22 @@ module Packages ExtractionError = Class.new(StandardError) + ROOT_XPATH = '//xmlns:package/xmlns:metadata/xmlns' + XPATHS = { - package_name: '//xmlns:package/xmlns:metadata/xmlns:id', - package_version: '//xmlns:package/xmlns:metadata/xmlns:version', - license_url: '//xmlns:package/xmlns:metadata/xmlns:licenseUrl', - project_url: '//xmlns:package/xmlns:metadata/xmlns:projectUrl', - icon_url: '//xmlns:package/xmlns:metadata/xmlns:iconUrl' + package_name: "#{ROOT_XPATH}:id", + package_version: "#{ROOT_XPATH}:version", + authors: "#{ROOT_XPATH}:authors", + description: "#{ROOT_XPATH}:description", + license_url: "#{ROOT_XPATH}:licenseUrl", + project_url: "#{ROOT_XPATH}:projectUrl", + icon_url: "#{ROOT_XPATH}:iconUrl" }.freeze - XPATH_DEPENDENCIES = '//xmlns:package/xmlns:metadata/xmlns:dependencies/xmlns:dependency' - XPATH_DEPENDENCY_GROUPS = '//xmlns:package/xmlns:metadata/xmlns:dependencies/xmlns:group' - XPATH_TAGS = '//xmlns:package/xmlns:metadata/xmlns:tags' - XPATH_PACKAGE_TYPES = '//xmlns:package/xmlns:metadata/xmlns:packageTypes/xmlns:packageType' + XPATH_DEPENDENCIES = "#{ROOT_XPATH}:dependencies/xmlns:dependency".freeze + XPATH_DEPENDENCY_GROUPS = "#{ROOT_XPATH}:dependencies/xmlns:group".freeze + XPATH_TAGS = "#{ROOT_XPATH}:tags".freeze + XPATH_PACKAGE_TYPES = "#{ROOT_XPATH}:packageTypes/xmlns:packageType".freeze MAX_FILE_SIZE = 4.megabytes.freeze @@ -40,10 +44,6 @@ module Packages end end - def project - package_file.package.project - end - def valid_package_file? package_file && package_file.package&.nuget? && diff --git a/app/services/packages/nuget/sync_metadatum_service.rb b/app/services/packages/nuget/sync_metadatum_service.rb index ca9cc4d5b78..189b972c156 100644 --- a/app/services/packages/nuget/sync_metadatum_service.rb +++ b/app/services/packages/nuget/sync_metadatum_service.rb @@ -15,6 +15,8 @@ module Packages metadatum.destroy! if metadatum.persisted? else metadatum.update!( + authors: authors, + description: description, license_url: license_url, project_url: project_url, icon_url: icon_url @@ -24,26 +26,57 @@ module Packages private + attr_reader :package, :metadata + def metadatum - strong_memoize(:metadatum) do - @package.nuget_metadatum || @package.build_nuget_metadatum - end + package.nuget_metadatum || package.build_nuget_metadatum end + strong_memoize_attr :metadatum def blank_metadata? - project_url.blank? && license_url.blank? && icon_url.blank? + [authors, description, project_url, license_url, icon_url].all?(&:blank?) + end + + def authors + truncate_value(:authors, ::Packages::Nuget::Metadatum::MAX_AUTHORS_LENGTH) end + strong_memoize_attr :authors + + def description + truncate_value(:description, ::Packages::Nuget::Metadatum::MAX_DESCRIPTION_LENGTH) + end + strong_memoize_attr :description def project_url - @metadata[:project_url] + metadata[:project_url] end def license_url - @metadata[:license_url] + metadata[:license_url] end def icon_url - @metadata[:icon_url] + metadata[:icon_url] + end + + def truncate_value(field, max_length) + return unless metadata[field] + + if metadata[field].size > max_length + log_info("#{field.capitalize} is too long (maximum is #{max_length} characters)", field) + end + + metadata[field].truncate(max_length) + end + + def log_info(message, field) + Gitlab::AppLogger.info( + class: self.class.name, + message: message, + package_id: package.id, + project_id: package.project_id, + field => metadata[field] + ) end end end diff --git a/app/services/packages/nuget/update_package_from_metadata_service.rb b/app/services/packages/nuget/update_package_from_metadata_service.rb index 5456ad4cad7..7153a9035b8 100644 --- a/app/services/packages/nuget/update_package_from_metadata_service.rb +++ b/app/services/packages/nuget/update_package_from_metadata_service.rb @@ -17,7 +17,7 @@ module Packages end def execute - raise InvalidMetadataError, 'package name and/or package version not found in metadata' unless valid_metadata? + raise InvalidMetadataError, 'package name, version, authors and/or description not found in metadata' unless valid_metadata? try_obtain_lease do @package_file.transaction do @@ -55,17 +55,19 @@ module Packages return if symbol_package? ::Packages::Nuget::SyncMetadatumService - .new(package, metadata.slice(:project_url, :license_url, :icon_url)) + .new(package, metadata.slice(:authors, :description, :project_url, :license_url, :icon_url)) .execute + ::Packages::UpdateTagsService .new(package, package_tags) .execute + rescue StandardError => e raise InvalidMetadataError, e.message end def valid_metadata? - package_name.present? && package_version.present? + [package_name, package_version, package_authors, package_description].all?(&:present?) end def link_to_existing_package @@ -93,15 +95,14 @@ module Packages end def existing_package - strong_memoize(:existing_package) do - @package_file.project.packages - .nuget - .with_name(package_name) - .with_version(package_version) - .not_pending_destruction - .first - end + @package_file.project.packages + .nuget + .with_name(package_name) + .with_version(package_version) + .not_pending_destruction + .first end + strong_memoize_attr :existing_package def package_name metadata[:package_name] @@ -123,15 +124,22 @@ module Packages metadata.fetch(:package_types, []) end + def package_authors + metadata[:authors] + end + + def package_description + metadata[:description] + end + def symbol_package? package_types.include?(SYMBOL_PACKAGE_IDENTIFIER) end def metadata - strong_memoize(:metadata) do - ::Packages::Nuget::MetadataExtractionService.new(@package_file.id).execute - end + ::Packages::Nuget::MetadataExtractionService.new(@package_file.id).execute end + strong_memoize_attr :metadata def package_filename "#{package_name.downcase}.#{package_version.downcase}.#{symbol_package? ? 'snupkg' : 'nupkg'}" |