summaryrefslogtreecommitdiff
path: root/app/presenters
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2021-01-20 13:34:23 -0600
committerRobert Speicher <rspeicher@gmail.com>2021-01-20 13:34:23 -0600
commit6438df3a1e0fb944485cebf07976160184697d72 (patch)
tree00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /app/presenters
parent42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff)
downloadgitlab-ce-6438df3a1e0fb944485cebf07976160184697d72.tar.gz
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'app/presenters')
-rw-r--r--app/presenters/board_presenter.rb5
-rw-r--r--app/presenters/ci/build_runner_presenter.rb21
-rw-r--r--app/presenters/packages/composer/packages_presenter.rb30
-rw-r--r--app/presenters/packages/nuget/service_index_presenter.rb104
4 files changed, 100 insertions, 60 deletions
diff --git a/app/presenters/board_presenter.rb b/app/presenters/board_presenter.rb
new file mode 100644
index 00000000000..d7cecd44dd7
--- /dev/null
+++ b/app/presenters/board_presenter.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+class BoardPresenter < Gitlab::View::Presenter::Delegated
+ presents :board
+end
diff --git a/app/presenters/ci/build_runner_presenter.rb b/app/presenters/ci/build_runner_presenter.rb
index 64461fa9193..ffa33dc9f15 100644
--- a/app/presenters/ci/build_runner_presenter.rb
+++ b/app/presenters/ci/build_runner_presenter.rb
@@ -93,7 +93,22 @@ module Ci
end
def refspec_for_persistent_ref
- "+#{persistent_ref_path}:#{persistent_ref_path}"
+ #
+ # End-to-end test coverage for CI fetching seems to not be strong, so we
+ # are using a feature flag here to close the confidence gap. My (JV)
+ # confidence about the change is very high but if something is wrong
+ # with it after all, this would cause all CI jobs on gitlab.com to fail.
+ #
+ # The roll-out will be tracked in
+ # https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/746.
+ #
+ if Feature.enabled?(:scalability_ci_fetch_sha, type: :ops)
+ # Use persistent_ref.sha because it causes 'git fetch' to do less work.
+ # See https://gitlab.com/gitlab-com/gl-infra/scalability/-/issues/746.
+ "+#{pipeline.persistent_ref.sha}:#{pipeline.persistent_ref.path}"
+ else
+ "+#{pipeline.persistent_ref.path}:#{pipeline.persistent_ref.path}"
+ end
end
def persistent_ref_exist?
@@ -107,10 +122,6 @@ module Ci
pipeline.persistent_ref.exist?
end
- def persistent_ref_path
- pipeline.persistent_ref.path
- end
-
def git_depth_variable
strong_memoize(:git_depth_variable) do
variables&.find { |variable| variable[:key] == 'GIT_DEPTH' }
diff --git a/app/presenters/packages/composer/packages_presenter.rb b/app/presenters/packages/composer/packages_presenter.rb
index cce006cbb1a..ed0e9d3b731 100644
--- a/app/presenters/packages/composer/packages_presenter.rb
+++ b/app/presenters/packages/composer/packages_presenter.rb
@@ -20,33 +20,17 @@ module Packages
end
def package_versions(packages = @packages)
- { 'packages' => { packages.first.name => package_versions_map(packages) } }
+ package_versions_index(packages).as_json
end
private
- def package_versions_map(packages)
- packages.each_with_object({}) do |package, map|
- map[package.version] = package_metadata(package)
- end
+ def package_versions_sha(packages = @packages)
+ package_versions_index(packages).sha
end
- def package_metadata(package)
- json = package.composer_metadatum.composer_json
-
- json.merge('dist' => package_dist(package), 'uid' => package.id, 'version' => package.version)
- end
-
- def package_dist(package)
- sha = package.composer_metadatum.target_sha
- archive_api_path = api_v4_projects_packages_composer_archives_package_name_path({ id: package.project_id, package_name: package.name, format: '.zip' }, true)
-
- {
- 'type' => 'zip',
- 'url' => expose_url(archive_api_path) + "?sha=#{sha}",
- 'reference' => sha,
- 'shasum' => ''
- }
+ def package_versions_index(packages)
+ ::Gitlab::Composer::VersionIndex.new(packages)
end
def providers_map
@@ -59,10 +43,6 @@ module Packages
map
end
- def package_versions_sha(packages)
- Digest::SHA256.hexdigest(package_versions(packages).to_json)
- end
-
def provider_sha
Digest::SHA256.hexdigest(provider.to_json)
end
diff --git a/app/presenters/packages/nuget/service_index_presenter.rb b/app/presenters/packages/nuget/service_index_presenter.rb
index ed00b36b362..b3cc912b811 100644
--- a/app/presenters/packages/nuget/service_index_presenter.rb
+++ b/app/presenters/packages/nuget/service_index_presenter.rb
@@ -19,10 +19,13 @@ module Packages
metadata: 'Get package metadata.'
}.freeze
- VERSION = '3.0.0'.freeze
+ VERSION = '3.0.0'
- def initialize(project)
- @project = project
+ PROJECT_LEVEL_SERVICES = %i[download publish].freeze
+ GROUP_LEVEL_SERVICES = %i[search metadata].freeze
+
+ def initialize(project_or_group)
+ @project_or_group = project_or_group
end
def version
@@ -30,16 +33,21 @@ module Packages
end
def resources
- [
- build_service(:download),
- build_service(:search),
- build_service(:publish),
- build_service(:metadata)
- ].flatten
+ available_services.map { |service| build_service(service) }
+ .flatten
end
private
+ def available_services
+ case scope
+ when :group
+ GROUP_LEVEL_SERVICES
+ when :project
+ (GROUP_LEVEL_SERVICES + PROJECT_LEVEL_SERVICES).flatten
+ end
+ end
+
def build_service(service_type)
url = build_service_url(service_type)
comment = SERVICE_COMMENTS[service_type]
@@ -50,36 +58,72 @@ module Packages
end
def build_service_url(service_type)
- base_path = api_v4_projects_packages_nuget_path(id: @project.id)
-
full_path = case service_type
when :download
- api_v4_projects_packages_nuget_download_package_name_package_version_package_filename_path(
- {
- id: @project.id,
- package_name: nil,
- package_version: nil,
- package_filename: nil
- },
- true
- )
+ download_service_url
when :search
- "#{base_path}/query"
+ search_service_url
when :metadata
- api_v4_projects_packages_nuget_metadata_package_name_package_version_path(
- {
- id: @project.id,
- package_name: nil,
- package_version: nil
- },
- true
- )
+ metadata_service_url
when :publish
- base_path
+ publish_service_url
end
expose_url(full_path)
end
+
+ def scope
+ return :project if @project_or_group.is_a?(::Project)
+ return :group if @project_or_group.is_a?(::Group)
+ end
+
+ def download_service_url
+ params = {
+ id: @project_or_group.id,
+ package_name: nil,
+ package_version: nil,
+ package_filename: nil
+ }
+
+ api_v4_projects_packages_nuget_download_package_name_package_version_package_filename_path(
+ params,
+ true
+ )
+ end
+
+ def metadata_service_url
+ params = {
+ id: @project_or_group.id,
+ package_name: nil,
+ package_version: nil
+ }
+
+ case scope
+ when :group
+ api_v4_groups___packages_nuget_metadata_package_name_package_version_path(
+ params,
+ true
+ )
+ when :project
+ api_v4_projects_packages_nuget_metadata_package_name_package_version_path(
+ params,
+ true
+ )
+ end
+ end
+
+ def search_service_url
+ case scope
+ when :group
+ api_v4_groups___packages_nuget_query_path(id: @project_or_group.id)
+ when :project
+ api_v4_projects_packages_nuget_query_path(id: @project_or_group.id)
+ end
+ end
+
+ def publish_service_url
+ api_v4_projects_packages_nuget_path(id: @project_or_group.id)
+ end
end
end
end